Unifying the Lunaix's Physical Memory Model (#28)
[lunaix-os.git] / lunaix-os / scripts / gdb / lunadbg / profiling / pmstat.py
index 1e84d873460a35969114ee88c8f7fccc6284d2fc..985e91bacbaafebe7f5bd1cba74cf338192d8ed2 100644 (file)
@@ -1,14 +1,15 @@
 from ..symbols import LunaixSymbols
 from ..structs.page import PageStruct
 from ..symbols import LunaixSymbols
 from ..structs.page import PageStruct
+from ..structs.pmem import PMem
 from ..pp import MyPrettyPrinter
 import math
 
 class PhysicalMemProfile:
     def __init__(self) -> None:
         super().__init__()
 from ..pp import MyPrettyPrinter
 import math
 
 class PhysicalMemProfile:
     def __init__(self) -> None:
         super().__init__()
-        self._pm_list = LunaixSymbols.debug_sym("pmm", "pm_table")
+        self._pmem    = PMem(LunaixSymbols.debug_sym("pmm", "memory").value().address)
 
 
-        self.max_mem_pg = int(LunaixSymbols.debug_sym("pmm", "max_pg").value())
+        self.max_mem_pg = self._pmem.list_len()
         self.max_mem_sz = self.max_mem_pg * 4096
         self.mem_distr = []
 
         self.max_mem_sz = self.max_mem_pg * 4096
         self.mem_distr = []
 
@@ -16,20 +17,22 @@ class PhysicalMemProfile:
         self.__mem_distr_granule = distr_granule
         self.mem_distr.clear()
 
         self.__mem_distr_granule = distr_granule
         self.mem_distr.clear()
 
+        pplist = self._pmem.pplist()
         page_per_granule = self.max_mem_pg / self.__mem_distr_granule
         page_per_granule = math.ceil(page_per_granule)
         remainder = self.max_mem_pg % self.__mem_distr_granule
         bucket = 0
         non_contig = 0
         last_contig = False
         page_per_granule = self.max_mem_pg / self.__mem_distr_granule
         page_per_granule = math.ceil(page_per_granule)
         remainder = self.max_mem_pg % self.__mem_distr_granule
         bucket = 0
         non_contig = 0
         last_contig = False
+
         for i in range(self.max_mem_pg):
         for i in range(self.max_mem_pg):
-            element = PageStruct(self._pm_list[i].address)
-            bucket += int(element.ref > 0)
+            element = PageStruct(pplist[i].address)
+            bucket += int(element.busy())
             if last_contig:
             if last_contig:
-                last_contig = element.ref > 0
+                last_contig = element.busy()
                 non_contig += int(not last_contig)
             else:
                 non_contig += int(not last_contig)
             else:
-                last_contig = element.ref > 0
+                last_contig = element.busy()
 
             if (i + 1) % page_per_granule == 0:
                 self.mem_distr.append(bucket)
 
             if (i + 1) % page_per_granule == 0:
                 self.mem_distr.append(bucket)