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