/proc/buddyinfo - memory fragmentation
- /proc/buddyinfo
- This file contains information which is used for diagnosing memory
fragmentation issues. Each line starts with the identification of the node
and the name of the zone which together identify a memory region. This is
then followed by the count of available chunks of a certain order in which
these zones are split. The size in bytes of a certain order is given by
the formula:
-
(2^order) * PAGE_SIZE
- The binary buddy allocator algorithm inside the kernel will split one
chunk into two chunks of a smaller order (thus with half the size) or
combine two contiguous chunks into one larger chunk of a higher order
(thus with double the size) to satisfy allocation requests and to counter
memory fragmentation. The order matches the column number, when starting
to count at zero.
- For example on an x86-64 system:
Node 0, zone DMA 1 1 1 0 2 1 1 0 1 1 3
Node 0, zone DMA32 65 47 4 81 52 28 13 10 5 1 404
Node 0, zone Normal 216 55 189 101 84 38 37 27 5 3 587
- In this example, there is one node containing three zones and there are 11
different chunk sizes. If the page size is 4 kilobytes, then the first
zone called DMA (on x86 the first 16 megabyte of memory) has 1
chunk of 4 kilobytes (order 0) available and has 3 chunks of 4 megabytes
(order 10) available.
- If the memory is heavily fragmented, the counters for higher order chunks
will be zero and allocation of large contiguous areas will fail.
- Further information about the zones can be found in
/proc/zoneinfo.