How to do it...

The static tracing functionality is exposed via the debugfs filesystem. The functionality offered by the interface includes:

Listing events

You can see a list of available tracepoints exposed via sysfs and ordered in subsystem directories with the following:

# ls /sys/kernel/debug/tracing/events/
    
asoc                 ipi                  regmap
    
block                irq                  regulator
cfg80211             jbd                  rpm
clk                  jbd2                 sched
cma                  kmem                 scsi
coda                 libata               signal
compaction           mac80211             skb
cpufreq_interactive  migrate              sock
drm                  module               spi
enable               napi                 sunrpc
ext3                 net                  swiotlb
ext4                 nfs                  task
fence                nfs4                 thermal
filelock             oom                  timer
filemap              pagemap              udp
ftrace               power                v4l2
gpio                 printk               vmscan
header_event         random               workqueue
header_page          raw_syscalls         writeback
i2c                  rcu
  

Or in the available_events file with the <subsystem>:<event> format using the following commands:

#  grep 'net'  /sys/kernel/debug/tracing/available_events
net:netif_rx_ni_entry
net:netif_rx_entry
net:netif_receive_skb_entry
net:napi_gro_receive_entry
net:napi_gro_frags_entry
net:netif_rx
net:netif_receive_skb
net:net_dev_queue
net:net_dev_xmit
net:net_dev_start_xmit  

Describing events

Each event has a specific printing format that describes the information included in the log event, as follows:

# cat /sys/kernel/debug/tracing/events/net/netif_receive_skb/format
name: netif_receive_skb
ID: 579
format:
    field:unsigned short common_type;       offset:0;       size:2;  signed:0;
    field:unsigned char common_flags;       offset:2;       size:1; signed:0;
    field:unsigned char common_preempt_count;       offset:3;       size:1; signed:0;
    field:int common_pid;   offset:4;       size:4; signed:1;
    
    field:void * skbaddr;   offset:8;       size:4; signed:0;
    field:unsigned int len; offset:12;      size:4; signed:0;
    field:__data_loc char[] name;   offset:16;      size:4; signed:0;
    
print fmt: "dev=%s skbaddr=%p len=%u", __get_str(name), REC->skbaddr, REC->len
 

Enabling and disabling events

 You can enable or disable events in the following ways:

  • By echoing 0 or 1 to the event enable file:
# echo 1 > 
/sys/kernel/debug/tracing/events/net/netif_receive_skb/enable
  • By subsystem directory, which will enable or disable all the tracepoints in the directory/subsystem:
# echo 1 > /sys/kernel/debug/tracing/events/net/enable  
  • By echoing the unique tracepoint name into the set_event file:
# echo netif_receive_skb >> 
/sys/kernel/debug/tracing/set_event

Note the append operation >> is used not to clear events.

  • Events can be disabled by appending an exclamation mark to their names:
# echo '!netif_receive_skb' >> 
/sys/kernel/debug/tracing/set_event
  • Events can also be enabled/disabled by subsystem:
# echo 'net:*' > /sys/kernel/debug/tracing/set_event 
  • To disable all events:
# echo > /sys/kernel/debug/tracing/set_event  
  • You can also enable tracepoints from boot by passing a trace_event=<comma separated event list> kernel command line-argument.

Adding events to the tracing buffer

To see the tracepoints appear on the tracing buffer, turn tracing on:

# echo 1 > /sys/kernel/debug/tracing/tracing_on  

Tracepoint events are integrated into the ftrace subsystem so that if you enable a tracepoint when a tracer is running, it will show up in the trace. This behavior is shown in the following commands:

# cd /sys/kernel/debug/tracing
# echo 1 > events/net/netif_receive_skb/enable
# echo netif_receive_* > set_ftrace_filter
# echo function > current_tracer
# cat trace
          <idle>-0     [000] ..s2    66.498472: netif_receive_skb_internal <-napi_gro_receive
          <idle>-0     [000] ..s2    66.498483: netif_receive_skb: dev=eth0 skbaddr=d86c2600 len=328
  
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset