Below is a proposal for an ''iscsitgt'' DTrace provider that
will be integrated
into the Solaris iSCSI target. I''ll be submitting the PSARC case in
about
a week and welcome any feedback (and will potentially act on it until then).
Thanks.
Adam
---8<---
The ''iscsitgt'' provider is a USDT provider built into the
iSCSI target
daemon (iscsitgtd). As a USDT provider the name is concatenated with
the process ID of the daemon (e.g. ''iscistgt123''). The
iscsitgt provider
defines the following probes:
SCSI command/response
iscsitgt*:::scsi-command
iscsitgt*:::scsi-response
Data out/in/request (rtt)
iscsitgt*:::data-send
iscsitgt*:::data-receive
iscsitgt*:::data-request
Login and logout command/response
iscsitgt*:::login-command
iscsitgt*:::login-response
iscsitgt*:::logout-command
iscsitgt*:::logout-response
NOP out/in (pings)
iscsitgt*:::nop-receive
iscsitgt*:::nop-send
Text and task command/response
iscsitgt*:::task-command
iscsitgt*:::task-response
iscsitgt*:::text-command
iscsitgt*:::text-response
Asynchronous message from target
iscsitgt*:::async-send
The first three arguments to these probes are all the same:
args[0] conninfo_t local (target) socket info
args[1] conninfo_t remote (initiator) socket info
args[2] iscsiinfo_t common iSCSI properties
typedef struct conninfo {
string ci_host; /* host IP address as a string */
uint16_t ci_port; /* port number */
uint16_t ci_protocol; /* IP protocol (either 4 or 6) */
} conninfo_t;
typedef struct iscsiinfo {
string ii_initiator; /* initiator IQN */
string ii_target; /* target IQN */
uint64_t ii_lun; /* target logical unit number */
uint32_t ii_itt; /* initiator task tag */
uint32_t ii_ttt; /* target transfer tag */
uint32_t ii_cmdsn; /* command sequence number */
uint32_t ii_statsn; /* status sequence number */
uint32_t ii_datasn; /* data sequence number */
uint32_t ii_datalen; /* length of data payload */
} iscsiinfo_t;
If the initiator or target IQNs are invalid (e.g. in login-command),
they will be the empy string. If tag fields (ii_itt and ii_ttt) are
invalid, they are set to 0xffffffff (the tag reserved by the iSCSI
protocol). If the sequence numbers are invalid, they are set to 0.
The only probe with an additional argument is the iscsitgt*:::scsi-command
probes:
args[3] uint32_t SCSI opcode
This can be used to determine the exact SCSI operation.
Here''s the DTrace stability table for these probes:
| Name Data Class
-------------+-------------------------------------------
Provider | Evolving Evolving ISA
Module | Private Private Unknown
Function | Private Private Unknown
Name | Evolving Evolving ISA
Arguments | Unstable Unstable ISA
--
Adam Leventhal, Solaris Kernel Development http://blogs.sun.com/ahl
This case was approved at today''s PSARC meeting. I expect it will be integrated into Solaris in a week or two. Adam On Mon, Mar 05, 2007 at 03:23:32PM -0800, Adam Leventhal wrote:> Below is a proposal for an ''iscsitgt'' DTrace provider that will be integrated > into the Solaris iSCSI target. I''ll be submitting the PSARC case in about > a week and welcome any feedback (and will potentially act on it until then). > > Thanks. > > Adam > > ---8<--- > > The ''iscsitgt'' provider is a USDT provider built into the iSCSI target > daemon (iscsitgtd). As a USDT provider the name is concatenated with > the process ID of the daemon (e.g. ''iscistgt123''). The iscsitgt provider > defines the following probes: > > SCSI command/response > iscsitgt*:::scsi-command > iscsitgt*:::scsi-response > > Data out/in/request (rtt) > iscsitgt*:::data-send > iscsitgt*:::data-receive > iscsitgt*:::data-request > > Login and logout command/response > iscsitgt*:::login-command > iscsitgt*:::login-response > iscsitgt*:::logout-command > iscsitgt*:::logout-response > > NOP out/in (pings) > iscsitgt*:::nop-receive > iscsitgt*:::nop-send > > Text and task command/response > iscsitgt*:::task-command > iscsitgt*:::task-response > iscsitgt*:::text-command > iscsitgt*:::text-response > > Asynchronous message from target > iscsitgt*:::async-send > > The first three arguments to these probes are all the same: > > args[0] conninfo_t local (target) socket info > args[1] conninfo_t remote (initiator) socket info > args[2] iscsiinfo_t common iSCSI properties > > > typedef struct conninfo { > string ci_host; /* host IP address as a string */ > uint16_t ci_port; /* port number */ > uint16_t ci_protocol; /* IP protocol (either 4 or 6) */ > } conninfo_t; > > > typedef struct iscsiinfo { > string ii_initiator; /* initiator IQN */ > string ii_target; /* target IQN */ > uint64_t ii_lun; /* target logical unit number */ > > uint32_t ii_itt; /* initiator task tag */ > uint32_t ii_ttt; /* target transfer tag */ > > uint32_t ii_cmdsn; /* command sequence number */ > uint32_t ii_statsn; /* status sequence number */ > uint32_t ii_datasn; /* data sequence number */ > > uint32_t ii_datalen; /* length of data payload */ > } iscsiinfo_t; > > If the initiator or target IQNs are invalid (e.g. in login-command), > they will be the empy string. If tag fields (ii_itt and ii_ttt) are > invalid, they are set to 0xffffffff (the tag reserved by the iSCSI > protocol). If the sequence numbers are invalid, they are set to 0. > > > The only probe with an additional argument is the iscsitgt*:::scsi-command > probes: > > args[3] uint32_t SCSI opcode > > This can be used to determine the exact SCSI operation. > > > Here''s the DTrace stability table for these probes: > > | Name Data Class > -------------+------------------------------------------- > Provider | Evolving Evolving ISA > Module | Private Private Unknown > Function | Private Private Unknown > Name | Evolving Evolving ISA > Arguments | Unstable Unstable ISA > > -- > Adam Leventhal, Solaris Kernel Development http://blogs.sun.com/ahl > _______________________________________________ > dtrace-discuss mailing list > dtrace-discuss at opensolaris.org-- Adam Leventhal, Solaris Kernel Development http://blogs.sun.com/ahl