This document illustrates the general architecture and data flow of tgtd, the iSCSI target daemon. It shows how tgtd handles iSCSI requests from initiators and processes SCSI commands by communicating with low-level driver routines and backing storage devices like mmc, osd, and sbc. Management tasks like login, logout, and error handling are also depicted.
1 of 9
More Related Content
Tgtd illustration
1. tgtd illustration
based on https://github.com/fujita/tgt
Tuesday, November 8, 11 1
2. General Arch
epoll iSCSI, iSER, bst: aio, rdwr,
FCoE, etc. null, sg, ssc
low level backing
initiator
drivers con stores
n
R &W
target
mmc, osd,
Core sbc, scc, smc,
ssc
lu SC
a sk SI
mt
spc &
tgtadm mgmt
devices
utils,
common
Tuesday, November 8, 11 2
3. Mgmt Routine
If req Len>
tgtadm_req tgt_mgmt
tgtadm send
commands here mtask_handler
HDR_RECV sys_mgmt
PDU_RECV
target_mgmt
IPC: mgmt_task portal_mgmt
device_mgmt
mtask_handler
RSP_SEND account_mgmt
connection_mgmt
Tuesday, November 8, 11 3
4. State Transition of Conn
Security Security
Security auth Done
Free Security
login
Security
Login Login full
full
Only for iSER
Init
Start
Full Kernel
Ready Network Error
Proto Error Logout
Exit Close Scsi
Tuesday, November 8, 11 4
5. Cmd rx in iscsid 1
Immediate:
OpXX iscsi_task_queue iscsi_task_ececute
Other:
OP_DATA_OUT expected SNs:
iscsi_task_execute
Others:
iscsi_task_ececute
Add to pending list
NOOP_OUT/LOGOUT:
Set EPOLLIN|EPOLLOUT queue:
SCSI_CMD: target_cmd_queue
... target.c
iscsi_scsi_cmd_execute all:
SCSI_TMFUNC:
Set EPOLLIN|EPOLLOUT
iscsi_tm_execute target_mgmt_request
... target.c
Tuesday, November 8, 11 5
6. Cmd rx in iscsid 2
OpXX
OP_DATA_OUT iscsi_data_out_rx_done
Do nothing
FINAL && not pending:
iscsi_scsi_cmd_execute
... as in prev page
Tuesday, November 8, 11 6
7. SCSI Cmd Processing In target.c, scsi.c, & devs
cmd_perform ==
scsi_cmd_perfor
scsi_cmd_queued
Processed later
dev_type_template.ops[op]. cmd_perfor
sbc_rw, sbc_sync_cache BS
Others processed in sbc.c or spc.c
Tuesday, November 8, 11 7
8. Backing Storage
bs_init bs_thread_info follows lu
Create LU
bs_open pathname, fd, size
Dev request bs_cmd_submit(cmd)
Destroy LU bs_close, bs_exit
Tuesday, November 8, 11 8