用 lttng 跟踪内核

To list the available kernel events:


# lttng list -k


下载内核模块:
$ git clone git://git.lttng.org/lttng-modules.git



编译内核模块:
make 
得到:  
./lttng-statedump.ko
./lttng-ring-buffer-metadata-mmap-client.ko
./lttng-ring-buffer-client-mmap-discard.ko
./lttng-ring-buffer-metadata-client.ko
./lttng-ring-buffer-client-discard.ko
./lib/lttng-lib-ring-buffer.ko
./probes/lttng-probe-jbd2.ko
./probes/lttng-probe-power.ko
./probes/lttng-probe-gpio.ko
./probes/lttng-kprobes.ko
./probes/lttng-probe-asoc.ko
./probes/lttng-probe-signal.ko
./probes/lttng-probe-sched.ko
./probes/lttng-probe-kvm.ko
./probes/lttng-probe-irq.ko
./probes/lttng-ftrace.ko
./probes/lttng-probe-block.ko
./probes/lttng-types.ko
./probes/lttng-kretprobes.ko
./probes/lttng-probe-module.ko
./probes/lttng-probe-skb.ko
./probes/lttng-probe-kmem.ko
./probes/lttng-probe-timer.ko
./probes/lttng-probe-vmscan.ko
./probes/lttng-probe-lttng.ko
./probes/lttng-probe-statedump.ko
./probes/lttng-probe-scsi.ko
./probes/lttng-probe-net.ko
./probes/lttng-probe-napi.ko
./probes/lttng-probe-regulator.ko
./lttng-ring-buffer-client-mmap-overwrite.ko
./lttng-ring-buffer-client-overwrite.ko
./lttng-tracer.ko



Before starting, we need to create a session:


# lttng create mysession




加载内核模块:
#insmod ./probes/lttng-probe-scsi.ko




列出可用的 内核事件:
# lttng list -k |grep scsi |awk '{print $1}' |tr '\n' ','
scsi_dispatch_cmd_start,scsi_dispatch_cmd_error,scsi_dispatch_cmd_done,scsi_dispatch_cmd_timeout,
scsi_eh_wakeup




使能这些事件:
# lttng enable-event  scsi_dispatch_cmd_start,scsi_dispatch_cmd_error,scsi_dispatch_cmd_done,scsi_dispatch_cmd_timeout,
scsi_eh_wakeup -k


或者简单的使能所有内核事件:
# lttng enable-event -a -k






列出所有的内核事件:
root@ubuntu:~/lttng-modules# lttng list -k
Kernel events:
-------------
      scsi_dispatch_cmd_start (loglevel: TRACE_EMERG (0)) (type: tracepoint)
      scsi_dispatch_cmd_error (loglevel: TRACE_EMERG (0)) (type: tracepoint)
      scsi_dispatch_cmd_done (loglevel: TRACE_EMERG (0)) (type: tracepoint)
      scsi_dispatch_cmd_timeout (loglevel: TRACE_EMERG (0)) (type: tracepoint)
      scsi_eh_wakeup (loglevel: TRACE_EMERG (0)) (type: tracepoint)




      block_rq_abort (loglevel: TRACE_EMERG (0)) (type: tracepoint)
      block_rq_requeue (loglevel: TRACE_EMERG (0)) (type: tracepoint)
      block_rq_complete (loglevel: TRACE_EMERG (0)) (type: tracepoint)




列出使能的内核事件:
# lttng list mysession
Tracing session mysession: [inactive]
    Trace path: /home/sina/lttng-traces/mysession-20121201-162430


=== Domain: Kernel ===


Channels:
-------------
- channel0: [enabled]


    Attributes:
      overwrite mode: 0
      subbufers size: 262144
      number of subbufers: 4
      switch timer interval: 0
      read timer interval: 200
      output: splice()


    Events:
      scsi_eh_wakeup (loglevel: TRACE_EMERG (0)) (type: tracepoint) [enabled]
      scsi_dispatch_cmd_timeout (loglevel: TRACE_EMERG (0)) (type: tracepoint) [enabled]
      scsi_dispatch_cmd_done (loglevel: TRACE_EMERG (0)) (type: tracepoint) [enabled]
      scsi_dispatch_cmd_error (loglevel: TRACE_EMERG (0)) (type: tracepoint) [enabled]
      scsi_dispatch_cmd_start (loglevel: TRACE_EMERG (0)) (type: tracepoint) [enabled]





Start the tracing:
# lttng start


When you're done:
# lttng stop
# lttng destroy



#babeltrace /path/to/trace/dir | grep scsi_dispatch_cmd_start


或者过滤两个

#babeltrace /path/to/trace/dir | grep -E 'scsi_dispatch_cmd_start|scsi_dispatch_cmd_done'


你可能感兴趣的:(用 lttng 跟踪内核)