xref: /aosp_15_r20/external/bcc/tools/compactsnoop_example.txt (revision 387f9dfdfa2baef462e92476d413c7bc2470293e)
1*387f9dfdSAndroid Build Coastguard WorkerDemonstrations of compactstall, the Linux eBPF/bcc version.
2*387f9dfdSAndroid Build Coastguard Worker
3*387f9dfdSAndroid Build Coastguard Worker
4*387f9dfdSAndroid Build Coastguard Workercompactsnoop traces the compact zone system-wide, and print various details.
5*387f9dfdSAndroid Build Coastguard WorkerExample output (manual trigger by echo 1 > /proc/sys/vm/compact_memory):
6*387f9dfdSAndroid Build Coastguard Worker
7*387f9dfdSAndroid Build Coastguard Worker# ./compactsnoop
8*387f9dfdSAndroid Build Coastguard WorkerCOMM           PID    NODE ZONE         ORDER MODE      LAT(ms)           STATUS
9*387f9dfdSAndroid Build Coastguard Workerzsh            23685  0    ZONE_DMA     -1    SYNC        0.025         complete
10*387f9dfdSAndroid Build Coastguard Workerzsh            23685  0    ZONE_DMA32   -1    SYNC        3.925         complete
11*387f9dfdSAndroid Build Coastguard Workerzsh            23685  0    ZONE_NORMAL  -1    SYNC      113.975         complete
12*387f9dfdSAndroid Build Coastguard Workerzsh            23685  1    ZONE_NORMAL  -1    SYNC        81.57         complete
13*387f9dfdSAndroid Build Coastguard Workerzsh            23685  0    ZONE_DMA     -1    SYNC         0.02         complete
14*387f9dfdSAndroid Build Coastguard Workerzsh            23685  0    ZONE_DMA32   -1    SYNC        4.631         complete
15*387f9dfdSAndroid Build Coastguard Workerzsh            23685  0    ZONE_NORMAL  -1    SYNC      113.975         complete
16*387f9dfdSAndroid Build Coastguard Workerzsh            23685  1    ZONE_NORMAL  -1    SYNC       80.647         complete
17*387f9dfdSAndroid Build Coastguard Workerzsh            23685  0    ZONE_DMA     -1    SYNC        0.020         complete
18*387f9dfdSAndroid Build Coastguard Workerzsh            23685  0    ZONE_DMA32   -1    SYNC        3.367         complete
19*387f9dfdSAndroid Build Coastguard Workerzsh            23685  0    ZONE_NORMAL  -1    SYNC       115.18         complete
20*387f9dfdSAndroid Build Coastguard Workerzsh            23685  1    ZONE_NORMAL  -1    SYNC       81.766         complete
21*387f9dfdSAndroid Build Coastguard Workerzsh            23685  0    ZONE_DMA     -1    SYNC        0.025         complete
22*387f9dfdSAndroid Build Coastguard Workerzsh            23685  0    ZONE_DMA32   -1    SYNC        4.346         complete
23*387f9dfdSAndroid Build Coastguard Workerzsh            23685  0    ZONE_NORMAL  -1    SYNC      114.570         complete
24*387f9dfdSAndroid Build Coastguard Workerzsh            23685  1    ZONE_NORMAL  -1    SYNC       80.820         complete
25*387f9dfdSAndroid Build Coastguard Workerzsh            23685  0    ZONE_DMA     -1    SYNC        0.026         complete
26*387f9dfdSAndroid Build Coastguard Workerzsh            23685  0    ZONE_DMA32   -1    SYNC        4.611         complete
27*387f9dfdSAndroid Build Coastguard Workerzsh            23685  0    ZONE_NORMAL  -1    SYNC      113.993         complete
28*387f9dfdSAndroid Build Coastguard Workerzsh            23685  1    ZONE_NORMAL  -1    SYNC       80.928         complete
29*387f9dfdSAndroid Build Coastguard Workerzsh            23685  0    ZONE_DMA     -1    SYNC         0.02         complete
30*387f9dfdSAndroid Build Coastguard Workerzsh            23685  0    ZONE_DMA32   -1    SYNC        3.889         complete
31*387f9dfdSAndroid Build Coastguard Workerzsh            23685  0    ZONE_NORMAL  -1    SYNC      113.776         complete
32*387f9dfdSAndroid Build Coastguard Workerzsh            23685  1    ZONE_NORMAL  -1    SYNC       80.727         complete
33*387f9dfdSAndroid Build Coastguard Worker^C
34*387f9dfdSAndroid Build Coastguard Worker
35*387f9dfdSAndroid Build Coastguard WorkerWhile tracing, the processes alloc pages due to memory fragmentation is too
36*387f9dfdSAndroid Build Coastguard Workerserious to meet contiguous memory requirements in the system, compact zone
37*387f9dfdSAndroid Build Coastguard Workerevents happened, which will increase the waiting delay of the processes.
38*387f9dfdSAndroid Build Coastguard Worker
39*387f9dfdSAndroid Build Coastguard Workercompactsnoop can be useful for discovering when compact_stall(/proc/vmstat)
40*387f9dfdSAndroid Build Coastguard Workercontinues to increase, whether it is caused by some critical processes or not.
41*387f9dfdSAndroid Build Coastguard Worker
42*387f9dfdSAndroid Build Coastguard WorkerThe STATUS include (CentOS 7.6's kernel)
43*387f9dfdSAndroid Build Coastguard Worker
44*387f9dfdSAndroid Build Coastguard Worker    compact_status = {
45*387f9dfdSAndroid Build Coastguard Worker        # COMPACT_SKIPPED: compaction didn't start as it was not possible or direct reclaim was more suitable
46*387f9dfdSAndroid Build Coastguard Worker        0: "skipped",
47*387f9dfdSAndroid Build Coastguard Worker        # COMPACT_CONTINUE: compaction should continue to another pageblock
48*387f9dfdSAndroid Build Coastguard Worker        1: "continue",
49*387f9dfdSAndroid Build Coastguard Worker        # COMPACT_PARTIAL: direct compaction partially compacted a zone and there are suitable pages
50*387f9dfdSAndroid Build Coastguard Worker        2: "partial",
51*387f9dfdSAndroid Build Coastguard Worker        # COMPACT_COMPLETE: The full zone was compacted
52*387f9dfdSAndroid Build Coastguard Worker        3: "complete",
53*387f9dfdSAndroid Build Coastguard Worker    }
54*387f9dfdSAndroid Build Coastguard Worker
55*387f9dfdSAndroid Build Coastguard Workeror (kernel 4.7 and above)
56*387f9dfdSAndroid Build Coastguard Worker
57*387f9dfdSAndroid Build Coastguard Worker    compact_status = {
58*387f9dfdSAndroid Build Coastguard Worker        # COMPACT_NOT_SUITABLE_ZONE: For more detailed tracepoint output - internal to compaction
59*387f9dfdSAndroid Build Coastguard Worker        0: "not_suitable_zone",
60*387f9dfdSAndroid Build Coastguard Worker        # COMPACT_SKIPPED: compaction didn't start as it was not possible or direct reclaim was more suitable
61*387f9dfdSAndroid Build Coastguard Worker        1: "skipped",
62*387f9dfdSAndroid Build Coastguard Worker        # COMPACT_DEFERRED: compaction didn't start as it was deferred due to past failures
63*387f9dfdSAndroid Build Coastguard Worker        2: "deferred",
64*387f9dfdSAndroid Build Coastguard Worker        # COMPACT_NOT_SUITABLE_PAGE: For more detailed tracepoint output - internal to compaction
65*387f9dfdSAndroid Build Coastguard Worker        3: "no_suitable_page",
66*387f9dfdSAndroid Build Coastguard Worker        # COMPACT_CONTINUE: compaction should continue to another pageblock
67*387f9dfdSAndroid Build Coastguard Worker        4: "continue",
68*387f9dfdSAndroid Build Coastguard Worker        # COMPACT_COMPLETE: The full zone was compacted scanned but wasn't successful to compact suitable pages.
69*387f9dfdSAndroid Build Coastguard Worker        5: "complete",
70*387f9dfdSAndroid Build Coastguard Worker        # COMPACT_PARTIAL_SKIPPED: direct compaction has scanned part of the zone but wasn't successful to compact suitable pages.
71*387f9dfdSAndroid Build Coastguard Worker        6: "partial_skipped",
72*387f9dfdSAndroid Build Coastguard Worker        # COMPACT_CONTENDED: compaction terminated prematurely due to lock contentions
73*387f9dfdSAndroid Build Coastguard Worker        7: "contended",
74*387f9dfdSAndroid Build Coastguard Worker        # COMPACT_SUCCESS: direct compaction terminated after concluding that the allocation should now succeed
75*387f9dfdSAndroid Build Coastguard Worker        8: "success",
76*387f9dfdSAndroid Build Coastguard Worker    }
77*387f9dfdSAndroid Build Coastguard Worker
78*387f9dfdSAndroid Build Coastguard WorkerThe -p option can be used to filter on a PID, which is filtered in-kernel. Here
79*387f9dfdSAndroid Build Coastguard WorkerI've used it with -T to print timestamps:
80*387f9dfdSAndroid Build Coastguard Worker
81*387f9dfdSAndroid Build Coastguard Worker# ./compactsnoop -Tp 24376
82*387f9dfdSAndroid Build Coastguard WorkerTIME(s)         COMM           PID    NODE ZONE         ORDER MODE      LAT(ms)           STATUS
83*387f9dfdSAndroid Build Coastguard Worker101.364115000   zsh            24376  0    ZONE_DMA     -1    SYNC        0.025         complete
84*387f9dfdSAndroid Build Coastguard Worker101.364555000   zsh            24376  0    ZONE_DMA32   -1    SYNC        3.925         complete
85*387f9dfdSAndroid Build Coastguard Worker^C
86*387f9dfdSAndroid Build Coastguard Worker
87*387f9dfdSAndroid Build Coastguard WorkerThis shows the zsh process allocs pages, and compact zone events happening,
88*387f9dfdSAndroid Build Coastguard Workerand the delays are not affected much.
89*387f9dfdSAndroid Build Coastguard Worker
90*387f9dfdSAndroid Build Coastguard WorkerA maximum tracing duration can be set with the -d option. For example, to trace
91*387f9dfdSAndroid Build Coastguard Workerfor 2 seconds:
92*387f9dfdSAndroid Build Coastguard Worker
93*387f9dfdSAndroid Build Coastguard Worker# ./compactsnoop -d 2
94*387f9dfdSAndroid Build Coastguard WorkerCOMM           PID    NODE ZONE         ORDER MODE       LAT(ms)           STATUS
95*387f9dfdSAndroid Build Coastguard Workerzsh            26385  0    ZONE_DMA     -1    SYNC      0.025444         complete
96*387f9dfdSAndroid Build Coastguard Worker^C
97*387f9dfdSAndroid Build Coastguard Worker
98*387f9dfdSAndroid Build Coastguard WorkerThe -e option prints out extra columns
99*387f9dfdSAndroid Build Coastguard Worker
100*387f9dfdSAndroid Build Coastguard Worker# ./compactsnoop -e
101*387f9dfdSAndroid Build Coastguard WorkerCOMM           PID    NODE ZONE         ORDER MODE    FRAGIDX  MIN      LOW      HIGH     FREE       LAT(ms)           STATUS
102*387f9dfdSAndroid Build Coastguard Workersumm           28276  1    ZONE_NORMAL  3     ASYNC   0.728    11284    14105    16926    14193         3.58          partial
103*387f9dfdSAndroid Build Coastguard Workersumm           28276  0    ZONE_NORMAL  2     ASYNC   -1.000   11043    13803    16564    14479          0.0         complete
104*387f9dfdSAndroid Build Coastguard Workersumm           28276  1    ZONE_NORMAL  2     ASYNC   -1.000   11284    14105    16926    14785        0.019         complete
105*387f9dfdSAndroid Build Coastguard Workersumm           28276  0    ZONE_NORMAL  2     ASYNC   -1.000   11043    13803    16564    15199        0.006          partial
106*387f9dfdSAndroid Build Coastguard Workersumm           28276  1    ZONE_NORMAL  2     ASYNC   -1.000   11284    14105    16926    17360        0.030         complete
107*387f9dfdSAndroid Build Coastguard Workersumm           28276  0    ZONE_NORMAL  2     ASYNC   -1.000   11043    13803    16564    15443        0.024         complete
108*387f9dfdSAndroid Build Coastguard Workersumm           28276  1    ZONE_NORMAL  2     ASYNC   -1.000   11284    14105    16926    15634        0.018         complete
109*387f9dfdSAndroid Build Coastguard Workersumm           28276  1    ZONE_NORMAL  3     ASYNC   0.832    11284    14105    16926    15301        0.006          partial
110*387f9dfdSAndroid Build Coastguard Workersumm           28276  0    ZONE_NORMAL  2     ASYNC   -1.000   11043    13803    16564    14774        0.005          partial
111*387f9dfdSAndroid Build Coastguard Workersumm           28276  1    ZONE_NORMAL  3     ASYNC   0.733    11284    14105    16926    19888        0.012          partial
112*387f9dfdSAndroid Build Coastguard Worker^C
113*387f9dfdSAndroid Build Coastguard Worker
114*387f9dfdSAndroid Build Coastguard WorkerThe FRAGIDX is short for fragmentation index, which only makes sense if an
115*387f9dfdSAndroid Build Coastguard Workerallocation of a requested size would fail. If that is true, the fragmentation
116*387f9dfdSAndroid Build Coastguard Workerindex indicates whether external fragmentation or a lack of memory was the
117*387f9dfdSAndroid Build Coastguard Workerproblem. The value can be used to determine if page reclaim or compaction
118*387f9dfdSAndroid Build Coastguard Workershould be used.
119*387f9dfdSAndroid Build Coastguard Worker
120*387f9dfdSAndroid Build Coastguard WorkerIndex is between 0 and 1 so return within 3 decimal places
121*387f9dfdSAndroid Build Coastguard Worker
122*387f9dfdSAndroid Build Coastguard Worker0 => allocation would fail due to lack of memory
123*387f9dfdSAndroid Build Coastguard Worker1 => allocation would fail due to fragmentation
124*387f9dfdSAndroid Build Coastguard Worker
125*387f9dfdSAndroid Build Coastguard WorkerWe can see the whole buddy's fragmentation index from /sys/kernel/debug/extfrag/extfrag_index
126*387f9dfdSAndroid Build Coastguard Worker
127*387f9dfdSAndroid Build Coastguard WorkerThe MIN/LOW/HIGH shows the watermarks of the zone, which can also get from
128*387f9dfdSAndroid Build Coastguard Worker/proc/zoneinfo, and FREE means nr_free_pages (can be found in /proc/zoneinfo too).
129*387f9dfdSAndroid Build Coastguard Worker
130*387f9dfdSAndroid Build Coastguard Worker
131*387f9dfdSAndroid Build Coastguard WorkerThe -K option prints out kernel stack
132*387f9dfdSAndroid Build Coastguard Worker
133*387f9dfdSAndroid Build Coastguard Worker# ./compactsnoop -K -e
134*387f9dfdSAndroid Build Coastguard Worker
135*387f9dfdSAndroid Build Coastguard Workersumm           28276  0    ZONE_NORMAL  3     ASYNC   0.528    11043    13803    16564    22654       13.258          partial
136*387f9dfdSAndroid Build Coastguard Worker               kretprobe_trampoline+0x0
137*387f9dfdSAndroid Build Coastguard Worker               try_to_compact_pages+0x121
138*387f9dfdSAndroid Build Coastguard Worker               __alloc_pages_direct_compact+0xac
139*387f9dfdSAndroid Build Coastguard Worker               __alloc_pages_slowpath+0x3e9
140*387f9dfdSAndroid Build Coastguard Worker               __alloc_pages_nodemask+0x404
141*387f9dfdSAndroid Build Coastguard Worker               alloc_pages_current+0x98
142*387f9dfdSAndroid Build Coastguard Worker               new_slab+0x2c5
143*387f9dfdSAndroid Build Coastguard Worker               ___slab_alloc+0x3ac
144*387f9dfdSAndroid Build Coastguard Worker               __slab_alloc+0x40
145*387f9dfdSAndroid Build Coastguard Worker               kmem_cache_alloc_node+0x8b
146*387f9dfdSAndroid Build Coastguard Worker               copy_process+0x18e
147*387f9dfdSAndroid Build Coastguard Worker               do_fork+0x91
148*387f9dfdSAndroid Build Coastguard Worker               sys_clone+0x16
149*387f9dfdSAndroid Build Coastguard Worker               stub_clone+0x44
150*387f9dfdSAndroid Build Coastguard Worker
151*387f9dfdSAndroid Build Coastguard Workersumm           28276  1    ZONE_NORMAL  3     ASYNC   -1.000   11284    14105    16926    22074        0.008          partial
152*387f9dfdSAndroid Build Coastguard Worker               kretprobe_trampoline+0x0
153*387f9dfdSAndroid Build Coastguard Worker               try_to_compact_pages+0x121
154*387f9dfdSAndroid Build Coastguard Worker               __alloc_pages_direct_compact+0xac
155*387f9dfdSAndroid Build Coastguard Worker               __alloc_pages_slowpath+0x3e9
156*387f9dfdSAndroid Build Coastguard Worker               __alloc_pages_nodemask+0x404
157*387f9dfdSAndroid Build Coastguard Worker               alloc_pages_current+0x98
158*387f9dfdSAndroid Build Coastguard Worker               new_slab+0x2c5
159*387f9dfdSAndroid Build Coastguard Worker               ___slab_alloc+0x3ac
160*387f9dfdSAndroid Build Coastguard Worker               __slab_alloc+0x40
161*387f9dfdSAndroid Build Coastguard Worker               kmem_cache_alloc_node+0x8b
162*387f9dfdSAndroid Build Coastguard Worker               copy_process+0x18e
163*387f9dfdSAndroid Build Coastguard Worker               do_fork+0x91
164*387f9dfdSAndroid Build Coastguard Worker               sys_clone+0x16
165*387f9dfdSAndroid Build Coastguard Worker               stub_clone+0x44
166*387f9dfdSAndroid Build Coastguard Worker
167*387f9dfdSAndroid Build Coastguard Workersumm           28276  0    ZONE_NORMAL  3     ASYNC   0.527    11043    13803    16564    25653        9.812          partial
168*387f9dfdSAndroid Build Coastguard Worker               kretprobe_trampoline+0x0
169*387f9dfdSAndroid Build Coastguard Worker               try_to_compact_pages+0x121
170*387f9dfdSAndroid Build Coastguard Worker               __alloc_pages_direct_compact+0xac
171*387f9dfdSAndroid Build Coastguard Worker               __alloc_pages_slowpath+0x3e9
172*387f9dfdSAndroid Build Coastguard Worker               __alloc_pages_nodemask+0x404
173*387f9dfdSAndroid Build Coastguard Worker               alloc_pages_current+0x98
174*387f9dfdSAndroid Build Coastguard Worker               new_slab+0x2c5
175*387f9dfdSAndroid Build Coastguard Worker               ___slab_alloc+0x3ac
176*387f9dfdSAndroid Build Coastguard Worker               __slab_alloc+0x40
177*387f9dfdSAndroid Build Coastguard Worker               kmem_cache_alloc_node+0x8b
178*387f9dfdSAndroid Build Coastguard Worker               copy_process+0x18e
179*387f9dfdSAndroid Build Coastguard Worker               do_fork+0x91
180*387f9dfdSAndroid Build Coastguard Worker               sys_clone+0x16
181*387f9dfdSAndroid Build Coastguard Worker               stub_clone+0x44
182*387f9dfdSAndroid Build Coastguard Worker
183*387f9dfdSAndroid Build Coastguard Worker# ./compactsnoop -h
184*387f9dfdSAndroid Build Coastguard Workerusage: compactsnoop.py [-h] [-T] [-p PID] [-d DURATION] [-K] [-e]
185*387f9dfdSAndroid Build Coastguard Worker
186*387f9dfdSAndroid Build Coastguard WorkerTrace compact zone
187*387f9dfdSAndroid Build Coastguard Worker
188*387f9dfdSAndroid Build Coastguard Workeroptional arguments:
189*387f9dfdSAndroid Build Coastguard Worker  -h, --help            show this help message and exit
190*387f9dfdSAndroid Build Coastguard Worker  -T, --timestamp       include timestamp on output
191*387f9dfdSAndroid Build Coastguard Worker  -p PID, --pid PID     trace this PID only
192*387f9dfdSAndroid Build Coastguard Worker  -d DURATION, --duration DURATION
193*387f9dfdSAndroid Build Coastguard Worker                        total duration of trace in seconds
194*387f9dfdSAndroid Build Coastguard Worker  -K, --kernel-stack    output kernel stack trace
195*387f9dfdSAndroid Build Coastguard Worker  -e, --extended_fields
196*387f9dfdSAndroid Build Coastguard Worker                        show system memory state
197*387f9dfdSAndroid Build Coastguard Worker
198*387f9dfdSAndroid Build Coastguard Workerexamples:
199*387f9dfdSAndroid Build Coastguard Worker    ./compactsnoop          # trace all compact stall
200*387f9dfdSAndroid Build Coastguard Worker    ./compactsnoop -T       # include timestamps
201*387f9dfdSAndroid Build Coastguard Worker    ./compactsnoop -d 10    # trace for 10 seconds only
202*387f9dfdSAndroid Build Coastguard Worker    ./compactsnoop -K       # output kernel stack trace
203*387f9dfdSAndroid Build Coastguard Worker    ./compactsnoop -e       # show extended fields
204