Move GFP flags to class KernelConfig
This commit is contained in:
parent
2d55b800dc
commit
b2b5a1b1db
112
OOMAnalyser.py
112
OOMAnalyser.py
@ -80,6 +80,61 @@ def show_notifybox(prefix, msg):
|
|||||||
class KernelConfig(object):
|
class KernelConfig(object):
|
||||||
"""Kernel configuration"""
|
"""Kernel configuration"""
|
||||||
|
|
||||||
|
GFP_FLAGS = {
|
||||||
|
'GFP_ATOMIC': {'value': '__GFP_HIGH | __GFP_ATOMIC | __GFP_KSWAPD_RECLAIM'},
|
||||||
|
'GFP_KERNEL': {'value': '__GFP_RECLAIM | __GFP_IO | __GFP_FS'},
|
||||||
|
'GFP_KERNEL_ACCOUNT': {'value': 'GFP_KERNEL | __GFP_ACCOUNT'},
|
||||||
|
'GFP_NOWAIT': {'value': '__GFP_KSWAPD_RECLAIM'},
|
||||||
|
'GFP_NOIO': {'value': '__GFP_RECLAIM'},
|
||||||
|
'GFP_NOFS': {'value': '__GFP_RECLAIM | __GFP_IO'},
|
||||||
|
'GFP_USER': {'value': '__GFP_RECLAIM | __GFP_IO | __GFP_FS | __GFP_HARDWALL'},
|
||||||
|
'GFP_DMA': {'value': '__GFP_DMA'},
|
||||||
|
'GFP_DMA32': {'value': '__GFP_DMA32'},
|
||||||
|
'GFP_HIGHUSER': {'value': 'GFP_USER | __GFP_HIGHMEM'},
|
||||||
|
'GFP_HIGHUSER_MOVABLE': {'value': 'GFP_HIGHUSER | __GFP_MOVABLE'},
|
||||||
|
'GFP_TRANSHUGE_LIGHT': {'value': 'GFP_HIGHUSER_MOVABLE | __GFP_COMP | __GFP_NOMEMALLOC | __GFP_NOWARN & ~__GFP_RECLAIM'},
|
||||||
|
'GFP_TRANSHUGE': {'value': 'GFP_TRANSHUGE_LIGHT | __GFP_DIRECT_RECLAIM'},
|
||||||
|
'__GFP_DMA': {'value': 0x01},
|
||||||
|
'__GFP_HIGHMEM': {'value': 0x02},
|
||||||
|
'__GFP_DMA32': {'value': 0x04},
|
||||||
|
'__GFP_MOVABLE': {'value': 0x08},
|
||||||
|
'__GFP_RECLAIMABLE': {'value': 0x10},
|
||||||
|
'__GFP_HIGH': {'value': 0x20},
|
||||||
|
'__GFP_IO': {'value': 0x40},
|
||||||
|
'__GFP_FS': {'value': 0x80},
|
||||||
|
'__GFP_COLD': {'value': 0x100},
|
||||||
|
'__GFP_NOWARN': {'value': 0x200},
|
||||||
|
'__GFP_RETRY_MAYFAIL': {'value': 0x400},
|
||||||
|
'__GFP_NOFAIL': {'value': 0x800},
|
||||||
|
'__GFP_NORETRY': {'value': 0x1000},
|
||||||
|
'__GFP_MEMALLOC': {'value': 0x2000},
|
||||||
|
'__GFP_COMP': {'value': 0x4000},
|
||||||
|
'__GFP_ZERO': {'value': 0x8000},
|
||||||
|
'__GFP_NOMEMALLOC': {'value': 0x10000},
|
||||||
|
'__GFP_HARDWALL': {'value': 0x20000},
|
||||||
|
'__GFP_THISNODE': {'value': 0x40000},
|
||||||
|
'__GFP_ATOMIC': {'value': 0x80000},
|
||||||
|
'__GFP_ACCOUNT': {'value': 0x100000},
|
||||||
|
'__GFP_DIRECT_RECLAIM': {'value': 0x400000},
|
||||||
|
'__GFP_WRITE': {'value': 0x800000},
|
||||||
|
'__GFP_KSWAPD_RECLAIM': {'value': 0x1000000},
|
||||||
|
'__GFP_NOLOCKDEP': {'value': 0x2000000},
|
||||||
|
'__GFP_RECLAIM': {'value': '__GFP_DIRECT_RECLAIM|__GFP_KSWAPD_RECLAIM'},
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
Definition of GFP flags
|
||||||
|
|
||||||
|
The decimal value of a flag will be calculated by evaluating the entries from left to right. Grouping by
|
||||||
|
parentheses is not supported.
|
||||||
|
|
||||||
|
Source: include/linux/gpf.h
|
||||||
|
|
||||||
|
@note : This list os probably a mixture of different kernel versions - be carefully
|
||||||
|
|
||||||
|
@todo: Implement kernel specific versions because this flags are not constant
|
||||||
|
(see https://github.com/torvalds/linux/commit/e67d4ca79aaf9d13a00d229b1b1c96b86828e8ba#diff-020720d0699e3ae1afb6fcd815ca8500)
|
||||||
|
"""
|
||||||
|
|
||||||
ps_table_items = ['pid', 'uid', 'tgid', 'total_vm_pages', 'rss_pages', 'nr_ptes_pages', 'swapents_pages',
|
ps_table_items = ['pid', 'uid', 'tgid', 'total_vm_pages', 'rss_pages', 'nr_ptes_pages', 'swapents_pages',
|
||||||
'oom_score_adj']
|
'oom_score_adj']
|
||||||
"""Elements of the process table"""
|
"""Elements of the process table"""
|
||||||
@ -381,61 +436,6 @@ class OOMAnalyser(object):
|
|||||||
oom_entity = None
|
oom_entity = None
|
||||||
"""Reference to the OOMEntity object"""
|
"""Reference to the OOMEntity object"""
|
||||||
|
|
||||||
GFP_FLAGS = {
|
|
||||||
'GFP_ATOMIC': {'value': '__GFP_HIGH | __GFP_ATOMIC | __GFP_KSWAPD_RECLAIM'},
|
|
||||||
'GFP_KERNEL': {'value': '__GFP_RECLAIM | __GFP_IO | __GFP_FS'},
|
|
||||||
'GFP_KERNEL_ACCOUNT': {'value': 'GFP_KERNEL | __GFP_ACCOUNT'},
|
|
||||||
'GFP_NOWAIT': {'value': '__GFP_KSWAPD_RECLAIM'},
|
|
||||||
'GFP_NOIO': {'value': '__GFP_RECLAIM'},
|
|
||||||
'GFP_NOFS': {'value': '__GFP_RECLAIM | __GFP_IO'},
|
|
||||||
'GFP_USER': {'value': '__GFP_RECLAIM | __GFP_IO | __GFP_FS | __GFP_HARDWALL'},
|
|
||||||
'GFP_DMA': {'value': '__GFP_DMA'},
|
|
||||||
'GFP_DMA32': {'value': '__GFP_DMA32'},
|
|
||||||
'GFP_HIGHUSER': {'value': 'GFP_USER | __GFP_HIGHMEM'},
|
|
||||||
'GFP_HIGHUSER_MOVABLE': {'value': 'GFP_HIGHUSER | __GFP_MOVABLE'},
|
|
||||||
'GFP_TRANSHUGE_LIGHT': {'value': 'GFP_HIGHUSER_MOVABLE | __GFP_COMP | __GFP_NOMEMALLOC | __GFP_NOWARN & ~__GFP_RECLAIM'},
|
|
||||||
'GFP_TRANSHUGE': {'value': 'GFP_TRANSHUGE_LIGHT | __GFP_DIRECT_RECLAIM'},
|
|
||||||
'__GFP_DMA': {'value': 0x01},
|
|
||||||
'__GFP_HIGHMEM': {'value': 0x02},
|
|
||||||
'__GFP_DMA32': {'value': 0x04},
|
|
||||||
'__GFP_MOVABLE': {'value': 0x08},
|
|
||||||
'__GFP_RECLAIMABLE': {'value': 0x10},
|
|
||||||
'__GFP_HIGH': {'value': 0x20},
|
|
||||||
'__GFP_IO': {'value': 0x40},
|
|
||||||
'__GFP_FS': {'value': 0x80},
|
|
||||||
'__GFP_COLD': {'value': 0x100},
|
|
||||||
'__GFP_NOWARN': {'value': 0x200},
|
|
||||||
'__GFP_RETRY_MAYFAIL': {'value': 0x400},
|
|
||||||
'__GFP_NOFAIL': {'value': 0x800},
|
|
||||||
'__GFP_NORETRY': {'value': 0x1000},
|
|
||||||
'__GFP_MEMALLOC': {'value': 0x2000},
|
|
||||||
'__GFP_COMP': {'value': 0x4000},
|
|
||||||
'__GFP_ZERO': {'value': 0x8000},
|
|
||||||
'__GFP_NOMEMALLOC': {'value': 0x10000},
|
|
||||||
'__GFP_HARDWALL': {'value': 0x20000},
|
|
||||||
'__GFP_THISNODE': {'value': 0x40000},
|
|
||||||
'__GFP_ATOMIC': {'value': 0x80000},
|
|
||||||
'__GFP_ACCOUNT': {'value': 0x100000},
|
|
||||||
'__GFP_DIRECT_RECLAIM': {'value': 0x400000},
|
|
||||||
'__GFP_WRITE': {'value': 0x800000},
|
|
||||||
'__GFP_KSWAPD_RECLAIM': {'value': 0x1000000},
|
|
||||||
'__GFP_NOLOCKDEP': {'value': 0x2000000},
|
|
||||||
'__GFP_RECLAIM': {'value': '__GFP_DIRECT_RECLAIM|__GFP_KSWAPD_RECLAIM'},
|
|
||||||
}
|
|
||||||
"""
|
|
||||||
Definition of GFP flags
|
|
||||||
|
|
||||||
The decimal value of a flag will be calculated by evaluating the entries from left to right. Grouping by
|
|
||||||
parentheses is not supported.
|
|
||||||
|
|
||||||
Source: include/linux/gpf.h
|
|
||||||
|
|
||||||
@note : This list os probably a mixture of different kernel versions - be carefully
|
|
||||||
|
|
||||||
@todo: Implement kernel specific versions because this flags are not constant
|
|
||||||
(see https://github.com/torvalds/linux/commit/e67d4ca79aaf9d13a00d229b1b1c96b86828e8ba#diff-020720d0699e3ae1afb6fcd815ca8500)
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, oom):
|
def __init__(self, oom):
|
||||||
self.results = {}
|
self.results = {}
|
||||||
self.oom_entity = oom
|
self.oom_entity = oom
|
||||||
@ -647,7 +647,7 @@ class OOMAnalyser(object):
|
|||||||
flags = self.results['trigger_proc_gfp_flags']
|
flags = self.results['trigger_proc_gfp_flags']
|
||||||
del self.results['trigger_proc_gfp_flags']
|
del self.results['trigger_proc_gfp_flags']
|
||||||
else:
|
else:
|
||||||
flags, unknown = self._hex2flags(self.results['trigger_proc_gfp_mask'], self.GFP_FLAGS)
|
flags, unknown = self._hex2flags(self.results['trigger_proc_gfp_mask'], self.kernel_cfg.GFP_FLAGS)
|
||||||
if unknown:
|
if unknown:
|
||||||
# TODO Missing format specifier {0:x} in Transcrypt?
|
# TODO Missing format specifier {0:x} in Transcrypt?
|
||||||
flags.append('0x{}'.format(unknown.toString(16)))
|
flags.append('0x{}'.format(unknown.toString(16)))
|
||||||
|
Loading…
Reference in New Issue
Block a user