JavaScript is required to for searching.
Skip Navigation Links
Exit Print View
Solaris Dynamic Tracing Guide
search filter icon
search icon

Document Information

Preface

1.  Introduction

2.  Types, Operators, and Expressions

3.  Variables

4.  D Program Structure

5.  Pointers and Arrays

6.  Strings

7.  Structs and Unions

8.  Type and Constant Definitions

9.  Aggregations

10.  Actions and Subroutines

11.  Buffers and Buffering

12.  Output Formatting

13.  Speculative Tracing

14.  dtrace(1M) Utility

15.  Scripting

16.  Options and Tunables

17.  dtrace Provider

18.  lockstat Provider

19.  profile Provider

20.  fbt Provider

21.  syscall Provider

22.  sdt Provider

23.  sysinfo Provider

24.  vminfo Provider

25.  proc Provider

Probes

Arguments

lwpsinfo_t

psinfo_t

Examples

exec

start and exit

lwp-start and lwp-exit

signal-send

Stability

26.  sched Provider

27.  io Provider

28.  mib Provider

29.  fpuinfo Provider

30.  pid Provider

31.  plockstat Provider

32.  fasttrap Provider

33.  User Process Tracing

34.  Statically Defined Tracing for User Applications

35.  Security

36.  Anonymous Tracing

37.  Postmortem Tracing

38.  Performance Considerations

39.  Stability

40.  Translators

41.  Versioning

Glossary

Index

Arguments

The argument types for the proc probes are listed in Table 25-2. The arguments are described in Table 25-1.

Table 25-2 proc Probe Arguments

Probe
args[0]
args[1]
args[2]
create
psinfo_t *
exec
char *
exec-failure
int
exit
int
fault
int
siginfo_t *
lwp-create
lwpsinfo_t *
psinfo_t *
lwp-start
lwp-exit
signal-discard
lwpsinfo_t *
psinfo_t *
int
signal-discard
lwpsinfo_t *
psinfo_t *
int
signal-send
lwpsinfo_t *
psinfo_t *
int
signal-handle
int
siginfo_t *
void (*)(void)
signal-clear
int
start

lwpsinfo_t

Several proc probes have arguments of type lwpsinfo_t, a structure that is documented in proc(4). The definition of the lwpsinfo_t structure as available to DTrace consumers is as follows:

typedef struct lwpsinfo {
    int pr_flag;              /* flags; see below */
    id_t pr_lwpid;            /* LWP id */
    uintptr_t pr_addr;        /* internal address of thread */
    uintptr_t pr_wchan;       /* wait addr for sleeping thread */
    char pr_stype;            /* synchronization event type */
    char pr_state;            /* numeric thread state */
    char pr_sname;            /* printable character for pr_state */
    char pr_nice;             /* nice for cpu usage */
    short pr_syscall;         /* system call number (if in syscall) */
    int pr_pri;               /* priority, high value = high priority */
    char pr_clname[PRCLSZ];   /* scheduling class name */
    processorid_t pr_onpro;   /* processor which last ran this thread */
    processorid_t pr_bindpro; /* processor to which thread is bound */
    psetid_t pr_bindpset;     /* processor set to which thread is bound */
} lwpsinfo_t;

The pr_flag field is a bit-mask holding flags describing the process. These flags and their meanings are described in Table 25-3.

Table 25-3 pr_flag Values

PR_ISSYS
The process is a system process.
PR_VFORKP
The process is the parent of a vfork(2)'d child.
PR_FORK
The process has its inherit-on-fork mode set.
PR_RLC
The process has its run-on-last-close mode set.
PR_KLC
The process has its kill-on-last-close mode set.
PR_ASYNC
The process has its asynchronous-stop mode set.
PR_MSACCT
The process has microstate accounting enabled.
PR_MSFORK
The process microstate accounting is inherited on fork.
PR_BPTADJ
The process has its breakpoint adjustment mode set.
PR_PTRACE
The process has its ptrace(3C)-compatibility mode set.
PR_STOPPED
The thread is an LWP that is stopped.
PR_ISTOP
The thread is an LWP stopped on an event of interest.
PR_DSTOP
The thread is an LWP that has a stop directive in effect.
PR_STEP
The thread is an LWP that has a single-step directive in effect.
PR_ASLEEP
The thread is an LWP in an interruptible sleep within a system call.
PR_DETACH
The thread is a detached LWP. See pthread_create(3C) and pthread_join(3C).
PR_DAEMON
The thread is a daemon LWP. See pthread_create(3C).
PR_AGENT
The thread is the agent LWP for the process.
PR_IDLE
The thread is the idle thread for a CPU. Idle threads only run on a CPU when the run queues for the CPU are empty.

The pr_addr field is the address of a private, in-kernel data structure representing the thread. While the data structure is private, the pr_addr field may be used as a token unique to a thread for the thread's lifetime.

The pr_wchan field is set when the thread is sleeping on a synchronization object. The meaning of the pr_wchan field is private to the kernel implementation, but the field may be used as a token unique to the synchronization object.

The pr_stype field is set when the thread is sleeping on a synchronization object. The possible values for the pr_stype field are in Table 25-4.

Table 25-4 pr_stype Values

SOBJ_MUTEX
Kernel mutex synchronization object. Used to serialize access to shared data regions in the kernel. See Chapter 18, lockstat Provider and mutex_init(9F) for details on kernel mutex synchronization objects.
SOBJ_RWLOCK
Kernel readers/writer synchronization object. Used to synchronize access to shared objects in the kernel that can allow multiple concurrent readers or a single writer. See Chapter 18, lockstat Provider and rwlock(9F) for details on kernel readers/writer synchronization objects.
SOBJ_CV
Condition variable synchronization object. A condition variable is designed to wait indefinitely until some condition becomes true. Condition variables are typically used to synchronize for reasons other than access to a shared data region, and are the mechanism generally used when a process performs a program-directed indefinite wait. For example, blocking in poll(2), pause(2), wait(3C), and the like.
SOBJ_SEMA
Semaphore synchronization object. A general-purpose synchronization object that – like condition variable objects – does not track a notion of ownership. Because ownership is required to implement priority inheritance in the Solaris kernel, the lack of ownership inherent in semaphore objects inhibits their widespread use. See semaphore(9F) for details.
SOBJ_USER
A user-level synchronization object. All blocking on user-level synchronization objects is handled with SOBJ_USER synchronization objects. User-level synchronization objects include those created with mutex_init(3C), sema_init(3C), rwlock_init(3C), cond_init(3C) and their POSIX equivalents.
SOBJ_USER_PI
A user-level synchronization object that implements priority inheritance. Some user-level synchronization objects that track ownership additionally allow for priority inheritance. For example, mutex objects created with pthread_mutex_init(3C) may be made to inherit priority using pthread_mutexattr_setprotocol(3C).
SOBJ_SHUTTLE
A shuttle synchronization object. Shuttle objects are used to implement doors. See door_create(3DOOR) for more information.

The pr_state field is set to one of the values in Table 25-5. The pr_sname field is set to a corresponding character shown in parentheses in the same table.

Table 25-5 pr_state Values

SSLEEP (S)
The thread is sleeping. The sched:::sleep probe will fire immediately before a thread's state is transitioned to SSLEEP.
SRUN (R)
The thread is runnable, but is not currently running. The sched:::enqueue probe will fire immediately before a thread's state is transitioned to SRUN.
SZOMB (Z)
The thread is a zombie LWP.
SSTOP (T)
The thread is stopped, either due to an explicit proc(4) directive or some other stopping mechanism.
SIDL (I)
The thread is an intermediate state during process creation.
SONPROC (O)
The thread is running on a CPU. The sched:::on-cpu probe will fire in the context of the SONPROC thread a short time after the thread's state is transitioned to SONPROC.

psinfo_t

Several proc probes have an argument of type psinfo_t, a structure that is documented in proc(4). The definition of the psinfo_t structure as available to DTrace consumers is as follows:

typedef struct psinfo {
    int     pr_nlwp;            /* number of active lwps in the process */
    pid_t   pr_pid;             /* unique process id */
    pid_t   pr_ppid;            /* process id of parent */
    pid_t   pr_pgid;            /* pid of process group leader */
    pid_t   pr_sid;             /* session id */
    uid_t   pr_uid;             /* real user id */
    uid_t   pr_euid;            /* effective user id */
    gid_t   pr_gid;             /* real group id */
    gid_t   pr_egid;            /* effective group id */
    uintptr_t pr_addr;          /* address of process */
    dev_t   pr_ttydev;          /* controlling tty device (or PRNODEV) */
    timestruc_t pr_start;       /* process start time, from the epoch */
    char    pr_fname[PRFNSZ];   /* name of execed file */
    char    pr_psargs[PRARGSZ]; /* initial characters of arg list */
    int     pr_argc;            /* initial argument count */
    uintptr_t pr_argv;          /* address of initial argument vector */
    uintptr_t pr_envp;          /* address of initial environment vector */
    char    pr_dmodel;          /* data model of the process */
    taskid_t pr_taskid;         /* task id */
    projid_t pr_projid;         /* project id */
    poolid_t pr_poolid;         /* pool id */
    zoneid_t pr_zoneid;         /* zone id */
} psinfo_t;

The pr_dmodel field is set to either PR_MODEL_ILP32, denoting a 32–bit process, or PR_MODEL_LP64, denoting a 64–bit process.