refactored and documented showmem into expe000
This commit is contained in:
parent
6d7d5b9586
commit
b6af10d3a4
|
@ -0,0 +1,15 @@
|
||||||
|
This experimentation explores how meminfo's MemAvailable is computed, via an attempt to replicate code used in linux ([file://../../reference/show_mem.c])
|
||||||
|
|
||||||
|
|
||||||
|
```sh
|
||||||
|
20240813-16:48:45 graffy@graffy-ws2:~/work/linuxram.git$ ./src/memavail.py
|
||||||
|
{'MemTotal': 201214205952, 'MemFree': 803061760, 'MemAvailable': 131466833920, 'Buffers': 31981568, 'Cached': 130939863040, 'SwapCached': 1088724992, 'Active': 103304773632, 'Inactive': 94177337344, 'Active(anon)': 39671312384, 'Inactive(anon)': 26918952960, 'Active(file)': 63633461248, 'Inactive(file)': 67258384384, 'Unevictable': 23019520, 'Mlocked': 19873792, 'SwapTotal': 32765898752, 'SwapFree': 0, 'Zswap': 0, 'Zswapped': 0, 'Dirty': 8546779136, 'Writeback': 5550080, 'AnonPages': 65442127872, 'Mapped': 120565760, 'Shmem': 69955584, 'KReclaimable': 1252827136, 'Slab': 1991671808, 'SReclaimable': 1252827136, 'SUnreclaim': 738844672, 'KernelStack': 17088512, 'PageTables': 218902528, 'SecPageTables': 0, 'NFS_Unstable': 0, 'Bounce': 0, 'WritebackTmp': 0, 'CommitLimit': 133373001728, 'Committed_AS': 141631254528, 'VmallocTotal': 35184372087808, 'VmallocUsed': 302333952, 'VmallocChunk': 0, 'Percpu': 215089152, 'HardwareCorrupted': 53248, 'AnonHugePages': 49218060288, 'ShmemHugePages': 0, 'ShmemPmdMapped': 0, 'FileHugePages': 0, 'FilePmdMapped': 0, 'Hugepagesize': 2097152, 'Hugetlb': 0, 'DirectMap4k': 554131456, 'DirectMap2M': 6434062336, 'DirectMap1G': 199715979264}
|
||||||
|
0: {'DMA': 4, 'DMA32': 529, 'Normal': 34991, 'Movable': 0, 'Device': 0}1: {'DMA': 0, 'DMA32': 0, 'Normal': 36110, 'Movable': 0, 'Device': 0}2: {}
|
||||||
|
free memory : 784240.0 KiB
|
||||||
|
cache memory : 127537532.0 KiB
|
||||||
|
reclaimable memory : 2160392.0 KiB
|
||||||
|
meminfo's MemAvailable : 128385580.0 KiB
|
||||||
|
computed available memory : 128691460.0 KiB
|
||||||
|
computed - meminfo = 305880.0 KiB (76470.0 pages)
|
||||||
|
last command status : [0]
|
||||||
|
```
|
|
@ -5,4 +5,4 @@ from .linuxmem import read_meminfo_stdout # noqa
|
||||||
from .linuxmem import meminfo_diff # noqa
|
from .linuxmem import meminfo_diff # noqa
|
||||||
from .linuxmem import find_diff # noqa
|
from .linuxmem import find_diff # noqa
|
||||||
from .linuxmem import get_stabilized_meminfo # noqa
|
from .linuxmem import get_stabilized_meminfo # noqa
|
||||||
|
from .linuxmem import compute_mem_avail # noqa
|
||||||
|
|
|
@ -4,7 +4,6 @@ import re
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import subprocess
|
import subprocess
|
||||||
import time
|
import time
|
||||||
# code to userstand how meminfo's MemAvailable is computed
|
|
||||||
|
|
||||||
MeminfoVarId = str
|
MeminfoVarId = str
|
||||||
MemUnit = int # in bytes
|
MemUnit = int # in bytes
|
||||||
|
@ -224,7 +223,8 @@ def estimate_mem_available(meminfo_data: Dict[MeminfoVarId, MemUnit], zoneinfo_d
|
||||||
return num_available_pages * page_size
|
return num_available_pages * page_size
|
||||||
|
|
||||||
|
|
||||||
def show_memory_state(meminfo_stdout_file_path: Path, grepped_zoneinfo_file_path: Path):
|
def compute_mem_avail(meminfo_stdout_file_path: Path, grepped_zoneinfo_file_path: Path):
|
||||||
|
# code to userstand how meminfo's MemAvailable is computed
|
||||||
meminfo_data = read_meminfo_stdout(meminfo_stdout_file_path)
|
meminfo_data = read_meminfo_stdout(meminfo_stdout_file_path)
|
||||||
print(meminfo_data)
|
print(meminfo_data)
|
||||||
|
|
||||||
|
@ -235,20 +235,3 @@ def show_memory_state(meminfo_stdout_file_path: Path, grepped_zoneinfo_file_path
|
||||||
|
|
||||||
assert meminfo_data['Active'] == (meminfo_data['Active(file)'] + meminfo_data['Active(anon)'])
|
assert meminfo_data['Active'] == (meminfo_data['Active(file)'] + meminfo_data['Active(anon)'])
|
||||||
assert meminfo_data['Inactive'] == (meminfo_data['Inactive(file)'] + meminfo_data['Inactive(anon)'])
|
assert meminfo_data['Inactive'] == (meminfo_data['Inactive(file)'] + meminfo_data['Inactive(anon)'])
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
|
|
||||||
set_id = 'stressed_alambix97'
|
|
||||||
# set_id = 'validation_alambix98'
|
|
||||||
if set_id == 'stressed_alambix97':
|
|
||||||
meminfo_stdout_file_path = Path('/home/graffy/work/tickets/bug3897/alambix97/20240805-191606-meminfo.stdout')
|
|
||||||
grepped_zoneinfo_file_path = Path('/home/graffy/work/tickets/bug3897/alambix98/20240806-202043-grepped-zoneinfo.stdout') # I didn't have a chance to get zone infor before it crashed so I used another measure, hoping that zoneinfo is minimal
|
|
||||||
elif set_id == 'validation_alambix98':
|
|
||||||
meminfo_stdout_file_path = Path('/home/graffy/work/tickets/bug3897/alambix98/20240806-223916-meminfo.stdout')
|
|
||||||
grepped_zoneinfo_file_path = Path('/home/graffy/work/tickets/bug3897/alambix98/20240806-223916-grepped-zoneinfo.stdout')
|
|
||||||
|
|
||||||
show_memory_state(meminfo_stdout_file_path, grepped_zoneinfo_file_path)
|
|
||||||
|
|
||||||
|
|
||||||
main()
|
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
code to userstand how meminfo's MemAvailable is computed
|
||||||
|
|
||||||
|
how to use:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
20240813-16:43:33 graffy@graffy-ws2:~/work/linuxram.git$ export LINUXRAM_ROOT=$(pwd)
|
||||||
|
20240813-16:48:20 graffy@graffy-ws2:~/work/linuxram.git$ ./src/test_tmpfs.py
|
||||||
|
```
|
||||||
|
|
||||||
|
"""
|
||||||
|
from pathlib import Path
|
||||||
|
import os
|
||||||
|
from linuxmem import compute_mem_avail
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
|
||||||
|
set_id = 'stressed_alambix97'
|
||||||
|
# set_id = 'validation_alambix98'
|
||||||
|
linuxram_root_dir = Path(os.getenv('LINUXRAM_ROOT'))
|
||||||
|
|
||||||
|
if set_id == 'stressed_alambix97':
|
||||||
|
meminfo_stdout_file_path = linuxram_root_dir / 'measurements/bug3897/alambix97/20240805-191606-meminfo.stdout'
|
||||||
|
grepped_zoneinfo_file_path = linuxram_root_dir / 'measurements/bug3897/alambix98/20240806-202043-grepped-zoneinfo.stdout' # I didn't have a chance to get zone info before it crashed so I used another measure, hoping that zoneinfo is minimal
|
||||||
|
elif set_id == 'validation_alambix98':
|
||||||
|
meminfo_stdout_file_path = linuxram_root_dir / 'measurements/alambix98/20240806-223916-meminfo.stdout'
|
||||||
|
grepped_zoneinfo_file_path = linuxram_root_dir / 'measurements/bug3897/alambix98/20240806-223916-grepped-zoneinfo.stdout'
|
||||||
|
|
||||||
|
compute_mem_avail(meminfo_stdout_file_path, grepped_zoneinfo_file_path)
|
||||||
|
|
||||||
|
|
||||||
|
main()
|
Loading…
Reference in New Issue