srp port provider

Skip to end of metadata
Go to start of metadata

srp Provider

The srp provider provides probes for tracing srp port provider activity.

This is a kernel provider built into the COMSTAR srp target port provider.

Probes

Probes Overview

SRP events Event Probes
Service up/down srp:::service-up, srp:::service-down
Remote Port login/logout srp:::login-command, srp:::login-response, srp:::logout-command
SRP command/response srp:::task-command, srp:::task-response
SCSI command/response srp:::scsi-command, srp:::scsi-response
Data transfer srp:::xfer-start, srp:::xfer-done

For all of the providers below, string fields which are not known contain the string "<unknown>". Integer fields which are not known contain 0.

Top

Service up/down Event Probes

srp:::service-up and srp:::service-down trace SRP target online and offline events.
Remote port information (ci_remote) is unavailable for both probes.

Probes Variable Type Description
srp:::service-up
srp:::service-down
args[0] conninfo_t * connection information
srp:::service-up
srp:::service-down
args[1] srp_portinfo_t * local and remote port information

Remote Port Login/Logout Event Probes

Probes Variable Type Description
srp:::login-command
srp:::login-response
srp:::logout-command
args[0] conninfo_t * connection information
srp:::login-command
srp:::login-response
srp:::logout-command
args[1] srp_portinfo_t * local and remote port information
srp:::login-command
srp:::login-response
args[2] srp_logininfo_t * login command/response information

Top

SRP Command Event Probes

Probes Variable Type Description
srp:::task-command
srp:::task-response
args[0] conninfo_t * connection information
srp:::task-command
srp:::task-response
args[1] srp_portinfo_t * local and remote port info
srp:::scsi-response
srp:::scsi-command
args[2] srp_taskinfo_t * srp task information

Top

SCSI Command Event Probes

Probes Variable Type Description
srp:::scsi-command
srp:::scsi-response
args[0] conninfo_t * connection information
srp:::scsi-command
srp:::scsi-response
args[1] srp_portinfo_t * local and remote port info
srp:::scsi-command args[2] scsicmd_t * SCSI command block (cdb)
srp:::scsi-response args[2] srp_taskinfo_t * srp task information
srp:::scsi-command args[3] srp_taskinfo_t * srp task information

Top

Data Transfer Probes

Probes Variable Type Description
srp:::xfer-start
srp:::xfer-done
args[0] conninfo_t * connection information
srp:::xfer-start
srp:::xfer-done
args[1] fc_port_info_t * local port information
srp:::xfer-start
srp:::xfer-done
args[2] xferinfo_t * RDMA transfer information
srp:::xfer-start
srp:::xfer-done
args[3] srp_taskinfo_t * srp task information

Top

Types

Common types
scsicmd_t, conninfo_t and xferinfo_t are common types which are used by other providers.

scsicmd_t

typedef struct scsicmd {
        uint64_t ic_len;        /* CDB length */
        uint8_t  *ic_cdb;       /* CDB data */
} scsicmd_t;

conninfo_t

typedef struct conninfo {
        string ci_local;        /* GID of the local HCA */
        string ci_remote;       /* GID of the remote HCA */
        string ci_protocol;     /* protocol ("ib") */
} conninfo_t;

srp_portinfo_t

typedef struct srp_portinfo {
        /* initiator */
        string  pi_initiator;   /* Initiator: eui.xxxxxxxxxxxxxxx */
        string  pi_i_sid;       /* Initiator seiion id */

        /* target */
        string  pi_target;      /* Target: eui.xxxxxxxxxxxxxxx */
        string  pi_t_sid;       /* Target session id */

        uintptr_t pi_chan_id;   /* Channel identifier */
} srp_portinfo_t;

srp_logininfo_t

typedef struct srp_logininfo {
        uint64_t li_task_tag;      /* SRP task tag */
        uint32_t li_max_it_iu_len; /* Maxium iu length that initiator can
        send to target */
        uint32_t li_max_ti_iu_len; /* Maxium iu length that target can
        send to initiator */
        uint32_t li_request_limit; /* Maximun number of SRP requests
        that initiator can send on a channel */
        uint32_t reason_code;      /* Reason code */
} srp_logininfo_t;

srp_taskinfo_t

typedef struct srp_taskinfo {
        uint64_t ti_task_tag;   /* SRP task tag */
        uint64_t ti_lun;        /* Target logical unit number */
        uint8_t  ti_function;   /* Task management function */
        uint32_t ti_req_limit_delta; /* Increment of channel's request limit */
        uint8_t  ti_flag;            /* bit 2:DOOVER 3:DOUNDER 4:DIOVER 5:DIUNDER */
        uint32_t ti_do_resid_cnt;    /* Data-out residual count */
        uint32_t ti_di_resid_cnt;    /* Data-in residual count */
        uint8_t  ti_status;     /* Status of this task */
} srp_taskinfo_t;

xferinfo_t

typedef struct xferinfo {
        uintptr_t xfer_laddr;        /* Local buffer address */
        uint32_t  xfer_loffset;      /* Relative offset from local buffer */
        uint32_t  xfer_lkey;         /* Access control to local memory */
        uintptr_t xfer_raddr;        /* Remote virtual address */
        uint32_t  xfer_roffset;      /* Offset from the remote address */
        uint32_t  xfer_rkey;         /* Access control to remote address */
        uint32_t  xfer_len;          /* Transfer length */
        uint8_t   xfer_type;         /* 0: read; 1: write; */
} xferinfo_t;

Top

Examples

service.d

This is a simple script to produce a report of target online/offline evenets.

#!/usr/sbin/dtrace -s

#pragma D option quiet

dtrace:::BEGIN
{
        printf("Tracing... Hit Ctrl-C to end.\n\n");
        printf("%-14s   %-35s %-20s\n", "SRP EVENT", "LOCAL PORT", "EUI NAME");
};

srp:::service-up
{
        printf("%-14s   %-35s %-20s\n", probename, args[0]->ci_local, args[1]->pi_target);
}

srp:::service-down
{
        printf("%-14s   %-35s %-20s\n", probename, args[0]->ci_local, args[1]->pi_target);
}

This output shows the host and the number of iSCSI operations:

thump1## dtrace -s ~/src/service.d
Tracing... Hit Ctrl-C to end.
^C
SRP EVENT        LOCAL PORT                          EUI NAME
service-down     fe80000000000000:0003ba0001004d31   eui.0003BA0001004D30
service-down     fe80000000000000:0003ba0001004d32   eui.0003BA0001004D30
service-up       fe80000000000000:0003ba0001004d31   eui.0003BA0001004D30
service-up       fe80000000000000:0003ba0001004d32   eui.0003BA0001004D30
thump1##

The fields are:

field description
SRP EVENT srp event type
LOCAL PORT GID of the local port
EUI NAME EUI name of the local port
srpwho.d

This is a simple script to produce a report of the remote HCA port and a count of srp events. This is intended to provide a quick summary of srp activity when run on the SRP target server:

#!/usr/sbin/dtrace -s

#pragma D option quiet

dtrace:::BEGIN
{
        printf("Tracing... Hit Ctrl-C to end.\n");
}

srp:::login-command,
srp:::login-response,
srp:::task-command,
srp:::task-response,
srp:::scsi-command,
srp:::scsi-response,
srp:::xfer-start,
srp:::xfer-done
{
        @events[args[0]->ci_remote, probename] = count();
}

dtrace:::END
{
        printf("   %-33s %14s %8s\n", "REMOTE GID", "iSCSI EVENT", "COUNT");
        printa("   %-33s %14s %@8d\n", @events);
}

This output shows the host and the number of iSCSI operations:

thump1## dtrace -s ./srpwho.d
Tracing... Hit Ctrl-C to end.
^C
   REMOTE GID                           iSCSI EVENT    COUNT
   fe80000000000000:0003ba000100386d  login-command        1
   fe80000000000000:0003ba000100386d login-response        1
   fe80000000000000:0003ba0001003851  login-command        2
   fe80000000000000:0003ba0001003851 login-response        2
   fe80000000000000:0003ba0001003852  login-command        2
   fe80000000000000:0003ba0001003852 login-response        2
   fe80000000000000:0003ba0001004d32      xfer-done        9
   fe80000000000000:0003ba0001004d32     xfer-start        9
   fe80000000000000:0003ba0001004d31      xfer-done       18
   fe80000000000000:0003ba0001004d31     xfer-start       18
   fe80000000000000:0003ba0001004d32   scsi-command       22
   fe80000000000000:0003ba0001004d32  scsi-response       22
   fe80000000000000:0003ba0001004d32   task-command       22
   fe80000000000000:0003ba0001004d32  task-response       22
   fe80000000000000:0003ba0001004d31   scsi-command       42
   fe80000000000000:0003ba0001004d31  scsi-response       42
   fe80000000000000:0003ba0001004d31   task-command       42
   fe80000000000000:0003ba0001004d31  task-response       42

The fields are:

field description
REMOTE GID GID of the client HCA port
SRP EVENT srp event type
COUNT Number of events traced
srpsnoop.d

This is a simple script to snoop srp events when run on a srp target server.

#!/usr/sbin/dtrace -s

#pragma D option quiet
#pragma D option switchrate=10

dtrace:::BEGIN
{
        printf("%17s %3s  %-40s %-14s %6s %10s  %6s\n", "TIMESTAMP",
            "CPU", "REMOTE GID", "EVENT", "BYTES", "TAG", "SCSIOP");

        /*
         * SCSI opcode to string translation hash. This is from
         * /usrp/include/sys/scsi/generic/commands.h. If you would
         * rather all hex, comment this out.
         */
        scsiop[0x08] = "read";
        scsiop[0x0a] = "write";
        scsiop[0x0b] = "seek";
        scsiop[0x28] = "read(10)";
        scsiop[0x2a] = "write(10)";
        scsiop[0x2b] = "seek(10)";
}

srp:::login-*
{
        printf("%17d %3d  %-40s %-14s %17d  -\n", timestamp, cpu,  args[0]->ci_remote,
            probename, args[2]->li_task_tag);
}
srp:::task-command,
srp:::task-response,
srp:::scsi-response
{
        printf("%17d %3d  %-40s %-14s %6d %10d  -\n", timestamp, cpu,  args[0]->ci_remote,
            probename, 0, args[2]->ti_task_tag);
}

srp:::scsi-command
/scsiop[args[2]->ic_cdb[0]] != NULL/
{
        printf("%17d %3d  %-40s %-14s %6d %10d  %s\n", timestamp, cpu,  args[0]->ci_remote,
            probename, 0, args[3]->ti_task_tag, scsiop[args[2]->ic_cdb[0]]);
}

srp:::scsi-command
/scsiop[args[2]->ic_cdb[0]] == NULL/
{
        printf("%17d %3d  %-40s %-14s %6d %10d  0x%x\n", timestamp, cpu,  args[0]->ci_remote,
            probename, 0, args[3]->ti_task_tag, args[2]->ic_cdb[0]);
}

srp:::xfer-start,
srp:::xfer-done
{
        printf("%17d %3d  %-40s %-14s %6d %10d   %s\n", timestamp, cpu,  args[0]->ci_remote,
            probename,args[2]->xfer_len, args[3]->ti_task_tag,
            args[2]->xfer_type > 0 ? "READ" : "WRITE");
}

This output shows the snoop on dd commands executed by the initiator.

thump1## dtrace -s ./srpsnoop.d
       TIMESTAMP  CPU  REMOTE GID                               EVENT           BYTES        TAG  SCSIOP
   22644410404019   3  fe80000000000000:0003ba0001004d31        task-command        0         26  -
   22644410493068   3  fe80000000000000:0003ba0001004d31        scsi-command        0         26  read(10)
   22644410511422   3  fe80000000000000:0003ba0001004d31        task-command        0         30  -
   22644410541494   3  fe80000000000000:0003ba0001004d31        scsi-command        0         30  read(10)
   22644410621049   0  fe80000000000000:0003ba0001004d31        xfer-start       2048         26   READ
   22644410720486   1  fe80000000000000:0003ba0001004d31        xfer-start      49152         30   READ
   22644410681390   3  fe80000000000000:0003ba0001004d31        xfer-done        2048         26   READ
   22644410694719   3  fe80000000000000:0003ba0001004d31        scsi-response       0         26  -
   22644410703358   3  fe80000000000000:0003ba0001004d31        task-response       0         26  -
   22644410895424   3  fe80000000000000:0003ba0001004d31        xfer-done       49152         30   READ
   22644410901576   3  fe80000000000000:0003ba0001004d31        scsi-response       0         30  -
   22644410905717   3  fe80000000000000:0003ba0001004d31        task-response       0         30  -
   22727363721107   3  fe80000000000000:0003ba0001004d31        task-command        0         59  -
   22727363919179   0  fe80000000000000:0003ba0001004d31        xfer-start      10240         59   WRITE
   22727364095164   0  fe80000000000000:0003ba0001004d31        scsi-response       0         59  -
   22727364105406   0  fe80000000000000:0003ba0001004d31        task-response       0         59  -
   22727363812953   3  fe80000000000000:0003ba0001004d31        scsi-command        0         59  write(10)
   22727363986185   3  fe80000000000000:0003ba0001004d31        xfer-done       10240         59   WRITE

The fields are:

field description
CPU CPU event occured on
REMOTE GID GID of the client HCA port
EVENT srp event type
BYTES Data bytes
TAG Initiator task tag
SCSIOP SCSI opcode as a description, as hex, or '-'
Labels:
None
Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.

Sign up or Log in to add a comment or watch this page.


The individuals who post here are part of the extended Oracle community and they might not be employed or in any way formally affiliated with Oracle. The opinions expressed here are their own, are not necessarily reviewed in advance by anyone but the individual authors, and neither Oracle nor any other party necessarily agrees with them.