buddyinfo - file /proc/buddyinfo

This parsers the contents of /proc/buddyinfo.

Here is from the mannual page of /proc/buddyinfo:

/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.

If the memory is heavily fragmented, the counters for higher order chunks will be zero and allocation of large contiguous areas will fail.

This parser will only store the counter of memory fragmentation. To get the real size of each column, use PAGE_SIZE from parser class:GetconfPageSize for calculation.

For each line in /proc/buddyinfo, it will be parsed and stored in a dict with the following properties:

  • node (str) - the Node ID, eg. “0”

  • zone (str) - the zone name, eg. “Normal”

  • counter (list) - the chuck numbers in order

  • raw (str) - the raw line

Sample data:

Node 0, zone      DMA      0      0      0      0      0      0      0      0      1      1      2
Node 0, zone    DMA32      8     10     12      9      9     11     10     12     12     11    569
Node 0, zone   Normal    460    485    375   1611   3201   2187   1437    844    487    247   6120
Node 1, zone   Normal      1      7   1783   2063   1773   3227   2299   1399    729    430   6723

Examples

>>> len(buddy)
4
>>> mem = buddy[2]
>>> mem['node']
'0'
>>> mem['zone']
'Normal'
>>> mem['counter']
[460, 485, 375, 1611, 3201, 2187, 1437, 844, 487, 247, 6120]
>>> mem['counter'][0]   # (2^0) * PAGE_SIZE (order 0)
460
>>> mem['counter'][10]  # (2^10) * PAGE_SIZE (order 10)
6120
>>> mem['raw']
'Node 0, zone   Normal    460    485    375   1611   3201   2187   1437    844    487    247   6120'
class insights.parsers.buddyinfo.BuddyInfo(context)[source]

Bases: Parser, list

Prase the contents of /proc/buddyinfo.

parse_content(content)[source]

This method must be implemented by classes based on this class.