clarified signature: more robust operations, without assumption about node 0;
authorwenzelm
Mon, 20 Feb 2023 21:40:52 +0100
changeset 77319 87698fe320bb
parent 77318 7a03477bf3d5
child 77320 7a6fa60298cd
clarified signature: more robust operations, without assumption about node 0;
src/Pure/System/numa.scala
--- a/src/Pure/System/numa.scala	Mon Feb 20 21:04:49 2023 +0100
+++ b/src/Pure/System/numa.scala	Mon Feb 20 21:40:52 2023 +0100
@@ -32,10 +32,10 @@
 
   /* CPU policy via numactl tool */
 
-  lazy val numactl_available: Boolean = Isabelle_System.bash("numactl -m0 -N0 true").ok
+  def numactl(node: Int): String = "numactl -m" + node + " -N" + node
+  def numactl_ok(node: Int): Boolean = Isabelle_System.bash(numactl(node) + " true").ok
 
-  def policy(node: Int): String =
-    if (numactl_available) "numactl -m" + node + " -N" + node else ""
+  def policy(node: Int): String = if (numactl_ok(node)) numactl(node) else ""
 
   def policy_options(options: Options, numa_node: Option[Int]): Options =
     numa_node match {
@@ -47,7 +47,7 @@
     val numa_node =
       try {
         nodes() match {
-          case ns if ns.length >= 2 && numactl_available => ns.headOption
+          case ns if ns.length >= 2 && numactl_ok(ns.head) => Some(ns.head)
           case _ => None
         }
       }
@@ -60,9 +60,11 @@
 
   def enabled_warning(progress: Progress, enabled: Boolean): Boolean = {
     def warning =
-      if (nodes().length < 2) Some("no NUMA nodes available")
-      else if (!numactl_available) Some("bad numactl tool")
-      else None
+      nodes() match {
+        case ns if ns.length < 2 => Some("no NUMA nodes available")
+        case ns if !numactl_ok(ns.head) => Some("bad numactl tool")
+        case _ => None
+      }
 
     enabled &&
       (warning match {