Skip to content

Commit f537a0d

Browse files
committed
topo: expose isolated cpus
Parse isolcpus= from cmdline and display it in the graph. Signed-off-by: Robin Jarry <rjarry@redhat.com>
1 parent 1d0e455 commit f537a0d

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

sosviz/collect/topo.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,5 +59,15 @@ def parse_report(path: pathlib.Path, data: D):
5959
for t in threads:
6060
siblings[t] = threads - {t}
6161
numa.cpus = cpus
62+
numa.housekeeping_cpus = cpus
63+
numa.isolated_cpus = set()
6264
numa.offline_cpus = offline_cpus
6365
numa.thread_siblings = siblings
66+
67+
cmdline = (path / "proc/cmdline").read_text()
68+
match = re.search(r"\bisolcpus=([\d,-]+)\b", cmdline)
69+
if match:
70+
isolated_cpus = parse_cpu_set(match.group(1))
71+
for numa in data.numa.values():
72+
numa.housekeeping_cpus = numa.cpus - isolated_cpus
73+
numa.isolated_cpus = numa.cpus & isolated_cpus

sosviz/output/dot.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -601,12 +601,15 @@ def irq_counters_tooltip(self, cpus: set[int]) -> str:
601601
return format_label(tooltip)
602602

603603
def phy_numa(self, numa: D):
604-
model = "<b>Unknown Processor Model</b>"
605604
for i, proc in enumerate(self.report.hardware.processor):
606605
if i == numa.id:
607606
model = f"<b>{proc.model}</b>"
607+
break
608+
else:
609+
model = "<b>Unknown Processor Model</b>"
608610
with self.cluster(model, style="dotted", color="blue"):
609-
housekeeping_cpus = set(numa.cpus)
611+
housekeeping_cpus = set(numa.housekeeping_cpus)
612+
isolated_cpus = set(numa.isolated_cpus)
610613

611614
ovs_pmds = {}
612615
for pmd in self.report.ovs.pmds.values():
@@ -637,6 +640,7 @@ def phy_numa(self, numa: D):
637640
)
638641

639642
housekeeping_cpus -= ovs_pmds.keys()
643+
isolated_cpus -= ovs_pmds.keys()
640644

641645
for vm in self.report.get("vms", {}).values():
642646
for vnuma in vm.numa.values():
@@ -652,6 +656,18 @@ def phy_numa(self, numa: D):
652656
color="blue",
653657
)
654658
housekeeping_cpus -= host_cpus
659+
isolated_cpus -= host_cpus
660+
661+
if isolated_cpus:
662+
self.node(
663+
f"phy_cpus_isolated_{numa.id}",
664+
[
665+
"<b><i>Isolated</i></b>",
666+
f"<i>CPUs {bit_list(isolated_cpus)}</i>",
667+
],
668+
tooltip=self.irq_counters_tooltip(isolated_cpus),
669+
color="cornflowerblue",
670+
)
655671

656672
self.node(
657673
f"phy_cpus_housekeeping_{numa.id}",

0 commit comments

Comments
 (0)