Demonstrations of dcsnoop, the Linux eBPF/bcc version.


dcsnoop traces directory entry cache (dcache) lookups, and can be used for
further investigation beyond dcstat(8). The output is likely verbose, as
dcache lookups are likely frequent. By default, only failed lookups are shown.
For example:

# ./dcsnoop.py 
TIME(s)     PID    COMM             T FILE
0.002837    1643   snmpd            M net/dev
0.002852    1643   snmpd            M 1643
0.002856    1643   snmpd            M net
0.002863    1643   snmpd            M dev
0.002952    1643   snmpd            M net/if_inet6
0.002964    1643   snmpd            M if_inet6
0.003180    1643   snmpd            M net/ipv4/neigh/eth0/retrans_time_ms
0.003192    1643   snmpd            M ipv4/neigh/eth0/retrans_time_ms
0.003197    1643   snmpd            M neigh/eth0/retrans_time_ms
0.003203    1643   snmpd            M eth0/retrans_time_ms
0.003206    1643   snmpd            M retrans_time_ms
0.003245    1643   snmpd            M ipv6/neigh/eth0/retrans_time_ms
0.003249    1643   snmpd            M neigh/eth0/retrans_time_ms
0.003252    1643   snmpd            M eth0/retrans_time_ms
0.003255    1643   snmpd            M retrans_time_ms
0.003287    1643   snmpd            M conf/eth0/forwarding
0.003292    1643   snmpd            M eth0/forwarding
0.003295    1643   snmpd            M forwarding
0.003326    1643   snmpd            M base_reachable_time_ms
[...]

I ran a drop caches at the same time as executing this tool. The output shows
the processes, the type of event ("T" column: M == miss, R == reference),
and the filename for the dcache lookup.

The way the dcache is currently implemented, each component of a path is
checked in turn. The first line, showing "net/dev" from snmp, will be a lookup
for "net" in a directory (that isn't shown here). If it finds "net", it will
then lookup "dev" inside net. You can see this sequence a little later,
starting at time 0.003180, where a pathname is being searched
directory by directory.


The -a option will show all lookups, although be warned, the output will be
very verbose. For example:

# ./dcsnoop
TIME(s)     PID    COMM             T FILE
0.000000    20279  dcsnoop.py       M p_lookup_fast
0.000010    20279  dcsnoop.py       M enable
0.000013    20279  dcsnoop.py       M id
0.000015    20279  dcsnoop.py       M filter
0.000017    20279  dcsnoop.py       M trigger
0.000019    20279  dcsnoop.py       M format
0.006148    20279  dcsnoop.py       R sys/kernel/debug/tracing/trace_pipe
0.006158    20279  dcsnoop.py       R kernel/debug/tracing/trace_pipe
0.006161    20279  dcsnoop.py       R debug/tracing/trace_pipe
0.006164    20279  dcsnoop.py       R tracing/trace_pipe
0.006166    20279  dcsnoop.py       R trace_pipe
0.015900    1643   snmpd            R proc/sys/net/ipv6/conf/lo/forwarding
0.015901    1643   snmpd            R sys/net/ipv6/conf/lo/forwarding
0.015901    1643   snmpd            R net/ipv6/conf/lo/forwarding
0.015902    1643   snmpd            R ipv6/conf/lo/forwarding
0.015903    1643   snmpd            R conf/lo/forwarding
0.015904    1643   snmpd            R lo/forwarding
0.015905    1643   snmpd            M lo/forwarding
0.015908    1643   snmpd            R forwarding
0.015909    1643   snmpd            M forwarding
0.015937    1643   snmpd            R proc/sys/net/ipv6/neigh/lo/base_reachable_time_ms
0.015937    1643   snmpd            R sys/net/ipv6/neigh/lo/base_reachable_time_ms
0.015938    1643   snmpd            R net/ipv6/neigh/lo/base_reachable_time_ms
0.015939    1643   snmpd            R ipv6/neigh/lo/base_reachable_time_ms
0.015940    1643   snmpd            R neigh/lo/base_reachable_time_ms
0.015941    1643   snmpd            R lo/base_reachable_time_ms
0.015941    1643   snmpd            R base_reachable_time_ms
0.015943    1643   snmpd            M base_reachable_time_ms
0.043569    1876   supervise        M 20281
0.043573    1886   supervise        M 20280
0.043582    1886   supervise        R supervise/status.new
[...]


USAGE message:

# ./dcsnoop.py -h
usage: dcsnoop.py [-h] [-a]

Trace directory entry cache (dcache) lookups

optional arguments:
  -h, --help  show this help message and exit
  -a, --all   trace all lookups (default is fails only)

examples:
    ./dcsnoop           # trace failed dcache lookups
    ./dcsnoop -a        # trace all dcache lookups
