X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/c166bd62fbb907f95f79f621e2a2fb4fdde08e01..e2994a5332194a132c60db35c55a006bdd1f6566:/lunaix-os/scripts/gdb/lunadbg/profiling/pmstat.py diff --git a/lunaix-os/scripts/gdb/lunadbg/profiling/pmstat.py b/lunaix-os/scripts/gdb/lunadbg/profiling/pmstat.py index 985e91b..209a4c5 100644 --- a/lunaix-os/scripts/gdb/lunadbg/profiling/pmstat.py +++ b/lunaix-os/scripts/gdb/lunadbg/profiling/pmstat.py @@ -4,6 +4,9 @@ from ..structs.pmem import PMem from ..pp import MyPrettyPrinter import math +ENTER_CONTIG = 0 +LEAVE_CONTIG = 1 + class PhysicalMemProfile: def __init__(self) -> None: super().__init__() @@ -18,23 +21,33 @@ class PhysicalMemProfile: 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) + page_per_granule = int(self.max_mem_pg) // self.__mem_distr_granule remainder = self.max_mem_pg % self.__mem_distr_granule bucket = 0 non_contig = 0 - last_contig = False + contig_state = LEAVE_CONTIG + new_state = LEAVE_CONTIG - for i in range(self.max_mem_pg): + i = 0 + while i < self.max_mem_pg: element = PageStruct(pplist[i].address) - bucket += int(element.busy()) - if last_contig: - last_contig = element.busy() - non_contig += int(not last_contig) - else: - last_contig = element.busy() - - if (i + 1) % page_per_granule == 0: + + nr_pgs = 1 + if element.lead_page(): + nr_pgs = 1 << element.order + if element.busy(): + bucket += nr_pgs + new_state = ENTER_CONTIG + else: + new_state = LEAVE_CONTIG + + i += nr_pgs + + if contig_state != new_state: + non_contig += int(new_state == LEAVE_CONTIG) + contig_state = new_state + + if i % page_per_granule == 0: self.mem_distr.append(bucket) bucket = 0