# mem-phys-addr.py: Resolve physical address samples # SPDX-License-Identifier: GPL-2.0 # # Copyright (c) 2018, Intel Corporation. from __future__ import division from __future__ import print_function import os import sys import struct import re import bisect import collections sys.path.append(os.environ['PERF_EXEC_PATH'] + \ '/scripts/python/Perf-Trace-Util/lib/Perf/Trace') #physical address ranges for System RAM system_ram = [] #physical address ranges for Persistent Memory pmem = [] #file object for proc iomem f = None #Count for each type of memory load_mem_type_cnt = collections.Counter() #perf event name event_name = None def parse_iomem(): global f f = open('/proc/iomem', 'r') for i, j in enumerate(f): m = re.split('-|:',j,2) if m[2].strip() == 'System RAM': system_ram.append(int(m[0], 16)) system_ram.append(int(m[1], 16)) if m[2].strip() == 'Persistent Memory': pmem.append(int(m[0], 16)) pmem.append(int(m[1], 16)) def print_memory_type(): print("Event: %s" % (event_name)) print("%-40s %10s %10s\n" % ("Memory type", "count", "percentage"), end='') print("%-40s %10s %10s\n" % ("----------------------------------------", "-----------", "-----------"), end=''); total = sum(load_mem_type_cnt.values()) for mem_type, count in sorted(load_mem_type_cnt.most_common(), \ key = lambda kv: (kv[1], kv[0]), reverse = True): print("%-40s %10d %10.1f%%\n" % (mem_type, count, 100 * count / total), end='') def trace_begin(): parse_iomem() def trace_end(): print_memory_type() f.close() def is_system_ram(phys_addr): #/proc/iomem is sorted position = bisect.bisect(system_ram, phys_addr) if position % 2 == 0: return False return True def is_persistent_mem(phys_addr): position = bisect.bisect(pmem, phys_addr) if position % 2 == 0: return False return True def find_memory_type(phys_addr): if phys_addr == 0: return "N/A" if is_system_ram(phys_addr): return "System RAM" if is_persistent_mem(phys_addr): return "Persistent Memory" #slow path, search all f.seek(0, 0) for j in f: m = re.split('-|:',j,2) if int(m[0], 16) <= phys_addr <= int(m[1], 16): return m[2] return "N/A" def process_event(param_dict): name = param_dict["ev_name"] sample = param_dict["sample"] phys_addr = sample["phys_addr"] global event_name if event_name == None: event_name = name load_mem_type_cnt[find_memory_type(phys_addr)] += 1 on> Hosts the 0x221E linux distro kernel.Ubuntu
summaryrefslogtreecommitdiff
path: root/mm/swap.h
AgeCommit message (Expand)Author
2024-02-20mm/swap: fix race when skipping swapcacheKairui Song
2023-12-29mm: convert swap_cluster_readahead and swap_vma_readahead to return a folioMatthew Wilcox (Oracle)
2023-12-29mm: return a folio from read_swap_cache_async()Matthew Wilcox (Oracle)
2023-12-29mm: remove page_swap_info()Matthew Wilcox (Oracle)
2023-12-29mm: convert swap_readpage() to swap_read_folio()Matthew Wilcox (Oracle)
2023-12-29mm: pass a folio to __swap_writepage()Matthew Wilcox (Oracle)
2023-12-29mm: return the folio from __read_swap_cache_async()Matthew Wilcox (Oracle)
2023-12-12zswap: make shrinking memcg-awareDomenico Cerasuolo
2023-10-25mempolicy: alloc_pages_mpol() for NUMA policy without vmaHugh Dickins
2023-08-24swap: remove remnants of polling from read_swap_cache_asyncSuren Baghdasaryan
2023-02-02mm: remove the __swap_writepage return valueChristoph Hellwig
2023-02-02mm: remove the swap_readpage return valueChristoph Hellwig
2022-11-08mm: convert find_get_incore_page() to filemap_get_incore_folio()Matthew Wilcox (Oracle)
2022-10-03mm: remove lookup_swap_cache()Matthew Wilcox (Oracle)
2022-10-03swap: add swap_cache_get_folio()Matthew Wilcox (Oracle)
2022-10-03mm/swap: convert add_to_swap_cache() to take a folioMatthew Wilcox (Oracle)
2022-09-11mm/swap: remove the end_write_func argument to __swap_writepageChristoph Hellwig
2022-07-03mm/khugepaged: try to free transhuge swapcache when possibleMiaohe Lin
2022-07-03mm/swap: convert __delete_from_swap_cache() to a folioMatthew Wilcox (Oracle)
2022-07-03mm/swap: convert delete_from_swap_cache() to take a folioMatthew Wilcox (Oracle)
2022-07-03mm: convert page_swap_flags to folio_swap_flagsMatthew Wilcox (Oracle)
2022-05-13swap: convert add_to_swap() to take a folioMatthew Wilcox (Oracle)
2022-05-09mm: submit multipage write for SWP_FS_OPS swap-spaceNeilBrown
2022-05-09mm: submit multipage reads for SWP_FS_OPS swap-spaceNeilBrown
2022-05-09mm: introduce ->swap_rw and use it for reads from SWP_FS_OPS swap-spaceNeilBrown
2022-05-09mm: reclaim mustn't enter FS for SWP_FS_OPS swap-spaceNeilBrown
2022-05-09mm: create new mm/swap.h header fileNeilBrown