1*387f9dfdSAndroid Build Coastguard WorkerDemonstrations of drsnoop, the Linux eBPF/bcc version. 2*387f9dfdSAndroid Build Coastguard Worker 3*387f9dfdSAndroid Build Coastguard Worker 4*387f9dfdSAndroid Build Coastguard Workerdrsnoop traces the direct reclaim system-wide, and prints various details. 5*387f9dfdSAndroid Build Coastguard WorkerExample output: 6*387f9dfdSAndroid Build Coastguard Worker 7*387f9dfdSAndroid Build Coastguard Worker# ./drsnoop 8*387f9dfdSAndroid Build Coastguard WorkerCOMM PID LAT(ms) PAGES 9*387f9dfdSAndroid Build Coastguard Workersummond 17678 0.19 143 10*387f9dfdSAndroid Build Coastguard Workersummond 17669 0.55 313 11*387f9dfdSAndroid Build Coastguard Workersummond 17669 0.15 145 12*387f9dfdSAndroid Build Coastguard Workersummond 17669 0.27 237 13*387f9dfdSAndroid Build Coastguard Workersummond 17669 0.48 111 14*387f9dfdSAndroid Build Coastguard Workersummond 17669 0.16 75 15*387f9dfdSAndroid Build Coastguard Workerhead 17821 0.29 339 16*387f9dfdSAndroid Build Coastguard Workerhead 17825 0.17 109 17*387f9dfdSAndroid Build Coastguard Workersummond 17669 0.14 73 18*387f9dfdSAndroid Build Coastguard Workersummond 17496 104.84 40 19*387f9dfdSAndroid Build Coastguard Workersummond 17678 0.32 167 20*387f9dfdSAndroid Build Coastguard Workersummond 17678 0.14 106 21*387f9dfdSAndroid Build Coastguard Workersummond 17678 0.16 67 22*387f9dfdSAndroid Build Coastguard Workersummond 17678 0.29 267 23*387f9dfdSAndroid Build Coastguard Workersummond 17678 0.27 69 24*387f9dfdSAndroid Build Coastguard Workersummond 17678 0.32 46 25*387f9dfdSAndroid Build Coastguard Workerbase64 17816 0.16 85 26*387f9dfdSAndroid Build Coastguard Workersummond 17678 0.43 283 27*387f9dfdSAndroid Build Coastguard Workersummond 17678 0.14 182 28*387f9dfdSAndroid Build Coastguard Workerhead 17736 0.57 135 29*387f9dfdSAndroid Build Coastguard Worker^C 30*387f9dfdSAndroid Build Coastguard Worker 31*387f9dfdSAndroid Build Coastguard WorkerWhile tracing, the processes alloc pages,due to insufficient memory available 32*387f9dfdSAndroid Build Coastguard Workerin the system, direct reclaim events happened, which will increase the waiting 33*387f9dfdSAndroid Build Coastguard Workerdelay of the processes. 34*387f9dfdSAndroid Build Coastguard Worker 35*387f9dfdSAndroid Build Coastguard Workerdrsnoop can be useful for discovering when allocstall(/proc/vmstat) continues to increase, 36*387f9dfdSAndroid Build Coastguard Workerwhether it is caused by some critical processes or not. 37*387f9dfdSAndroid Build Coastguard Worker 38*387f9dfdSAndroid Build Coastguard WorkerThe -p option can be used to filter on a PID, which is filtered in-kernel. Here 39*387f9dfdSAndroid Build Coastguard WorkerI've used it with -T to print timestamps: 40*387f9dfdSAndroid Build Coastguard Worker 41*387f9dfdSAndroid Build Coastguard Worker# ./drsnoop -Tp 17491 42*387f9dfdSAndroid Build Coastguard WorkerTIME(s) COMM PID LAT(ms) PAGES 43*387f9dfdSAndroid Build Coastguard Worker107.364115000 summond 17491 0.24 50 44*387f9dfdSAndroid Build Coastguard Worker107.364550000 summond 17491 0.26 38 45*387f9dfdSAndroid Build Coastguard Worker107.365266000 summond 17491 0.36 72 46*387f9dfdSAndroid Build Coastguard Worker107.365753000 summond 17491 0.22 49 47*387f9dfdSAndroid Build Coastguard Worker^C 48*387f9dfdSAndroid Build Coastguard Worker 49*387f9dfdSAndroid Build Coastguard WorkerThis shows the summond process allocs pages, and direct reclaim events happening, 50*387f9dfdSAndroid Build Coastguard Workerand the delays are not affected much. 51*387f9dfdSAndroid Build Coastguard Worker 52*387f9dfdSAndroid Build Coastguard WorkerThe -U option include UID on output: 53*387f9dfdSAndroid Build Coastguard Worker 54*387f9dfdSAndroid Build Coastguard Worker# ./drsnoop -U 55*387f9dfdSAndroid Build Coastguard WorkerUID COMM PID LAT(ms) PAGES 56*387f9dfdSAndroid Build Coastguard Worker1000 summond 17678 0.32 46 57*387f9dfdSAndroid Build Coastguard Worker0 base64 17816 0.16 85 58*387f9dfdSAndroid Build Coastguard Worker1000 summond 17678 0.43 283 59*387f9dfdSAndroid Build Coastguard Worker1000 summond 17678 0.14 182 60*387f9dfdSAndroid Build Coastguard Worker0 head 17821 0.29 339 61*387f9dfdSAndroid Build Coastguard Worker0 head 17825 0.17 109 62*387f9dfdSAndroid Build Coastguard Worker^C 63*387f9dfdSAndroid Build Coastguard Worker 64*387f9dfdSAndroid Build Coastguard WorkerThe -u option filtering UID: 65*387f9dfdSAndroid Build Coastguard Worker 66*387f9dfdSAndroid Build Coastguard Worker# ./drsnoop -Uu 1000 67*387f9dfdSAndroid Build Coastguard WorkerUID COMM PID LAT(ms) PAGES 68*387f9dfdSAndroid Build Coastguard Worker1000 summond 17678 0.19 143 69*387f9dfdSAndroid Build Coastguard Worker1000 summond 17669 0.55 313 70*387f9dfdSAndroid Build Coastguard Worker1000 summond 17669 0.15 145 71*387f9dfdSAndroid Build Coastguard Worker1000 summond 17669 0.27 237 72*387f9dfdSAndroid Build Coastguard Worker1000 summond 17669 0.48 111 73*387f9dfdSAndroid Build Coastguard Worker1000 summond 17669 0.16 75 74*387f9dfdSAndroid Build Coastguard Worker1000 summond 17669 0.14 73 75*387f9dfdSAndroid Build Coastguard Worker1000 summond 17678 0.32 167 76*387f9dfdSAndroid Build Coastguard Worker^C 77*387f9dfdSAndroid Build Coastguard Worker 78*387f9dfdSAndroid Build Coastguard WorkerA maximum tracing duration can be set with the -d option. For example, to trace 79*387f9dfdSAndroid Build Coastguard Workerfor 2 seconds: 80*387f9dfdSAndroid Build Coastguard Worker 81*387f9dfdSAndroid Build Coastguard Worker# ./drsnoop -d 2 82*387f9dfdSAndroid Build Coastguard WorkerCOMM PID LAT(ms) PAGES 83*387f9dfdSAndroid Build Coastguard Workerhead 21715 0.15 195 84*387f9dfdSAndroid Build Coastguard Worker 85*387f9dfdSAndroid Build Coastguard WorkerThe -n option can be used to filter on process name using partial matches: 86*387f9dfdSAndroid Build Coastguard Worker 87*387f9dfdSAndroid Build Coastguard Worker# ./drsnoop -n mond 88*387f9dfdSAndroid Build Coastguard WorkerCOMM PID LAT(ms) PAGES 89*387f9dfdSAndroid Build Coastguard Workersummond 10271 0.03 51 90*387f9dfdSAndroid Build Coastguard Workersummond 10271 0.03 51 91*387f9dfdSAndroid Build Coastguard Workersummond 10259 0.05 51 92*387f9dfdSAndroid Build Coastguard Workersummond 10269 319.41 37 93*387f9dfdSAndroid Build Coastguard Workersummond 10270 111.73 35 94*387f9dfdSAndroid Build Coastguard Workersummond 10270 0.11 78 95*387f9dfdSAndroid Build Coastguard Workersummond 10270 0.12 71 96*387f9dfdSAndroid Build Coastguard Workersummond 10270 0.03 35 97*387f9dfdSAndroid Build Coastguard Workersummond 10277 111.62 41 98*387f9dfdSAndroid Build Coastguard Workersummond 10277 0.08 45 99*387f9dfdSAndroid Build Coastguard Workersummond 10277 0.06 32 100*387f9dfdSAndroid Build Coastguard Worker^C 101*387f9dfdSAndroid Build Coastguard Worker 102*387f9dfdSAndroid Build Coastguard WorkerThis caught the 'summond' command because it partially matches 'mond' that's passed 103*387f9dfdSAndroid Build Coastguard Workerto the '-n' option. 104*387f9dfdSAndroid Build Coastguard Worker 105*387f9dfdSAndroid Build Coastguard Worker 106*387f9dfdSAndroid Build Coastguard WorkerThe -v option can be used to show system memory state (now only free mem) at 107*387f9dfdSAndroid Build Coastguard Workerthe beginning of direct reclaiming: 108*387f9dfdSAndroid Build Coastguard Worker 109*387f9dfdSAndroid Build Coastguard Worker# ./drsnoop.py -v 110*387f9dfdSAndroid Build Coastguard WorkerCOMM PID LAT(ms) PAGES FREE(KB) 111*387f9dfdSAndroid Build Coastguard Workerbase64 34924 0.23 151 86260 112*387f9dfdSAndroid Build Coastguard Workerbase64 34962 0.26 149 86260 113*387f9dfdSAndroid Build Coastguard Workerhead 34931 0.24 150 86260 114*387f9dfdSAndroid Build Coastguard Workerbase64 34902 0.19 148 86260 115*387f9dfdSAndroid Build Coastguard Workerhead 34963 0.19 151 86228 116*387f9dfdSAndroid Build Coastguard Workerbase64 34959 0.17 151 86228 117*387f9dfdSAndroid Build Coastguard Workerhead 34965 0.29 190 86228 118*387f9dfdSAndroid Build Coastguard Workerbase64 34957 0.24 152 86228 119*387f9dfdSAndroid Build Coastguard Workersummond 34870 0.15 151 86080 120*387f9dfdSAndroid Build Coastguard Workersummond 34870 0.12 115 86184 121*387f9dfdSAndroid Build Coastguard Worker 122*387f9dfdSAndroid Build Coastguard WorkerUSAGE message: 123*387f9dfdSAndroid Build Coastguard Worker 124*387f9dfdSAndroid Build Coastguard Worker# ./drsnoop -h 125*387f9dfdSAndroid Build Coastguard Workerusage: drsnoop.py [-h] [-T] [-U] [-p PID] [-t TID] [-u UID] [-d DURATION] 126*387f9dfdSAndroid Build Coastguard Worker [-n NAME] 127*387f9dfdSAndroid Build Coastguard Worker 128*387f9dfdSAndroid Build Coastguard WorkerTrace direct reclaim 129*387f9dfdSAndroid Build Coastguard Worker 130*387f9dfdSAndroid Build Coastguard Workeroptional arguments: 131*387f9dfdSAndroid Build Coastguard Worker -h, --help show this help message and exit 132*387f9dfdSAndroid Build Coastguard Worker -T, --timestamp include timestamp on output 133*387f9dfdSAndroid Build Coastguard Worker -U, --print-uid print UID column 134*387f9dfdSAndroid Build Coastguard Worker -p PID, --pid PID trace this PID only 135*387f9dfdSAndroid Build Coastguard Worker -t TID, --tid TID trace this TID only 136*387f9dfdSAndroid Build Coastguard Worker -u UID, --uid UID trace this UID only 137*387f9dfdSAndroid Build Coastguard Worker -d DURATION, --duration DURATION 138*387f9dfdSAndroid Build Coastguard Worker total duration of trace in seconds 139*387f9dfdSAndroid Build Coastguard Worker -n NAME, --name NAME only print process names containing this name 140*387f9dfdSAndroid Build Coastguard Worker 141*387f9dfdSAndroid Build Coastguard Workerexamples: 142*387f9dfdSAndroid Build Coastguard Worker ./drsnoop # trace all direct reclaim 143*387f9dfdSAndroid Build Coastguard Worker ./drsnoop -T # include timestamps 144*387f9dfdSAndroid Build Coastguard Worker ./drsnoop -U # include UID 145*387f9dfdSAndroid Build Coastguard Worker ./drsnoop -p 181 # only trace PID 181 146*387f9dfdSAndroid Build Coastguard Worker ./drsnoop -t 123 # only trace TID 123 147*387f9dfdSAndroid Build Coastguard Worker ./drsnoop -u 1000 # only trace UID 1000 148*387f9dfdSAndroid Build Coastguard Worker ./drsnoop -d 10 # trace for 10 seconds only 149*387f9dfdSAndroid Build Coastguard Worker ./drsnoop -n main # only print process names containing "main" 150