Demonstrations of dcstat, the Linux eBPF/bcc version.


dcstat shows directory entry cache (dcache) statistics. For example:

# ./dcstat 
TIME         REFS/s   SLOW/s   MISS/s     HIT%
08:11:47:      2059      141       97    95.29
08:11:48:     79974      151      106    99.87
08:11:49:    192874      146      102    99.95
08:11:50:      2051      144      100    95.12
08:11:51:     73373    17239    17194    76.57
08:11:52:     54685    25431    25387    53.58
08:11:53:     18127     8182     8137    55.12
08:11:54:     22517    10345    10301    54.25
08:11:55:      7524     2881     2836    62.31
08:11:56:      2067      141       97    95.31
08:11:57:      2115      145      101    95.22

The output shows the total references per second ("REFS/s"), the number that
took a slower code path to be processed ("SLOW/s"), the number of dcache misses
("MISS/s"), and the hit ratio as a percentage. By default, an interval of 1
second is used.

At 08:11:49, there were 192 thousand references, which almost entirely hit
from the dcache, with a hit ration of 99.95%. A little later, starting at
08:11:51, a workload began that walked many uncached files, reducing the hit
ratio to 53%, and more importantly, a miss rate of over 10 thousand per second.


Here's an interesting workload:

# ./dcstat 
TIME         REFS/s   SLOW/s   MISS/s     HIT%
08:15:53:    250683      141       97    99.96
08:15:54:    266115      145      101    99.96
08:15:55:    268428      141       97    99.96
08:15:56:    260389      143       99    99.96

It's a 99.96% hit ratio, and these are all negative hits: accessing a file that
does not exist. Here's the C program that generated the workload:

# cat -n badopen.c
     1	#include <sys/types.h>
     2	#include <sys/stat.h>
     3	#include <fcntl.h>
     4	
     5	int
     6	main(int argc, char *argv[])
     7	{
     8	    int fd;
     9	    while (1) {
    10	        fd = open("bad", O_RDONLY);
    11	    }
    12	    return 0;
    13	}

This is a simple workload generator than tries to open a missing file ("bad")
as quickly as possible.


Lets see what happens if the workload attempts to open a different filename
each time (which is also a missing file), using the following C code:

# cat -n badopen2.c
     1	#include <sys/types.h>
     2	#include <sys/stat.h>
     3	#include <fcntl.h>
     4	#include <stdio.h>
     5	
     6	int
     7	main(int argc, char *argv[])
     8	{
     9	    int fd, i = 0;
    10	    char buf[128] = {};
    11	
    12	    while (1) {
    13	        sprintf(buf, "bad%d", i++);
    14	        fd = open(buf, O_RDONLY);
    15	    }
    16	    return 0;
    17	}

Here's dcstat:

# ./dcstat 
TIME         REFS/s   SLOW/s   MISS/s     HIT%
08:18:52:    241131   237544   237505     1.51
08:18:53:    238210   236323   236278     0.82
08:18:54:    235259   233307   233261     0.85
08:18:55:    233144   231256   231214     0.83
08:18:56:    231981   230097   230053     0.83


dcstat also supports an optional interval and optional count. For example,
printing 5 second summaries 3 times:

# ./dcstat 5 3
TIME         REFS/s   SLOW/s   MISS/s     HIT%
08:20:03:      2085      143       99    95.23
08:20:08:      2077      143       98    95.24
08:20:14:      2071      144      100    95.15


USAGE message:

# ./dcstat -h
USAGE: ./dcstat [interval [count]]
