From 27f2fee07fa5e0570a405234558fce622d947e9e Mon Sep 17 00:00:00 2001 From: Ankur Bansal <ankban@codeaurora.org> Date: Sat, 24 Mar 2018 14:57:29 +0530 Subject: [PATCH] lrdp_v2 : Fix memusage.py for kernel-4.14 slab info is moved to vm_node_stat in kernel-4.14 reading slab info from vm_node_state instead of vm_zone_state. and shmem from vm_node_state Change-Id: I32770c678209b7a9acc221bed9db44b86b0d0990 --- linux-ramdump-parser-v2/parsers/memusage.py | 46 ++++++++++----------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/linux-ramdump-parser-v2/parsers/memusage.py b/linux-ramdump-parser-v2/parsers/memusage.py index 965f761..002c037 100644 --- a/linux-ramdump-parser-v2/parsers/memusage.py +++ b/linux-ramdump-parser-v2/parsers/memusage.py @@ -14,18 +14,25 @@ from parser_util import register_parser, RamParser, cleanupString def do_dump_process_memory(ramdump): - vmstat_names = [ - "NR_FREE_PAGES", "NR_SLAB_RECLAIMABLE", - "NR_SLAB_UNRECLAIMABLE", "NR_SHMEM"] - vmstat_data = {} - if(ramdump.kernel_version >= (4,9,0)): - vmstats_addr = ramdump.address_of('vm_zone_stat') + if ramdump.kernel_version < (4, 9): + total_free = ramdump.read_word('vm_stat[NR_FREE_PAGES]') + slab_rec = ramdump.read_word('vm_stat[NR_SLAB_RECLAIMABLE]') + slab_unrec = ramdump.read_word('vm_stat[NR_SLAB_UNRECLAIMABLE]') + total_shmem = ramdump.read_word('vm_stat[NR_SHMEM]') else: - vmstats_addr = ramdump.address_of('vm_stat') - for x in vmstat_names: - i = ramdump.gdbmi.get_value_of(x) - vmstat_data[x] = ramdump.read_word( - ramdump.array_index(vmstats_addr, 'atomic_long_t', i)) + total_free = ramdump.read_word('vm_zone_stat[NR_FREE_PAGES]') + # slab memory + if ramdump.kernel_version >= (4, 14): + slab_rec = ramdump.read_word('vm_node_stat[NR_SLAB_RECLAIMABLE]') + slab_unrec = ramdump.read_word( + 'vm_node_stat[NR_SLAB_UNRECLAIMABLE]') + else: + slab_rec = ramdump.read_word('vm_zone_stat[NR_SLAB_RECLAIMABLE]') + slab_unrec = ramdump.read_word( + 'vm_zone_stat[NR_SLAB_UNRECLAIMABLE]') + total_shmem = ramdump.read_word('vm_node_stat[NR_SHMEM]') + + total_slab = slab_rec + slab_unrec total_mem = ramdump.read_word('totalram_pages') * 4 offset_tasks = ramdump.field_offset('struct task_struct', 'tasks') offset_comm = ramdump.field_offset('struct task_struct', 'comm') @@ -44,24 +51,17 @@ def do_dump_process_memory(ramdump): offset_thread_group = ramdump.field_offset( 'struct task_struct', 'thread_group') memory_file = ramdump.open_file('memory.txt') - total_slab = ( - vmstat_data["NR_SLAB_RECLAIMABLE"] + - vmstat_data["NR_SLAB_UNRECLAIMABLE"]) * 4 memory_file.write('Total RAM: {0:,}kB\n'.format(total_mem)) memory_file.write('Total free memory: {0:,}kB({1:.1f}%)\n'.format( - vmstat_data["NR_FREE_PAGES"] * 4, - (100.0 * vmstat_data["NR_FREE_PAGES"] * 4) / total_mem)) + total_free * 4, (100.0 * total_free * 4) / total_mem)) memory_file.write('Slab reclaimable: {0:,}kB({1:.1f}%)\n'.format( - vmstat_data["NR_SLAB_RECLAIMABLE"] * 4, - (100.0 * vmstat_data["NR_SLAB_RECLAIMABLE"] * 4) / total_mem)) + slab_rec * 4, (100.0 * slab_rec * 4) / total_mem)) memory_file.write('Slab unreclaimable: {0:,}kB({1:.1f}%)\n'.format( - vmstat_data["NR_SLAB_UNRECLAIMABLE"] * 4, - (100.0 * vmstat_data["NR_SLAB_UNRECLAIMABLE"] * 4) / total_mem)) + slab_unrec * 4, (100.0 * slab_unrec * 4) / total_mem)) memory_file.write('Total Slab memory: {0:,}kB({1:.1f}%)\n'.format( - total_slab, (100.0 * total_slab) / total_mem)) + total_slab * 4, (100.0 * total_slab * 4) / total_mem)) memory_file.write('Total SHMEM: {0:,}kB({1:.1f}%)\n\n'.format( - vmstat_data["NR_SHMEM"] * 4, - (100.0 * vmstat_data["NR_SHMEM"] * 4) / total_mem)) + total_shmem * 4, (100.0 * total_shmem * 4) / total_mem)) while True: task_struct = init_thread_group - offset_thread_group next_thread_comm = task_struct + offset_comm -- GitLab