1*387f9dfdSAndroid Build Coastguard WorkerDemonstrations of dcsnoop, the Linux eBPF/bcc version. 2*387f9dfdSAndroid Build Coastguard Worker 3*387f9dfdSAndroid Build Coastguard Worker 4*387f9dfdSAndroid Build Coastguard Workerdcsnoop traces directory entry cache (dcache) lookups, and can be used for 5*387f9dfdSAndroid Build Coastguard Workerfurther investigation beyond dcstat(8). The output is likely verbose, as 6*387f9dfdSAndroid Build Coastguard Workerdcache lookups are likely frequent. By default, only failed lookups are shown. 7*387f9dfdSAndroid Build Coastguard WorkerFor example: 8*387f9dfdSAndroid Build Coastguard Worker 9*387f9dfdSAndroid Build Coastguard Worker# ./dcsnoop.py 10*387f9dfdSAndroid Build Coastguard WorkerTIME(s) PID COMM T FILE 11*387f9dfdSAndroid Build Coastguard Worker0.002837 1643 snmpd M net/dev 12*387f9dfdSAndroid Build Coastguard Worker0.002852 1643 snmpd M 1643 13*387f9dfdSAndroid Build Coastguard Worker0.002856 1643 snmpd M net 14*387f9dfdSAndroid Build Coastguard Worker0.002863 1643 snmpd M dev 15*387f9dfdSAndroid Build Coastguard Worker0.002952 1643 snmpd M net/if_inet6 16*387f9dfdSAndroid Build Coastguard Worker0.002964 1643 snmpd M if_inet6 17*387f9dfdSAndroid Build Coastguard Worker0.003180 1643 snmpd M net/ipv4/neigh/eth0/retrans_time_ms 18*387f9dfdSAndroid Build Coastguard Worker0.003192 1643 snmpd M ipv4/neigh/eth0/retrans_time_ms 19*387f9dfdSAndroid Build Coastguard Worker0.003197 1643 snmpd M neigh/eth0/retrans_time_ms 20*387f9dfdSAndroid Build Coastguard Worker0.003203 1643 snmpd M eth0/retrans_time_ms 21*387f9dfdSAndroid Build Coastguard Worker0.003206 1643 snmpd M retrans_time_ms 22*387f9dfdSAndroid Build Coastguard Worker0.003245 1643 snmpd M ipv6/neigh/eth0/retrans_time_ms 23*387f9dfdSAndroid Build Coastguard Worker0.003249 1643 snmpd M neigh/eth0/retrans_time_ms 24*387f9dfdSAndroid Build Coastguard Worker0.003252 1643 snmpd M eth0/retrans_time_ms 25*387f9dfdSAndroid Build Coastguard Worker0.003255 1643 snmpd M retrans_time_ms 26*387f9dfdSAndroid Build Coastguard Worker0.003287 1643 snmpd M conf/eth0/forwarding 27*387f9dfdSAndroid Build Coastguard Worker0.003292 1643 snmpd M eth0/forwarding 28*387f9dfdSAndroid Build Coastguard Worker0.003295 1643 snmpd M forwarding 29*387f9dfdSAndroid Build Coastguard Worker0.003326 1643 snmpd M base_reachable_time_ms 30*387f9dfdSAndroid Build Coastguard Worker[...] 31*387f9dfdSAndroid Build Coastguard Worker 32*387f9dfdSAndroid Build Coastguard WorkerI ran a drop caches at the same time as executing this tool. The output shows 33*387f9dfdSAndroid Build Coastguard Workerthe processes, the type of event ("T" column: M == miss, R == reference), 34*387f9dfdSAndroid Build Coastguard Workerand the filename for the dcache lookup. 35*387f9dfdSAndroid Build Coastguard Worker 36*387f9dfdSAndroid Build Coastguard WorkerThe way the dcache is currently implemented, each component of a path is 37*387f9dfdSAndroid Build Coastguard Workerchecked in turn. The first line, showing "net/dev" from snmp, will be a lookup 38*387f9dfdSAndroid Build Coastguard Workerfor "net" in a directory (that isn't shown here). If it finds "net", it will 39*387f9dfdSAndroid Build Coastguard Workerthen lookup "dev" inside net. You can see this sequence a little later, 40*387f9dfdSAndroid Build Coastguard Workerstarting at time 0.003180, where a pathname is being searched 41*387f9dfdSAndroid Build Coastguard Workerdirectory by directory. 42*387f9dfdSAndroid Build Coastguard Worker 43*387f9dfdSAndroid Build Coastguard Worker 44*387f9dfdSAndroid Build Coastguard WorkerThe -a option will show all lookups, although be warned, the output will be 45*387f9dfdSAndroid Build Coastguard Workervery verbose. For example: 46*387f9dfdSAndroid Build Coastguard Worker 47*387f9dfdSAndroid Build Coastguard Worker# ./dcsnoop 48*387f9dfdSAndroid Build Coastguard WorkerTIME(s) PID COMM T FILE 49*387f9dfdSAndroid Build Coastguard Worker0.000000 20279 dcsnoop.py M p_lookup_fast 50*387f9dfdSAndroid Build Coastguard Worker0.000010 20279 dcsnoop.py M enable 51*387f9dfdSAndroid Build Coastguard Worker0.000013 20279 dcsnoop.py M id 52*387f9dfdSAndroid Build Coastguard Worker0.000015 20279 dcsnoop.py M filter 53*387f9dfdSAndroid Build Coastguard Worker0.000017 20279 dcsnoop.py M trigger 54*387f9dfdSAndroid Build Coastguard Worker0.000019 20279 dcsnoop.py M format 55*387f9dfdSAndroid Build Coastguard Worker0.006148 20279 dcsnoop.py R sys/kernel/debug/tracing/trace_pipe 56*387f9dfdSAndroid Build Coastguard Worker0.006158 20279 dcsnoop.py R kernel/debug/tracing/trace_pipe 57*387f9dfdSAndroid Build Coastguard Worker0.006161 20279 dcsnoop.py R debug/tracing/trace_pipe 58*387f9dfdSAndroid Build Coastguard Worker0.006164 20279 dcsnoop.py R tracing/trace_pipe 59*387f9dfdSAndroid Build Coastguard Worker0.006166 20279 dcsnoop.py R trace_pipe 60*387f9dfdSAndroid Build Coastguard Worker0.015900 1643 snmpd R proc/sys/net/ipv6/conf/lo/forwarding 61*387f9dfdSAndroid Build Coastguard Worker0.015901 1643 snmpd R sys/net/ipv6/conf/lo/forwarding 62*387f9dfdSAndroid Build Coastguard Worker0.015901 1643 snmpd R net/ipv6/conf/lo/forwarding 63*387f9dfdSAndroid Build Coastguard Worker0.015902 1643 snmpd R ipv6/conf/lo/forwarding 64*387f9dfdSAndroid Build Coastguard Worker0.015903 1643 snmpd R conf/lo/forwarding 65*387f9dfdSAndroid Build Coastguard Worker0.015904 1643 snmpd R lo/forwarding 66*387f9dfdSAndroid Build Coastguard Worker0.015905 1643 snmpd M lo/forwarding 67*387f9dfdSAndroid Build Coastguard Worker0.015908 1643 snmpd R forwarding 68*387f9dfdSAndroid Build Coastguard Worker0.015909 1643 snmpd M forwarding 69*387f9dfdSAndroid Build Coastguard Worker0.015937 1643 snmpd R proc/sys/net/ipv6/neigh/lo/base_reachable_time_ms 70*387f9dfdSAndroid Build Coastguard Worker0.015937 1643 snmpd R sys/net/ipv6/neigh/lo/base_reachable_time_ms 71*387f9dfdSAndroid Build Coastguard Worker0.015938 1643 snmpd R net/ipv6/neigh/lo/base_reachable_time_ms 72*387f9dfdSAndroid Build Coastguard Worker0.015939 1643 snmpd R ipv6/neigh/lo/base_reachable_time_ms 73*387f9dfdSAndroid Build Coastguard Worker0.015940 1643 snmpd R neigh/lo/base_reachable_time_ms 74*387f9dfdSAndroid Build Coastguard Worker0.015941 1643 snmpd R lo/base_reachable_time_ms 75*387f9dfdSAndroid Build Coastguard Worker0.015941 1643 snmpd R base_reachable_time_ms 76*387f9dfdSAndroid Build Coastguard Worker0.015943 1643 snmpd M base_reachable_time_ms 77*387f9dfdSAndroid Build Coastguard Worker0.043569 1876 supervise M 20281 78*387f9dfdSAndroid Build Coastguard Worker0.043573 1886 supervise M 20280 79*387f9dfdSAndroid Build Coastguard Worker0.043582 1886 supervise R supervise/status.new 80*387f9dfdSAndroid Build Coastguard Worker[...] 81*387f9dfdSAndroid Build Coastguard Worker 82*387f9dfdSAndroid Build Coastguard Worker 83*387f9dfdSAndroid Build Coastguard WorkerUSAGE message: 84*387f9dfdSAndroid Build Coastguard Worker 85*387f9dfdSAndroid Build Coastguard Worker# ./dcsnoop.py -h 86*387f9dfdSAndroid Build Coastguard Workerusage: dcsnoop.py [-h] [-a] 87*387f9dfdSAndroid Build Coastguard Worker 88*387f9dfdSAndroid Build Coastguard WorkerTrace directory entry cache (dcache) lookups 89*387f9dfdSAndroid Build Coastguard Worker 90*387f9dfdSAndroid Build Coastguard Workeroptional arguments: 91*387f9dfdSAndroid Build Coastguard Worker -h, --help show this help message and exit 92*387f9dfdSAndroid Build Coastguard Worker -a, --all trace all lookups (default is fails only) 93*387f9dfdSAndroid Build Coastguard Worker 94*387f9dfdSAndroid Build Coastguard Workerexamples: 95*387f9dfdSAndroid Build Coastguard Worker ./dcsnoop # trace failed dcache lookups 96*387f9dfdSAndroid Build Coastguard Worker ./dcsnoop -a # trace all dcache lookups 97