1*387f9dfdSAndroid Build Coastguard WorkerDemonstrations of llcstat. 2*387f9dfdSAndroid Build Coastguard Worker 3*387f9dfdSAndroid Build Coastguard Worker 4*387f9dfdSAndroid Build Coastguard Workerllcstat traces cache reference and cache miss events system-wide, and summarizes 5*387f9dfdSAndroid Build Coastguard Workerthem by PID and CPU. 6*387f9dfdSAndroid Build Coastguard Worker 7*387f9dfdSAndroid Build Coastguard WorkerThese events, defined in uapi/linux/perf_event.h, have different meanings on 8*387f9dfdSAndroid Build Coastguard Workerdifferent architecture. For x86-64, they mean misses and references to LLC. 9*387f9dfdSAndroid Build Coastguard Worker 10*387f9dfdSAndroid Build Coastguard WorkerExample output: 11*387f9dfdSAndroid Build Coastguard Worker 12*387f9dfdSAndroid Build Coastguard Worker# ./llcstat.py 20 -c 5000 13*387f9dfdSAndroid Build Coastguard WorkerRunning for 20 seconds or hit Ctrl-C to end. 14*387f9dfdSAndroid Build Coastguard WorkerPID NAME CPU REFERENCE MISS HIT% 15*387f9dfdSAndroid Build Coastguard Worker0 swapper/15 15 3515000 640000 81.79% 16*387f9dfdSAndroid Build Coastguard Worker238 migration/38 38 5000 0 100.00% 17*387f9dfdSAndroid Build Coastguard Worker4512 ntpd 11 5000 0 100.00% 18*387f9dfdSAndroid Build Coastguard Worker150867 ipmitool 3 25000 5000 80.00% 19*387f9dfdSAndroid Build Coastguard Worker150895 lscpu 17 280000 25000 91.07% 20*387f9dfdSAndroid Build Coastguard Worker151807 ipmitool 15 15000 5000 66.67% 21*387f9dfdSAndroid Build Coastguard Worker150757 awk 2 15000 5000 66.67% 22*387f9dfdSAndroid Build Coastguard Worker151213 chef-client 5 1770000 240000 86.44% 23*387f9dfdSAndroid Build Coastguard Worker151822 scribe-dispatch 12 15000 0 100.00% 24*387f9dfdSAndroid Build Coastguard Worker123386 mysqld 5 5000 0 100.00% 25*387f9dfdSAndroid Build Coastguard Worker[...] 26*387f9dfdSAndroid Build Coastguard WorkerTotal References: 518920000 Total Misses: 90265000 Hit Rate: 82.61% 27*387f9dfdSAndroid Build Coastguard Worker 28*387f9dfdSAndroid Build Coastguard WorkerThis shows each PID's cache hit rate during the 20 seconds run period. 29*387f9dfdSAndroid Build Coastguard Worker 30*387f9dfdSAndroid Build Coastguard WorkerA count of 5000 was used in this example, which means that one in every 5,000 31*387f9dfdSAndroid Build Coastguard Workerevents will trigger an in-kernel counter to be incremented. This is refactored 32*387f9dfdSAndroid Build Coastguard Workeron the output, which is why it is always in multiples of 5,000. 33*387f9dfdSAndroid Build Coastguard Worker 34*387f9dfdSAndroid Build Coastguard WorkerWe don't instrument every single event since the overhead would be prohibitive, 35*387f9dfdSAndroid Build Coastguard Workernor do we need to: this is a type of sampling profiler. Because of this, the 36*387f9dfdSAndroid Build Coastguard Workerprocesses that trigger the 5,000'th cache reference or misses can happen to 37*387f9dfdSAndroid Build Coastguard Workersome degree by chance. Overall it should make sense. But for low counts, 38*387f9dfdSAndroid Build Coastguard Workeryou might find a case where -- by chance -- a process has been tallied with 39*387f9dfdSAndroid Build Coastguard Workermore misses than references, which would seem impossible. 40*387f9dfdSAndroid Build Coastguard Worker 41*387f9dfdSAndroid Build Coastguard Worker# ./llcstat.py 10 -t 42*387f9dfdSAndroid Build Coastguard WorkerRunning for 10 seconds or hit Ctrl-C to end. 43*387f9dfdSAndroid Build Coastguard WorkerPID TID NAME CPU REFERENCE MISS HIT% 44*387f9dfdSAndroid Build Coastguard Worker170843 170845 docker 12 2700 1200 55.56% 45*387f9dfdSAndroid Build Coastguard Worker298670 298670 kworker/15:0 15 500 0 100.00% 46*387f9dfdSAndroid Build Coastguard Worker170254 170254 kworker/11:1 11 2500 400 84.00% 47*387f9dfdSAndroid Build Coastguard Worker1046952 1046953 git 0 2600 1100 57.69% 48*387f9dfdSAndroid Build Coastguard Worker170843 170849 docker 15 1000 400 60.00% 49*387f9dfdSAndroid Build Coastguard Worker1027373 1027382 node 8 3500 2500 28.57% 50*387f9dfdSAndroid Build Coastguard Worker0 0 swapper/7 7 173000 4200 97.57% 51*387f9dfdSAndroid Build Coastguard Worker1028217 1028217 node 14 15600 22400 0.00% 52*387f9dfdSAndroid Build Coastguard Worker[...] 53*387f9dfdSAndroid Build Coastguard WorkerTotal References: 7139900 Total Misses: 1413900 Hit Rate: 80.20% 54*387f9dfdSAndroid Build Coastguard Worker 55*387f9dfdSAndroid Build Coastguard WorkerThis shows each TID`s cache hit rate during the 10 seconds run period. 56*387f9dfdSAndroid Build Coastguard Worker 57*387f9dfdSAndroid Build Coastguard WorkerUSAGE message: 58*387f9dfdSAndroid Build Coastguard Worker 59*387f9dfdSAndroid Build Coastguard Worker# ./llcstat.py --help 60*387f9dfdSAndroid Build Coastguard Workerusage: llcstat.py [-h] [-c SAMPLE_PERIOD] [duration] 61*387f9dfdSAndroid Build Coastguard Worker 62*387f9dfdSAndroid Build Coastguard WorkerSummarize cache references and misses by PID 63*387f9dfdSAndroid Build Coastguard Worker 64*387f9dfdSAndroid Build Coastguard Workerpositional arguments: 65*387f9dfdSAndroid Build Coastguard Worker duration Duration, in seconds, to run 66*387f9dfdSAndroid Build Coastguard Worker 67*387f9dfdSAndroid Build Coastguard Worker optional arguments: 68*387f9dfdSAndroid Build Coastguard Worker -h, --help show this help message and exit 69*387f9dfdSAndroid Build Coastguard Worker -c SAMPLE_PERIOD, --sample_period SAMPLE_PERIOD 70*387f9dfdSAndroid Build Coastguard Worker Sample one in this many number of cache reference 71*387f9dfdSAndroid Build Coastguard Worker and miss events 72*387f9dfdSAndroid Build Coastguard Worker -t, --tid Summarize cache references and misses by PID/TID 73