bcc-compactsnoop - Man Page

Trace compact zone events. Uses Linux eBPF/bcc.

Synopsis

compactsnoop [-h] [-T] [-p PID] [-d DURATION] [-K] [-e]

Description

compactsnoop traces the compact zone events, showing which processes are allocing pages with memory compaction. This can be useful for discovering when compact_stall (/proc/vmstat) continues to increase, whether it is caused by some critical processes or not.

This works by tracing the compact zone events using raw_tracepoints and one kretprobe.

For the Centos 7.6 (3.10.x kernel), see the version under tools/old, which  uses an older memory compaction mechanism.

Since this uses BPF, only the root user can use this tool.

Requirements

CONFIG_BPF and bcc.

Options

-h

Print usage message.

-T

Include a timestamp column.

-p PID

Trace this process ID only (filtered in-kernel).

-d DURATION

Total duration of trace in seconds.

-K

Output kernel stack trace

-e

Show extended fields.

Examples

Trace all compact zone events:

# compactsnoop

Trace all compact zone events, for 10 seconds only:

# compactsnoop -d 10

Fields

TIME(s)

Time of the call, in seconds.

COMM

Process name

PID

Process ID

NODE

Memory node

ZONE

Zone of the node (such as DMA, DMA32, NORMAL eg)

ORDER

Shows which order alloc cause memory compaction, -1 means all orders (eg: write to /proc/sys/vm/compact_memory)

MODE

SYNC OR ASYNC

FRAGIDX (extra column)

The FRAGIDX is short for fragmentation index, which only makes sense if an allocation of a requested size would fail. If that is true, the fragmentation index indicates whether external fragmentation or a lack of memory was the problem. The value can be used to determine if page reclaim or compaction should be used.

Index is between 0 and 1 so return within 3 decimal places

0 => allocation would fail due to lack of memory

1 => allocation would fail due to fragmentation

MIN (extra column)

The min watermark of the zone

LOW (extra column)

The low watermark of the zone

HIGH (extra column)

The high watermark of the zone

FREE (extra column)

The nr_free_pages of the zone

LAT(ms)

compact zone's latency

STATUS

The compaction's result.

For (CentOS 7.6's kernel), the status include:

"skipped" (COMPACT_SKIPPED): compaction didn't start as it was not possible or  direct reclaim was more suitable

"continue" (COMPACT_CONTINUE): compaction should continue to another pageblock

"partial" (COMPACT_PARTIAL): direct compaction partially compacted a zone and  there are suitable pages

"complete" (COMPACT_COMPLETE): The full zone was compacted

For (kernel 4.7 and above):

"not_suitable_zone" (COMPACT_NOT_SUITABLE_ZONE): For more detailed tracepoint  output - internal to compaction

"skipped" (COMPACT_SKIPPED): compaction didn't start as it was not possible or  direct reclaim was more suitable

"deferred" (COMPACT_DEFERRED): compaction didn't start as it was deferred due  to past failures

"no_suitable_page" (COMPACT_NOT_SUITABLE_PAGE): For more detailed tracepoint  output - internal to compaction

"continue" (COMPACT_CONTINUE): compaction should continue to another pageblock

"complete" (COMPACT_COMPLETE): The full zone was compacted scanned but wasn't successful to compact suitable pages.

"partial_skipped" (COMPACT_PARTIAL_SKIPPED): direct compaction has scanned part of the zone but wasn't successful to compact suitable pages.

"contended" (COMPACT_CONTENDED): compaction terminated prematurely due to lock contentions

"success" (COMPACT_SUCCESS): direct compaction terminated after concluding that  the allocation should now succeed

Overhead

This traces the kernel compact zone kprobe/kretprobe or raw_tracepoints and prints output for each event. As the rate of this is generally expected to be low (< 1000/s), the overhead is also expected to be negligible.

Source

This is from bcc.

https://github.com/iovisor/bcc

Also look in the bcc distribution for a companion _examples.txt file containing example usage, output, and commentary for this tool.

OS

Linux

Stability

Unstable - in development.

Author

Wenbo Zhang

Info

2019-11-1 USER COMMANDS