+++ /dev/null
-
-<HTML><HEAD><TITLE>Manpage of LKET</TITLE>
-</HEAD><BODY>
-<H1>LKET</H1>
-Section: File Formats (5)<BR>Updated: 2007-03-06<BR><A HREF="#index">Index</A>
-<A HREF="../index.html">Return to Main Contents</A><HR>
-
-<A NAME="lbAB"> </A>
-<H2>NAME</H2>
-
-LKET - Linux Kernel Event Trace tool based on SystemTap
-<P>
-
-
-
-<P>
-<A NAME="lbAC"> </A>
-<H2>DESCRIPTION</H2>
-
-<P>
-The Linux Kernel Event Trace (LKET) tool is an extension to the tapsets
-library available on SystemTap. Its goal is to utilize the dynamic probing
-capabilities provided through SystemTap to create a set of standard hooks
-that probe pre-defined places in the kernel. It can be used to collect
-important information that can be used as a starting point to analyze
-a performance problem in the system.
-<P>
-The LKET tapsets are designed to only trace the events selected by the
-user. Once the data has been collected, it is then post-processed
-according to the need of the user. Trace data can be processed in
-various different ways to generate simple to complex reports.
-<P>
-<A NAME="lbAD"> </A>
-<H2>BINARY TRACING</H2>
-
-<P>
-By default, LKET will log the trace data in binary format.
-<P>
-To get a better performance for binary tracing, the "-b" option should
-be turned on for stap and thus -M option has to be added to stop staprun
-merging per-cpu files.
-<P>
-You could use the command
-<I>lket-b2a</I>
-
-to convert the binary trace data
-generated by LKET into readable data in ascii format.
-<P>
-<I>lket-b2a</I>
-
-uses the pre-cpu binary trace data files(stpd_cpu*) as inputs, and generates
-an output file named
-<I>lket.out</I>.
-
-or dump the trace data into MySQL database.
-See
-<I><A HREF="lket-b2a.1.html">lket-b2a</A></I>(1)
-
-manual page for more detail.
-<P>
-If you want LKET to log trace data in ASCII format directly, you should:
-
-<BR>
-
-<DL COMPACT><DT><DD>
-<PRE>
-stap -D ASCII_TRACE ...
-
-</PRE>
-
-</DL>
-
-
-<P>
-<B>*Notes*</B>
-
-that in order to make
-<I>LKET </I>
-
-able to work in binary tracing mode, all strings logged by
-<I>LKET </I>
-
-should be NULL-terminated, which means you have
-to use "%0s" instead of "%s" for both user appended extra printing statements
-and _lket_trace() which is called in
-<I>LKET </I>
-
-tapsets.
-<P>
-<A NAME="lbAE"> </A>
-<H2>EVENT REGISTER</H2>
-
-<P>
-LKET provides a way to log the metadata of the trace data by events registering.
-<P>
-Two functions is provided:
-
-<DL COMPACT>
-<DT><DD>
-<FONT SIZE="-1"><B>void _register_sys_event (char *event_desc, int grpid, int hookid, char *fmt, char *field_name)</B></FONT>
-<DT><DD>
-<FONT SIZE="-1"><B>register_user_event(grpid:long, hookid:long, fmt:string, names:string)</B></FONT>
-
-<P>
-<I>event_desc</I>
-
-is a string representation of the event, e.g: syscall.entry, scsi.iocompleted.
-<P>
-<I>grpid</I>
-
-and
-<I>hookid</I>
-
-is the groupid and hookid of the event to be registered.
-<P>
-<I>fmt</I>
-
-contains a set of fomat tokens seperated by ":".
-The valid format tokens are:
-<B>UINT8,</B>
-
-<B>UINT16,</B>
-
-<B>UINT32,</B>
-
-<B>UINT64</B>
-
-and
-<B>STRING</B>
-
-which represents 8-bit, 16-bit, 32-bit, 64-bit binary data and NULL-terminated
-respectively.
-<P>
-<I>names</I>
-
-contains a set of names seperated by ":".
-The names contains in
-<I>names</I>
-
-should match the format tokens contains in
-<I>fmt</I>
-
-<P>
-<B>_register_sys_event is a c function which is used to register the newly </B>
-
-added trace hooks in LKET tapsets. For example, supposing you
-want to add a new event hook to trace the entry of sys_open, and you want
-this event hook to log the fd, flag and mode paremeters for you. You should
-add:
-<P>
-
-<BR>
-
-<DL COMPACT><DT><DD>
-<PRE>
-_register_sys_event("iosyscall.open.entry",
- _GROUP_IOSYSCALL,
- _HOOKID_IOSYSCALL_OPEN_ENTRY,
- "STRING:INT32:INT32",
- "filename:flags:mode");
-
-</PRE>
-
-</DL>
-
-
-<P>
-into the function
-<B>register_sys_events</B>
-
-in LKET/register_event.stp
-<P>
-<B>register_user_event</B>
-
-is a SystemTap script function which is used for user to add extra trace data
-for a event hook. See the section
-<B>CUSTOMIZED TRACE DATA</B>
-
-for more detail
-<P>
-</DL>
-<A NAME="lbAF"> </A>
-<H2>CUSTOMIZED TRACE DATA</H2>
-
-<P>
-LKET provides a set of event hooks that log the predefined
-trace data for you, but LKET also make you able to log extra
-trace data for a event.
-<P>
-LKET provides a way to do this without modifying the tapset
-of that event hook. You can simply use printf to trace
-extra data. For example, supposing you want to trace sk_buff->mac_len
-and sk_buff->priority besides the sk_buff->len, sk_buff->protocol and
-sk_buff->truesize for the
-<B>netdev </B>
-
-event hooks:
-<P>
-
-<BR>
-
-<DL COMPACT><DT><DD>
-<PRE>
-probe register_event
-{
- register_user_event(GROUP_NETDEV, HOOKID_NETDEV_TRANSMIT,
- "INT32:INT32", "mac_len:priority")
-}
-probe addevent.netdev.transmit
-{
- printf("%4b%4b", $skb->mac_len, $skb->priority)
-}
-
-</PRE>
-
-</DL>
-
-
-<P>
-<A NAME="lbAG"> </A>
-<H2>EXAMPLES</H2>
-
-<P>
-Here are some examples of using LKET:
-<P>
-<DL COMPACT>
-<DT>Trace all events provided by LKET:<DD>
-stap -e "probe addevent.* {}" -bM
-<P>
-<DT>Trace all available events by skipping those unavaiabled on current system:<DD>
-stap -e "probe addevent.* ? {}" -bM
-<P>
-<DT>Trace all system calls:<DD>
-stap -e "probe addevent.syscall {}" -bM
-<DT>Trace the entry of all system calls:<DD>
-stap -e "probe addevent.syscall.entry {}" -bM
-<DT>Trace netdev transmition and log extra data of mac_len and priority:<DD>
-stap -e "probe addevent.netdev.transmit { printf(\"%4b%4b\", $skb->mac_len, $skb->priority) }" -bM
-<P>
-
-You can press "Ctrl+c" to stop the tracing. Then you will find there are one or more per-cpu data files (stpd_cpu*) on current directory. You can use
-<I>lket-b2a</I>
-
-to convert these binary trace data files into readable ascii format or dump them into database. See
-<I><A HREF="lket-b2a.1.html">lket-b2a</A></I>(1)
-
-man page for more detail.
-<P>
-</DL>
-<A NAME="lbAH"> </A>
-<H2>EVENT HOOKS AND TRACE DATA FORMAT</H2>
-
-<P>
-The following sections enumerate the variety of event hooks implemented
-in LKET and their trace data format. The trace data generated by different
-event hooks contain common data
-as well as some data specific to that event hook.
-<P>
-the INT8, INT16, INT32, INT64 and STRING appeared in trace data format
-represents 8-bit, 16-bit, 32-bit, 64-bit binary data and NULL-terminated
-string respectively.
-<P>
-The data common(i.e.
-<I>common_data</I>
-
-in the following subsecions) to all event hooks is:
-<DL COMPACT><DT><DD>
-<P>
-<B>timestamp(INT64),(tid<<32|pid)(INT64),(ppid<<32|groupID<<24|hookID<<16|cpu_id<<8)(INT64)</B>
-
-</DL>
-
-<P>
-Each event hook group is a collection of those hooks that have
-similarities of what they could trace. And the ID of each event hook (HookID)
-is defined in the context of its corresponding group.
-<P>
-<A NAME="lbAI"> </A>
-<H3>EVENT REGISTER </H3>
-
-Event register is not actually an event. It is used to log the
-metadata of the trace data, including the extra trace data appended by user.
-See
-<B>EVENT REGISTER</B>
-
-and
-<B>CUSTOMIZED TRACE DATA</B>
-
-for more details.
-<P>
-
-<DL COMPACT>
-<DT><B>register_sys_event</B>
-
-<DD>
-This is a function used to register event hooks available in LKET.
-It should be called from register_event.stp:register_sys_events().
-<P>
-<DT><B>register_user_event</B>
-
-<DD>
-This is a function used to log the metadata of the extra
-trace data appended by user for a specific event.
-It should be called in the probe
-<I>register_event</I>
-
-<P>
-</DL>
-<A NAME="lbAJ"> </A>
-<H3>SYSTEM CALLS </H3>
-
-You could use
-<I>addevent.syscall</I>
-
-to trace the entry and return of all system calls.
-It contains two sub event hooks:
-
-<DL COMPACT>
-<DT><B>addevent.syscall.entry </B>
-
-<DD>
-Trace entry of all system calls.
-<P>
-Data format is:
-<P>
-<I>common_data, syscall_name(STRING)</I>
-
-<DT><B>addevent.syscall.return </B>
-
-<DD>
-Trace return of all system calls.
-<P>
-Data format is:
-<P>
-<I>common_data, syscall_name(STRING)</I>
-
-<P>
-</DL>
-<A NAME="lbAK"> </A>
-<H3>PROCESS CREATION </H3>
-
-This group contains three sub event hooks. All of them are turned on
-by default. You can use the flags stoptrace_fork and stoptrace_exec to stop
-tracing fork/execve in your script, e.g.:
-<P>
-
-<BR>
-
-<DL COMPACT><DT><DD>
-<PRE>
-probe begin
-{
- stoptrace_fork = 1
- stoptrace_exec = 1
-}
-
-</PRE>
-
-</DL>
-
-
-<P>
-
-<DL COMPACT>
-<DT><B>process_snapshot()</B>
-
-<DD>
-This event hook isn't a probe definition but a function. It is called
-by LKET silently to take a snapshot of all running processes.
-<P>
-Data format is:
-<P>
-<I>common_data, tid(INT32), pid(INT32), ppid(INT32), process_name(STRING)</I>
-
-<P>
-
-<DT><B>lket_internal.process.fork </B>
-
-<DD>
-Trace fork of processes
-<P>
-Data format is:
-<P>
-<I>common_data, new_tid(INT32), new_pid(INT32), ppid(INT32)</I>
-
-<DT><B>lket_internal.process.execve </B>
-
-<DD>
-Trace execve of new processes
-<P>
-Data format is:
-<P>
-<I>common_data, tid(INT32), pid(INT32), ppid(INT32), new_process_name(STRING)</I>
-
-<P>
-</DL>
-<A NAME="lbAL"> </A>
-<H3>SIGNAL</H3>
-
-You could use
-<I>addevent.signal</I>
-
-to trace signal activities. It contains the following events:
-
-<DL COMPACT>
-<DT><B>addevent.signal.send.entry</B>
-
-<DD>
-Trace when a signal is sent to a process
-<P>
-Data format is:
-<I>common_data, sig(INT8), shared(INT8), send2queue(INT8), pid(INT32)</I>
-
-<DT><B>addevent.signal.send.return</B>
-
-<DD>
-Trace when returning from sending signal
-<P>
-Data format is:
-<I>common_data, return(INT8)</I>
-
-<DT><B>addevent.signal.syskill.entry</B>
-
-<DD>
-Trace when sys_kill is called to send a signal to a process.
-<P>
-Data format is:
-<I>common_data, pid(INT32), sig(INT8)</I>
-
-<DT><B>addevent.signal.syskill.return</B>
-
-<DD>
-Trace when return from sys_kill
-<P>
-Data format is:
-<I>common_data, return(INT8)</I>
-
-<DT><B>addevent.signal.systgkill.entry</B>
-
-<DD>
-Trace when sys_tgkill is called to send a signal to one specific thread
-<P>
-Data format is:
-<I>common_data, tid(INT32), pid(INT32), sig(INT8)</I>
-
-<DT><B>addevent.signal.systgkill.return</B>
-
-<DD>
-Trace when returning from sys_tgkill
-<P>
-Data format is:
-<I>common_data, return(INT8)</I>
-
-<DT><B>addevent.signal.systkill.entry</B>
-
-<DD>
-Trace when sys_tkill is called to send a signal to a single process.
-<P>
-Data format is:
-<I>common_data, pid(INT32), sig(INT8)</I>
-
-<DT><B>addevent.signal.systkill.return</B>
-
-<DD>
-Trace when returning from sys_tkill.
-<P>
-Data format is:
-<I>common_data, return(INT8)</I>
-
-<DT><B>addevent.signal.pending.entry</B>
-
-<DD>
-Trace when examine the set of signals that are pending for delivery.
-<P>
-Data format is:
-<I>common_data, sigset_addr(INT32), setsize(INT32)</I>
-
-<DT><B>addevent.signal.pending.return</B>
-
-<DD>
-Trace when returning from signal.pending
-<P>
-Data format is:
-<I>common_data, return(INT8)</I>
-
-<DT><B>addevent.signal.do_action.entry</B>
-
-<DD>
-Trace when a thread is about to examine and change a signal action
-<P>
-Data format is:
-<I>common_data, sig(INT8), handler(INT64)</I>
-
-<DT><B>addevent.signal.do_action.return</B>
-
-<DD>
-Trace when returning from signal.do_action
-<P>
-Data format is:
-<I>common_data, return(INT8)</I>
-
-<DT><B>addevent.signal.procmask.entry</B>
-
-<DD>
-Trace when a thread is about to examine and change blocked signals
-<P>
-Data format is:
-<I>common_data, how(INT8), sigset(INT64)</I>
-
-<DT><B>addevent.signal.procmask.return</B>
-
-<DD>
-Trace when returning from signal.procmask
-<P>
-Data format is
-<I>common_data, return(INT8)</I>
-
-<DT><B>addevent.signal.flush.entry</B>
-
-<DD>
-Trace when flush all pending signals for a task
-<P>
-Data format is:
-<I>common_data, pid(INT32)</I>
-
-<P>
-</DL>
-<A NAME="lbAM"> </A>
-<H3>IO SCHEDULER ACTIVITIES </H3>
-
-You could use
-<I>addevent.ioscheduler</I>
-
-to trace the IO scheduler activities. It contains three sub event hooks:
-
-<DL COMPACT>
-<DT><B>addevent.ioscheduler.elv_add_request </B>
-
-<DD>
-Trace when a request is added to the request queue
-<P>
-Data format is:
-<P>
-<I>common_data, elevator_name(STRING), disk_major(INT8), disk_minor(INT8), </I>
-
-<I>request_addr(INT64), request_flags(INT64)</I>
-
-<DT><B>addevent.ioscheduler.elv_next_request.entry </B>
-
-<DD>
-Trace when try to retrieve a request from request queue
-<P>
-Data format is:
-<P>
-<I>common_data, elevator_name(STRING)</I>
-
-<P>
-<DT><B>addevent.ioscheduler.elv_next_request.return</B>
-
-<DD>
-Trace when return from retrieving a request from request queue
-<P>
-Data format is:
-<P>
-<I>common_data, disk_major(INT8), disk_minor(INT8), </I>
-
-<I>request_addr(INT64), request_flags(INT64)</I>
-
-<P>
-<DT><B>addevent.ioscheduler.elv_completed_request </B>
-
-<DD>
-Trace when a request is completed
-<P>
-Data format is:
-<P>
-<I>common_data, elevator_name(STRING), disk_major(INT8), disk_minor(INT8), </I>
-
-<I>request_addr(INT64), request_flags(INT64)</I>
-
-<P>
-</DL>
-<A NAME="lbAN"> </A>
-<H3>TASK SCHEDULE ACTIVITIES </H3>
-
-You could use
-<I>addevent.tskdispatch</I>
-
-to trace the task scheduler activities. It contains two sub event hooks:
-
-<DL COMPACT>
-<DT><B>addevent.tskdispatch.ctxswitch </B>
-
-<DD>
-Trace the process context switch
-<P>
-Data format is:
-<P>
-<I>common_data, prev_pid(INT32), next_pid(INT32), prev_state(INT8)</I>
-
-<DT><B>addevent.tskdispatch.cpuidle </B>
-
-<DD>
-Trace when cpu goes idle
-<P>
-Data format is:
-<P>
-<I>common_data, current_pid(INT32)</I>
-
-<P>
-</DL>
-<A NAME="lbAO"> </A>
-<H3>SCSI ACTIVITIES </H3>
-
-You could use
-<I>addevent.scsi</I>
-
-to trace the scsi layer activities. It contains four sub event hooks:
-
-<DL COMPACT>
-<DT><B>addevent.scsi.ioentry </B>
-
-<DD>
-mid-layer prepares a IO request
-<P>
-Data format is:
-<P>
-<I>common_data, disk_major(INT8), disk_minor(INT8), device_state(INT8), request_addr(INT64)</I>
-
-<DT><B>addevent.scsi.iodispatching </B>
-
-<DD>
-Dispatch a command to the low-level driver
-<P>
-Data format is:
-<P>
-<I>common_data, host(INT8), channel(INT8), lun(INT8), dev_id(INT8), </I>
-
-<I>device_state(INT8), data_direction(INT8), reqbuf_addr(INT64),</I>
-
-<I>reqbuf_len(INT32), request_addr(INT64)</I>
-
-<P>
-<DT><B>addevent.scsi.iodone </B>
-
-<DD>
-I/O is done by low-level driver
-<P>
-Data format is:
-<P>
-<I>common_data, host(INT8), channel(INT8), lun(INT8), dev_id(INT8), </I>
-
-<I>device_state(INT8), data_direction(INT8), request_addr(INT64)</I>
-
-<P>
-<DT><B>addevent.scsi.iocompleted </B>
-
-<DD>
-mid-layer processed the completed IO
-<P>
-Data format is:
-<P>
-<I>common_data, host(INT8), channel(INT8), lun(INT8), dev_id(INT8), </I>
-
-<I>device_state(INT8), data_direction(INT8), request_addr(INT64),</I>
-
-<I>bytes_done(INT32)</I>
-
-<P>
-</DL>
-<A NAME="lbAP"> </A>
-<H3>PAGE FAULT </H3>
-
-You could use
-<I>addevent.pagefault</I>
-
-to trace page fault events. It contains only one sub event hooks:
-
-<DL COMPACT>
-<DT><B>addevent.pagefault </B>
-
-<DD>
-<P>
-Data format is:
-<P>
-<I>common_data, memory_address(INT64), write_access(INT8)</I>
-
-<P>
-</DL>
-<A NAME="lbAQ"> </A>
-<H3>NETWORK DEVICE ACTIVITIES </H3>
-
-You could use
-<I>addevent.netdev</I>
-
-to trace the network device activities. It contains two sub event hooks:
-
-<DL COMPACT>
-<DT><B>addevent.netdev.receive </B>
-
-<DD>
-network device receives a packet
-<P>
-Data format is:
-<P>
-<I>common_data, netdev_name(STRING), data_length(INT32), protocol(INT16), </I>
-
-<I>buffer_length(INT32)</I>
-
-<P>
-<DT><B>addevent.netdev.transmit</B>
-
-<DD>
-A packet will be sent out by network device
-<P>
-Data format is:
-<P>
-<I>common_data, netdev_name(STRING), data_length(INT32), protocol(INT16), </I>
-
-<I>buffer_length(INT32)</I>
-
-<P>
-<P>
-</DL>
-<A NAME="lbAR"> </A>
-<H3>IO SYSCALLS </H3>
-
-You could use
-<I>addevent.iosyscall</I>
-
-to trace the detail activities of io related system calls.
-It contains 16 entry hooks and 16 corresponding
-return hooks.
-<P>
-All the return hooks will only log the common_data and
-the return value. So in the following subsections, only the entry
-hooks will be listed:
-<P>
-
-<DL COMPACT>
-<DT><B>addevent.iosyscall.open.entry </B>
-
-<DD>
-the entry of sys_open
-<P>
-Data format is:
-<P>
-<I>common_data, filename(STRING), flags(INT32), mode(INT32)</I>
-
-<P>
-<DT><B>addevent.iosyscall.close.entry </B>
-
-<DD>
-the entry of sys_close
-<P>
-Data format is:
-<P>
-<I>common_data, fd(INT64)</I>
-
-<P>
-<DT><B>addevent.iosyscall.read.entry </B>
-
-<DD>
-the entry of sys_read
-<P>
-Data format is:
-<P>
-<I>common_data, fd(INT64), buf_addr(INT64), count(INT64)</I>
-
-<P>
-<DT><B>addevent.iosyscall.write.entry </B>
-
-<DD>
-the entry of sys_write
-<P>
-Data format is:
-<P>
-<I>common_data, fd(INT64), buf_addr(INT64), count(INT64)</I>
-
-<P>
-<DT><B>addevent.iosyscall.readv.entry </B>
-
-<DD>
-the entry of sys_readv
-<P>
-Data format is:
-<P>
-<I>common_data, fd(INT64), vector_addr(INT64), count(INT64)</I>
-
-<P>
-<DT><B>addevent.iosyscall.writev.entry </B>
-
-<DD>
-the entry of sys_writev
-<P>
-Data format is:
-<P>
-<I>common_data, fd(INT64), vector_addr(INT64), count(INT64)</I>
-
-<P>
-<DT><B>addevent.iosyscall.pread64.entry </B>
-
-<DD>
-the entry of sys_pread64
-<P>
-Data format is:
-<P>
-<I>common_data, fd(INT64), buff_addr(INT64), count(INT64), offset(INT64)</I>
-
-<P>
-<DT><B>addevent.iosyscall.pwrite64.entry </B>
-
-<DD>
-the entry of sys_pwrite64
-<P>
-Data format is:
-<P>
-<I>common_data, fd(INT64), buff_addr(INT64), count(INT64), offset(INT64)</I>
-
-<P>
-<DT><B>addevent.iosyscall.readahead.entry </B>
-
-<DD>
-the entry of sys_readahead
-<P>
-Data format is:
-<P>
-<I>common_data, fd(INT64), offset(INT64), count(INT64)</I>
-
-<P>
-<DT><B>addevent.iosyscall.senfile.entry </B>
-
-<DD>
-the entry of sys_sendfile and sys_sendfile64
-<P>
-Data format is:
-<P>
-<I>common_data, out_fd(INT64), in_fd(INT64), offset_uaddr(INT64), count(INT64)</I>
-
-<P>
-<DT><B>addevent.iosyscall.lseek.entry </B>
-
-<DD>
-the entry of sys_lseek
-<P>
-Data format is:
-<P>
-<I>common_data, fd(INT64), offset(INT64), whence(INT8)</I>
-
-<P>
-<DT><B>addevent.iosyscall.llseek.entry </B>
-
-<DD>
-the entry of sys_llseek
-<P>
-Data format is:
-<P>
-<I>common_data, fd(INT64), offset_high(INT64), offset_low(INT64), </I>
-
-<I>result_addr(INT64), whence(INT8)</I>
-
-<P>
-<DT><B>addevent.iosyscall.sync.entry </B>
-
-<DD>
-the entry of sys_sync
-<P>
-Data format is:
-<P>
-<I>common_data</I>
-
-<P>
-<DT><B>addevent.iosyscall.fsync.entry </B>
-
-<DD>
-the entry of sys_fsync
-<P>
-Data format is:
-<P>
-<I>common_data, fd(INT64)</I>
-
-<P>
-<DT><B>addevent.iosyscall.fdatasync.entry </B>
-
-<DD>
-the entry of sys_fdatasync
-<P>
-Data format is:
-<P>
-<I>common_data, fd(INT64)</I>
-
-<P>
-<DT><B>addevent.iosyscall.flock.entry </B>
-
-<DD>
-the entry of sys_flock
-<P>
-Data format is:
-<P>
-<I>common_data, fd(INT64), operation(INT32)</I>
-
-<P>
-</DL>
-<A NAME="lbAS"> </A>
-<H3>Asynchronous IO </H3>
-
-You could use
-<I>addevent.aio</I>
-
-to trace the detail activities of AIO related calls(most of them
-are AIO system calls).
-It contains 6 entry hooks and 6 corresponding return hooks.
-<P>
-All the return hooks will only log the common_data and
-the return value. So in the following subsections, only the entry
-hooks will be listed:
-<P>
-
-<DL COMPACT>
-<DT><B>addevent.aio.io_setup.entry </B>
-
-<DD>
-Fired by calling io_setup from user space. The corresponding
-system call is sys_io_setup, which will create an aio_context
-capable of receiving at least maxevents.
-<P>
-Data format is:
-<P>
-<I>common_data, nr_events(INT32), ctxp_uaddr(INT64)</I>
-
-<P>
-<DT><B>addevent.aio.io_submit.entry </B>
-
-<DD>
-Fired by calling io_submit from user space. The corresponding
-system call is sys_io_submit which will queue the nr iocbs
-pointed to by iocbpp_uaddr for processing.
-<P>
-Data format is:
-<P>
-<I>common_data, ctx_id(INT64), nr(INT32), iocbpp_uaddr(INT64)</I>
-
-<P>
-<DT><B>addevent.aio.io_submit_one.entry </B>
-
-<DD>
-Called by sys_io_submit. It will iterate iocbpp and process them
-one by one
-<P>
-Data format is:
-<P>
-<I>common_data, ctx(INT64), user_iocb_uaddr(INT64), aio_lio_opcode(INT16), </I>
-
-<I>aio_reqprio(INT16), aio_fildes(INT32), aio_buf(INT64), aio_nbytes(INT64),</I>
-
-<I>aio_offset(INT64)</I>
-
-<P>
-<DT><B>addevent.aio.io_getevents.entry </B>
-
-<DD>
-Fired by calling io_getevents from user space. The corresponding
-system call is sys_io_getevents, which will attempt to
-read at least min_nr events and up to nr events from the completion
-queue for the aio_context specified by ctx_id.
-<P>
-Data format is:
-<P>
-<I>common_data, ctx_id(INT64), min_nr(INT32), nr(INT32), events_uaddr(INT64),</I>
-
-<I>tv_sec(INT32), tv_nsec(INT32)</I>
-
-<P>
-<DT><B>addevent.aio.io_destroy.entry </B>
-
-<DD>
-Fired by calling io_destroy from user space. The corresponding
-system call is sys_io_destroy, which will destroy
-the aio_context specified.
-<P>
-Data format is:
-<P>
-<I>common_data, ctx(INT64)</I>
-
-<P>
-<DT><B>addevent.aio.io_cancel.entry </B>
-
-<DD>
-Fired by calling io_cancel from user space. The corresponding
-system call is sys_io_cancel, which will attempt to cancel an
-iocb previously passed to io_submit.
-<P>
-Data format is:
-<P>
-<I>common_data, ctx_id(INT64), iocb_uaddr(INT64), result_uaddr(INT64)</I>
-
-<P>
-</DL>
-<A NAME="lbAT"> </A>
-<H3>SUNRPC</H3>
-
-You could use
-<I>addevent.sunrpc</I>
-
-to trace the details of SUNRPC activities. It is now divided into three
-groups: high-level client operation event hooks (addevent.sunrpc.clnt),
-high-level server operation event hooks (addevent.sunrpc.svc) and RPC
-scheduler operation event hooks (addevent.sunrpc.sched).
-It contains 19 entry hooks and 19 corresponding return hooks.
-<P>
-All the return hooks will only log the common_data and the return value.
-So in the following subsections, only the entry hooks will be listed:
-<P>
-
-<DL COMPACT>
-<DT><B>addevent.sunrpc.clnt.create_client.entry </B>
-
-<DD>
-Fires when an RPC client is to be created
-<P>
-Data format is:
-<P>
-<I>common_data, servername(STRING), prog(INT64), vers(INT8),</I>
-
-<I>prot(INT16), port(INT16), authflavor(INT8)</I>
-
-<P>
-<DT><B>addevent.sunrpc.clnt.clone_client.entry </B>
-
-<DD>
-Fires when the RPC client structure is to be cloned
-<P>
-Data format is:
-<P>
-<I>common_data, servername(STRING), prog(INT64), vers(INT8),</I>
-
-<I>prot(INT16), port(INT16), authflavor(INT8)</I>
-
-<P>
-<DT><B>addevent.sunrpc.clnt.shutdown_client.entry </B>
-
-<DD>
-Fires when an RPC client is to be shut down
-<P>
-Data format is:
-<P>
-<I>common_data, servername(STRING), prog(INT64), clones(INT16),</I>
-
-<I>tasks(INT16), rpccnt(INT32)</I>
-
-<P>
-<DT><B>addevent.sunrpc.clnt.bind_new_program.entry </B>
-
-<DD>
-Fires when a new RPC program is to be bound an existing client
-<P>
-Data format is:
-<P>
-<I>common_data, servername(STRING), old_prog(INT64), old_vers(INT8),</I>
-
-<I>prog(INT64), vers(INT8)</I>
-
-<P>
-<DT><B>addevent.sunrpc.clnt.call_sync.entry </B>
-
-<DD>
-Fires when an RPC procedure is to be called synchronously
-<P>
-Data format is:
-<P>
-<I>common_data, servername(STRING), prog(INT64), vers(INT8),</I>
-
-<I>proc(INT64), flags(INT64) </I>
-
-<P>
-<DT><B>addevent.sunrpc.clnt.call_async.entry </B>
-
-<DD>
-Fires when an RPC procedure is to be called asynchronously
-<P>
-Data format is:
-<P>
-<I>common_data, servername(STRING), prog(INT64), vers(INT8),</I>
-
-<I>proc(INT64), flags(INT64) </I>
-
-<P>
-<DT><B>addevent.sunrpc.clnt.restart_call.entry </B>
-
-<DD>
-Fires when want to restart a task
-<P>
-Data format is:
-<P>
-<I>common_data, tk_pid(INT64), tk_flags(INT64)</I>
-
-<P>
-<DT><B>addevent.sunrpc.svc.register.entry </B>
-
-<DD>
-Fires when an RPC service is to be registered with the local
-portmapper
-<P>
-Data format is:
-<P>
-<I>common_data, sv_name(STRING), prog(INT64), prot(INT16),</I>
-
-<I>port(INT32)</I>
-
-<P>
-<DT><B>addevent.sunrpc.svc.create.entry </B>
-
-<DD>
-Fires when an RPC service is to be created
-<P>
-Data format is:
-<P>
-<I>common_data, prog(INT64), pg_nvers(INT8), bufsize(INT32)</I>
-
-<P>
-<DT><B>addevent.sunrpc.svc.destroy.entry </B>
-
-<DD>
-Fires when an RPC service is to be destroyed
-<P>
-Data format is:
-<P>
-<I>common_data, sv_name(STRING), sv_prog(INT64), sv_nrthreads(INT32)</I>
-
-<P>
-<DT><B>addevent.sunrpc.svc.process.entry </B>
-
-<DD>
-Fires when an RPC request is to be processed
-<P>
-Data format is:
-<P>
-<I>common_data, sv_name(STRING), sv_prog(INT64), peer_ip(INT64),</I>
-
-<I>rq_xid(INT64), rq_prog(INT64), rq_vers(INT8), rq_proc(INT8)</I>
-
-<P>
-<DT><B>addevent.sunrpc.svc.authorise.entry </B>
-
-<DD>
-Fires when an RPC request is to be authorised
-<P>
-Data format is:
-<P>
-<I>common_data, sv_name(STRING), peer_ip(INT64), rq_xid(INT64),</I>
-
-<I>rq_prog(INT64), rq_vers(INT8), rq_proc(INT64)</I>
-
-<P>
-<DT><B>addevent.sunrpc.svc.recv.entry </B>
-
-<DD>
-Fires when receiving the next request on any socket
-<P>
-Data format is:
-<P>
-<I>common_data, sv_name(STRING), timeout(INT64)</I>
-
-<P>
-<DT><B>addevent.sunrpc.svc.send.entry </B>
-
-<DD>
-Fires when want to return reply to the client
-<P>
-Data format is:
-<P>
-<I>sv_name(STRING), peer_ip(INT64), rq_xid(INT64), rq_prog(INT64), </I>
-
-<I>rq_vers(INT8), rq_proc(INT64)</I>
-
-<P>
-<DT><B>addevent.sunrpc.svc.drop.entry </B>
-
-<DD>
-Fires when a request is to be dropped
-<P>
-Data format is:
-<P>
-<I>common_data, sv_name(STRING), peer_ip(INT64), rq_xid(INT64),</I>
-
-<I>rq_prog(INT64), rq_vers(INT8), rq_proc(INT64)</I>
-
-<P>
-<DT><B>addevent.sunrpc.sched.new_task.entry </B>
-
-<DD>
-Fires when creating a new task for the specified client
-<P>
-Data format is:
-<P>
-<I>common_data, xid(INT64), prog(INT64), vers(INT8), prot(INT64),</I>
-
-<I>flags(INT64)</I>
-
-<P>
-<DT><B>addevent.sunrpc.sched.release_task.entry </B>
-
-<DD>
-Fires when releasing a task
-<P>
-Data format is:
-<P>
-<I>common_data, xid(INT64), prog(INT64), vers(INT8), prot(INT64),</I>
-
-<I>flags(INT64)</I>
-
-<P>
-<DT><B>addevent.sunrpc.sched.execute.entry </B>
-
-<DD>
-Fires when an RPC request is to be executed
-<P>
-Data format is:
-<P>
-<I>common_data, xid(INT64), prog(INT64), vers(INT8), prot(INT64),</I>
-
-<I>tk_pid(INT64), tk_flags(INT64)</I>
-
-<P>
-<DT><B>addevent.sunrpc.sched.delay.entry </B>
-
-<DD>
-Fires when want to delay an RPC request
-<P>
-Data format is:
-<P>
-<I>common_data, xid(INT64), prog(INT64), tk_pid(INT64),</I>
-
-<I>tk_flags(INT64), delay(INT64)</I>
-
-<P>
-</DL>
-<A NAME="lbAU"> </A>
-<H3>NFS </H3>
-
-You could use
-<I>addevent.nfs</I>
-
-to trace the detail activities of nfs on client side.
-It divided into three groups: nfs file operation event hooks(addevent.nfs.fop),
-nfs address space operation event hooks(addevent.nfs.aop), nfs proc event hooks(addevent.nfs.proc).
-It contains 36 entry hooks and 33 corresponding return hooks
-<P>
-All the return hooks will only log the common_data and
-the return value. So in the following subsections, only the entry
-hooks will be listed:
-<P>
-
-<DL COMPACT>
-<DT><B>addevent.nfs.fop.llseek.entry </B>
-
-<DD>
-the entry of nfs_file_llseek
-<P>
-Data format is:
-<P>
-<I>common_data, major_device(INT8), minor_devide(INT8), fileid(INT32), </I>
-
-<I>offset(INT32), origin(INR8)</I>
-
-<P>
-<DT><B>addevent.nfs.fop.read.entry </B>
-
-<DD>
-the entry of do_sync_read
-<P>
-Data format is:
-<P>
-<I>common_data, major_device(INT8), minor_devide(INT8), fileid(INT32), </I>
-
-<I>buf_addr(INT64), count(INT64) , offset(INT64)</I>
-
-<P>
-<DT><B>addevent.nfs.fop.write.entry </B>
-
-<DD>
-the entry of do_sync_write
-<P>
-Data format is:
-<P>
-<I>common_data, major_device(INT8), minor_devide(INT8), fileid(INT32), </I>
-
-<I>buf_addr(INT64), count(INT64) , offset(INT64)</I>
-
-<P>
-<DT><B>addevent.nfs.fop.aio_read.entry </B>
-
-<DD>
-the entry of nfs_file_read
-<P>
-Data format is:
-<P>
-<I>common_data, major_device(INT8), minor_devide(INT8), fileid(INT32), </I>
-
-<I>buf_addr(INT64), count(INT64) , offset(INT64)</I>
-
-<P>
-<DT><B>addevent.nfs.fop.aio_write.entry </B>
-
-<DD>
-the entry of nfs_file_read
-<P>
-Data format is:
-<P>
-<I>common_data, major_device(INT8), minor_devide(INT8), fileid(INT32), </I>
-
-<I>buf_addr(INT64), count(INT64) , offset(INT64)</I>
-
-<P>
-<DT><B>addevent.nfs.fop.mmap.entry </B>
-
-<DD>
-the entry of nfs_file_mmap
-<P>
-Data format is:
-<P>
-<I>common_data, major_device(INT8), minor_devide(INT8), fileid(INT32), </I>
-
-<I>vm_start(INT64), vm_end(INT64) , vm_flags(INT32)</I>
-
-<P>
-<DT><B>addevent.nfs.fop.open.entry </B>
-
-<DD>
-the entry of nfs_file_open
-<P>
-Data format is:
-<P>
-<I>common_data, major_device(INT8), minor_devide(INT8), fileid(INT32), </I>
-
-<I>flag(INT32), filename(STRING)</I>
-
-<P>
-<DT><B>addevent.nfs.fop.flush.entry </B>
-
-<DD>
-the entry of nfs_file_flush
-<P>
-Data format is:
-<P>
-<I>common_data, major_device(INT8), minor_devide(INT8), fileid(INT32), </I>
-
-<I>ndirty(INT32)</I>
-
-<P>
-<DT><B>addevent.nfs.fop.release.entry </B>
-
-<DD>
-the entry of nfs_file_release
-<P>
-Data format is:
-<P>
-<I>common_data, major_device(INT8), minor_devide(INT8), fileid(INT32), </I>
-
-<I>mode(INT16)</I>
-
-<P>
-<DT><B>addevent.nfs.fop.fsync.entry </B>
-
-<DD>
-the entry of nfs_fsync
-<P>
-Data format is:
-<P>
-<I>common_data, major_device(INT8), minor_devide(INT8), fileid(INT32), </I>
-
-<I>ndirty(INT32)</I>
-
-<P>
-<DT><B>addevent.nfs.fop.lock.entry </B>
-
-<DD>
-the entry of nfs_lock
-<P>
-Data format is:
-<P>
-<I>common_data, major_device(INT8), minor_devide(INT8), fileid(INT32), </I>
-
-<I>fl_start(INT64), fl_end(INT64), fl_type(INT8), fl_flag(INT8), cmd(INT32)</I>
-
-<P>
-<DT><B>addevent.nfs.fop.sendfile.entry </B>
-
-<DD>
-the entry of nfs_file_sendfile
-<P>
-Data format is:
-<P>
-<I>common_data, major_device(INT8), minor_devide(INT8), fileid(INT32), </I>
-
-<I>count(INT64), ppos(INT64)</I>
-
-<P>
-<DT><B>addevent.nfs.fop.checkflags.entry </B>
-
-<DD>
-the entry of nfs_check_flags
-<P>
-Data format is:
-<P>
-<I>flag(INT32)</I>
-
-<P>
-<DT><B>addevent.nfs.aop.readpage.entry </B>
-
-<DD>
-the entry of nfs_readpage
-<P>
-Data format is:
-<P>
-<I>fileid(INT64), rsize(INT32), page_address(INT64), page_index(INT64)</I>
-
-<P>
-<DT><B>addevent.nfs.aop.readpages.entry </B>
-
-<DD>
-the entry of nfs_readpages
-<P>
-Data format is:
-<P>
-<I>fileid(INT64), rpages(INT32), nr_pages(INT32)</I>
-
-<P>
-<DT><B>addevent.nfs.aop.writepage.entry </B>
-
-<DD>
-the entry of nfs_writepage
-<P>
-Data format is:
-<P>
-<I>fileid(INT64), wsize(INT32), page_address(INT64), page_index(INT64)</I>
-
-<P>
-<DT><B>addevent.nfs.aop.writepages.entry </B>
-
-<DD>
-the entry of nfs_writepages
-<P>
-Data format is:
-<P>
-<I>fileid(INT64), wpages(INT32), nr_to_write(INT64)</I>
-
-<P>
-<DT><B>addevent.nfs.aop.prepare_write.entry </B>
-
-<DD>
-the entry of nfs_prepare_write
-<P>
-Data format is:
-<P>
-<I>fileid(INT64), page_address(INT64), page_index(INT64)</I>
-
-<P>
-<DT><B>addevent.nfs.aop.commit_write.entry </B>
-
-<DD>
-the entry of nfs_commit_write
-<P>
-Data format is:
-<P>
-<I>fileid(INT64), page_address(INT64), page_index(INT64),offset(INT32),count(INT32)</I>
-
-<P>
-<DT><B>addevent.nfs.aop.set_page_dirty.entry </B>
-
-<DD>
-the entry of __set_page_dirty_nobuffers
-<P>
-Data format is:
-<P>
-<I>page_address(INT64), page_flag(INT8)</I>
-
-<P>
-<DT><B>addevent.nfs.aop.release_page.entry </B>
-
-<DD>
-the entry of nfs_release_page
-<P>
-Data format is:
-<P>
-<I>page_address(INT64), page_index(INT64)</I>
-
-<P>
-<DT><B>addevent.nfs.proc.lookup.entry </B>
-
-<DD>
-the entry of nfs_proc_lookup , nfs3_proc_lookup and nfs4_proc_lookup
-<P>
-Data format is:
-<P>
-<I>major_dev(INT8), minor_dev(INT8), fileid(INT64), version(INT8),</I>
-
-<I>filename(STRING)</I>
-
-<P>
-<DT><B>addevent.nfs.proc.read.entry </B>
-
-<DD>
-the entry of nfs_proc_read, nfs3_proc_read and nfs4_proc_read
-<P>
-Data format is:
-<P>
-<I>major_dev(INT8), minor_dev(INT8), fileid(INT64), version(INT8),</I>
-
-<I>count(INT32),offset(INT64)</I>
-
-<P>
-<DT><B>addevent.nfs.proc.write.entry </B>
-
-<DD>
-the entry of nfs_proc_write, nfs3_proc_write and nfs4_proc_write
-<P>
-Data format is:
-<P>
-<I>major_dev(INT8), minor_dev(INT8), fileid(INT64), version(INT8),</I>
-
-<I>count(INT32),offset(INT64)</I>
-
-<P>
-<DT><B>addevent.nfs.proc.commit.entry </B>
-
-<DD>
-Fires when client writes the buffered data to disk,the buffered data is asynchronously written by client before .
-The commit function works in sync way,not exist in NFSV2
-<P>
-the entry of nfs3_proc_commit and nfs4_proc_commit
-<P>
-Data format is:
-<P>
-<I>major_dev(INT8), minor_dev(INT8), fileid(INT64), version(INT8),</I>
-
-<I>count(INT32),offset(INT64)</I>
-
-<P>
-<DT><B>addevent.nfs.proc.read_setup.entry </B>
-
-<DD>
-The read_setup function is used to setup a read rpc task,not do a real read operation
-<P>
-the entry of nfs_proc_read_setup, nfs3_proc_read_setup and nfs4_proc_read_setup
-<P>
-Data format is:
-<P>
-<I>major_dev(INT8), minor_dev(INT8), fileid(INT64), version(INT8),</I>
-
-<I>count(INT32),offset(INT64)</I>
-
-<P>
-<DT><B>addevent.nfs.proc.write_setup.entry </B>
-
-<DD>
-The write_setup function is used to setup a write rpc task,not do a real write operation
-<P>
-the entry of nfs_proc_write_setup, nfs3_proc_write_setup and nfs4_proc_write_setup
-<P>
-Data format is:
-<P>
-<I>major_dev(INT8), minor_dev(INT8), fileid(INT64), version(INT8),</I>
-
-<I>how(INT8), count(INT32),offset(INT64)</I>
-
-<P>
-<DT><B>addevent.nfs.proc.commit_setup.entry </B>
-
-<DD>
-The commit_setup function is used to setup a commit rpc task,not do a real commit operation.It is not exist in NFSV2
-<P>
-the entry of nfs3_proc_commit_setup and nfs4_proc_commit_setup
-<P>
-Data format is:
-<P>
-<I>major_dev(INT8), minor_dev(INT8), fileid(INT64), version(INT8),</I>
-
-<I>how(INT8), count(INT32),offset(INT64)</I>
-
-<P>
-<DT><B>addevent.nfs.proc.read_done.entry </B>
-
-<DD>
-Fires when a read reply is received or some read error occur (timeout or socket shutdown)
-<P>
-the entry of nfs_read_done, nfs3_read_done and nfs4_read_done
-<P>
-Data format is:
-<P>
-<I>major_dev(INT8), minor_dev(INT8), fileid(INT64), version(INT8),</I>
-
-<I>status(INT32), count(INT32)</I>
-
-<P>
-<DT><B>addevent.nfs.proc.write_done.entry </B>
-
-<DD>
-Fires when a write reply is received or some write error occur (timeout or socket shutdown)
-<P>
-the entry of nfs_write_done, nfs3_write_done and nfs4_write_done
-<P>
-Data format is:
-<P>
-<I>major_dev(INT8), minor_dev(INT8), fileid(INT64), version(INT8),</I>
-
-<I>status(INT32), count(INT32)</I>
-
-<P>
-<DT><B>addevent.nfs.proc.commit_done.entry </B>
-
-<DD>
-Fires when a commit reply is received or some commit operation error occur (timeout or socket shutdown)
-<P>
-the entry of nfs_commit_done, nfs3_commit_done and nfs4_commit_done
-<P>
-Data format is:
-<P>
-<I>major_dev(INT8), minor_dev(INT8), fileid(INT64), version(INT8),</I>
-
-<I>status(INT32), count(INT32)</I>
-
-<P>
-<DT><B>addevent.nfs.proc.open.entry </B>
-
-<DD>
-the entry of nfs_open
-<P>
-Data format is:
-<P>
-<I>major_dev(INT8), minor_dev(INT8), fileid(INT64), version(INT8),</I>
-
-<I>filename(STRING), flag(INT32), mode(INT32)</I>
-
-<P>
-<DT><B>addevent.nfs.proc.release.entry </B>
-
-<DD>
-the entry of nfs_release
-<P>
-Data format is:
-<P>
-<I>major_dev(INT8), minor_dev(INT8), fileid(INT64), version(INT8),</I>
-
-<I>filename(STRING), flag(INT32), mode(INT32)</I>
-
-<P>
-<DT><B>addevent.nfs.proc.create.entry </B>
-
-<DD>
-the entry of nfs_proc_create, nfs3_proc_create, nfs4_proc_create
-<P>
-Data format is:
-<P>
-<I>major_dev(INT8), minor_dev(INT8), fileid(INT64), version(INT8),</I>
-
-<I>filename(STRING), mode(INT32)</I>
-
-<P>
-<DT><B>addevent.nfs.proc.rename.entry </B>
-
-<DD>
-the entry of nfs_proc_rename, nfs3_proc_rename, nfs4_proc_rename
-<P>
-Data format is:
-<P>
-<I>version(INT8), major_old(INT8), minor_old(INT8), old_fileid(INT64), old_name(STRING),</I>
-
-<I>major_new(INT8), minor_new(INT8), new_fileid(INT64), new_name(STRING) </I>
-
-<P>
-<DT><B>addevent.nfs.proc.remove.entry </B>
-
-<DD>
-the entry of nfs_proc_remove, nfs3_proc_remove, nfs4_proc_remove
-<P>
-Data format is:
-<P>
-<I>major_dev(INT8), minor_dev(INT8), fileid(INT64), version(INT8),</I>
-
-<I>filename(STRING)</I>
-
-<P>
-</DL>
-<A NAME="lbAV"> </A>
-<H3>NFSD </H3>
-
-You could use
-<I>addevent.nfsd</I>
-
-to trace the detail activities of nfs on server side.
-It divided into two groups: nfsd operation event hooks(addevent.nfsd.op),
-nfsd proc event hooks(addevent.nfsd.proc).
-It contains 19 entry hooks and 19 corresponding return hooks
-<P>
-All the return hooks will only log the common_data and
-the return value. So in the following subsections, only the entry
-hooks will be listed:
-<P>
-
-<DL COMPACT>
-<DT><B>addevent.nfsd.dispatch.entry </B>
-
-<DD>
-Fires when server receives a NFS operation from client
-<P>
-the entry of nfsd_dispatch
-<P>
-Data format is:
-<P>
-<I>proto(INT8), version(INT8), xid(INT32), proc(INT32),client_ip(INT32)</I>
-
-<P>
-<DT><B>addevent.nfsd.open.entry </B>
-
-<DD>
-the entry of nfsd_open
-<P>
-Data format is:
-<P>
-<I>fh_size(INT8), fhandle0(INT64), fhandle1(INT64), fhandle2(INT64), </I>
-
-<I>type(INT32), access(INT32)</I>
-
-<P>
-<DT><B>addevent.nfsd.read.entry </B>
-
-<DD>
-the entry of nfsd_read
-<P>
-Data format is:
-<P>
-<I>fh_size(INT8), fhandle0(INT64), fhandle1(INT64), fhandle2(INT64), </I>
-
-<I>count(INT64), offset(INT64), iov_len(INT64), vlen(INT64)</I>
-
-<P>
-<DT><B>addevent.nfsd.write.entry </B>
-
-<DD>
-the entry of nfsd_write
-<P>
-Data format is:
-<P>
-<I>fh_size(INT8), fhandle0(INT64), fhandle1(INT64), fhandle2(INT64), </I>
-
-<I>count(INT64), offset(INT64), iov_len(INT64), vlen(INT64)</I>
-
-<P>
-<DT><B>addevent.nfsd.lookup.entry </B>
-
-<DD>
-the entry of nfsd_lookup
-<P>
-Data format is:
-<P>
-<I>fh_size(INT8), fhandle0(INT64), fhandle1(INT64), fhandle2(INT64), </I>
-
-<I>filename(STRING)</I>
-
-<P>
-<DT><B>addevent.nfsd.commit.entry </B>
-
-<DD>
-the entry of nfsd_commit
-<P>
-Data format is:
-<P>
-<I>fh_size(INT8), fhandle0(INT64), fhandle1(INT64), fhandle2(INT64), </I>
-
-<I>count(INT64), offset(INT64)</I>
-
-<P>
-<DT><B>addevent.nfsd.create.entry </B>
-
-<DD>
-Fires when client creates a file(regular,dir,device,fifo) on server side,
-sometimes nfsd will call nfsd_create_v3 instead of this function
-<P>
-the entry of nfsd_create
-<P>
-Data format is:
-<P>
-<I>fh_size(INT8), fhandle0(INT64), fhandle1(INT64), fhandle2(INT64), </I>
-
-<I>filename(STRING), type(INT32), iap_valid(INT16), iap_mode(INT32)</I>
-
-<P>
-<DT><B>addevent.nfsd.createv3.entry </B>
-
-<DD>
-Fires when client creates a regular file or set file attributes on server side,
-only called by nfsd3_proc_create and nfsd4_open(op_claim_type is NFS4_OPEN_CLAIM_NULL)
-<P>
-the entry of nfsd_create_v3
-<P>
-Data format is:
-<P>
-<I>fh_size(INT8), fhandle0(INT64), fhandle1(INT64), fhandle2(INT64), </I>
-
-<I>filename(STRING), createmode(INT8), iap_valid(INT16), iap_mode(INT32)</I>
-
-<P>
-<DT><B>addevent.nfsd.unlink.entry </B>
-
-<DD>
-the entry of nfsd_unlink
-<P>
-Data format is:
-<P>
-<I>fh_size(INT8), fhandle0(INT64), fhandle1(INT64), fhandle2(INT64), </I>
-
-<I>filename(STRING), type(INT32)</I>
-
-<P>
-<DT><B>addevent.nfsd.rename.entry </B>
-
-<DD>
-the entry of nfsd_rename
-<P>
-Data format is:
-<P>
-<I>old_fhsize(INT8), old_fh0(INT64), old_fh1(INT64), old_fh2(INT64), old_name(STRING)</I>
-
-<I>new_fhsize(INT8), new_fh0(INT64), new_fh1(INT64), new_fh2(INT64), new_name(STRING)</I>
-
-<P>
-<DT><B>addevent.nfsd.close.entry </B>
-
-<DD>
-the entry of nfsd_close
-<P>
-Data format is:
-<P>
-<I>filename(STRING)</I>
-
-<BR>
-<DT><B>addevent.nfsd.proc.lookup.entry </B>
-
-<DD>
-the entry of nfsd_proc_lookup, nfsd3_proc_lookup
-<P>
-Data format is:
-<P>
-<I>fh_size(INT8), fhandle0(INT64), fhandle1(INT64), fhandle2(INT64), version(INT8)</I>
-
-<I>filename(STRING)</I>
-
-<BR>
-<DT><B>addevent.nfsd.proc.read.entry </B>
-
-<DD>
-the entry of nfsd_proc_read, nfsd3_proc_read
-<P>
-Data format is:
-<P>
-<I>fh_size(INT8), fhandle0(INT64), fhandle1(INT64), fhandle2(INT64), version(INT8)</I>
-
-<I>count(INT64), offset(INT64), iov_len(INT64), vlen(INT64)</I>
-
-<BR>
-<DT><B>addevent.nfsd.proc.write.entry </B>
-
-<DD>
-the entry of nfsd_proc_write, nfsd3_proc_write
-<P>
-Data format is:
-<P>
-<I>fh_size(INT8), fhandle0(INT64), fhandle1(INT64), fhandle2(INT64), version(INT8)</I>
-
-<I>count(INT64), offset(INT64), iov_len(INT64), vlen(INT64)</I>
-
-<BR>
-<DT><B>addevent.nfsd.proc.commit.entry </B>
-
-<DD>
-the entry of nfsd_proc_commit, nfsd3_proc_commit
-<P>
-Data format is:
-<P>
-<I>fh_size(INT8), fhandle0(INT64), fhandle1(INT64), fhandle2(INT64), version(INT8)</I>
-
-<I>count(INT64), offset(INT64)</I>
-
-<BR>
-<DT><B>addevent.nfsd.proc.commit.entry </B>
-
-<DD>
-the entry of nfsd4_proc_compound
-<P>
-Data format is:
-<P>
-<I>number(INT32)</I>
-
-<BR>
-<DT><B>addevent.nfsd.proc.remove.entry </B>
-
-<DD>
-the entry of nfsd4_proc_compound
-<P>
-Data format is:
-<P>
-<I>fh_size(INT8), fhandle0(INT64), fhandle1(INT64), fhandle2(INT64), version(INT8)</I>
-
-<I>filename(STRING)</I>
-
-<BR>
-<DT><B>addevent.nfsd.proc.rename.entry </B>
-
-<DD>
-the entry of nfsd_proc_rename, nfsd3_proc_rename
-<P>
-Data format is:
-<P>
-<I>old_fhsize(INT8), old_fh0(INT64), old_fh1(INT64), old_fh2(INT64), old_name(STRING)</I>
-
-<I>new_fhsize(INT8), new_fh0(INT64), new_fh1(INT64), new_fh2(INT64), new_name(STRING)</I>
-
-<P>
-<DT><B>addevent.nfsd.proc.create.entry </B>
-
-<DD>
-the entry of nfsd_proc_create, nfsd3_proc_create
-<P>
-Data format is:
-<P>
-<I>fh_size(INT8), fhandle0(INT64), fhandle1(INT64), fhandle2(INT64), version(INT8)</I>
-
-<I>filename(STRING)</I>
-
-<P>
-</DL>
-<A NAME="lbAW"> </A>
-<H2>SEE ALSO</H2>
-
-<I><A HREF="stap.1.html">stap</A></I>(1)
-
-<I><A HREF="lket-b2a.1.html">lket-b2a</A></I>(1)
-
-<P>
-
-<HR>
-<A NAME="index"> </A><H2>Index</H2>
-<DL>
-<DT><A HREF="#lbAB">NAME</A><DD>
-<DT><A HREF="#lbAC">DESCRIPTION</A><DD>
-<DT><A HREF="#lbAD">BINARY TRACING</A><DD>
-<DT><A HREF="#lbAE">EVENT REGISTER</A><DD>
-<DT><A HREF="#lbAF">CUSTOMIZED TRACE DATA</A><DD>
-<DT><A HREF="#lbAG">EXAMPLES</A><DD>
-<DT><A HREF="#lbAH">EVENT HOOKS AND TRACE DATA FORMAT</A><DD>
-<DL>
-<DT><A HREF="#lbAI">EVENT REGISTER </A><DD>
-<DT><A HREF="#lbAJ">SYSTEM CALLS </A><DD>
-<DT><A HREF="#lbAK">PROCESS CREATION </A><DD>
-<DT><A HREF="#lbAL">SIGNAL</A><DD>
-<DT><A HREF="#lbAM">IO SCHEDULER ACTIVITIES </A><DD>
-<DT><A HREF="#lbAN">TASK SCHEDULE ACTIVITIES </A><DD>
-<DT><A HREF="#lbAO">SCSI ACTIVITIES </A><DD>
-<DT><A HREF="#lbAP">PAGE FAULT </A><DD>
-<DT><A HREF="#lbAQ">NETWORK DEVICE ACTIVITIES </A><DD>
-<DT><A HREF="#lbAR">IO SYSCALLS </A><DD>
-<DT><A HREF="#lbAS">Asynchronous IO </A><DD>
-<DT><A HREF="#lbAT">SUNRPC</A><DD>
-<DT><A HREF="#lbAU">NFS </A><DD>
-<DT><A HREF="#lbAV">NFSD </A><DD>
-</DL>
-<DT><A HREF="#lbAW">SEE ALSO</A><DD>
-</DL>
-<HR>
-This document was created by
-<A HREF="http://localhost/cgi-bin/man/man2html">man2html</A>,
-using the manual pages.<BR>
-Time: 16:17:39 GMT, March 06, 2007
-</BODY>
-</HTML>