[PATCH 3/8] tmcontext01: Convert to JSON data

Sebastian Huber sebastian.huber at embedded-brains.de
Tue Jan 9 09:36:52 UTC 2024


This avoids a dependency on the non-standard libxml2 module.
---
 testsuites/tmtests/tmcontext01/init.c         |  46 ++-
 testsuites/tmtests/tmcontext01/plot.py        |  73 ++--
 .../tmtests/tmcontext01/tmcontext01.scn       | 379 ++++++------------
 3 files changed, 181 insertions(+), 317 deletions(-)

diff --git a/testsuites/tmtests/tmcontext01/init.c b/testsuites/tmtests/tmcontext01/init.c
index 7f4ababfe5..dc1da718c7 100644
--- a/testsuites/tmtests/tmcontext01/init.c
+++ b/testsuites/tmtests/tmcontext01/init.c
@@ -168,14 +168,8 @@ static __attribute__((__noipa__)) void test_by_function_level(int fl, bool dirty
   max = t[SAMPLES - 1];
 
   printf(
-    "    <Sample functionNestLevel=\"%i\">\n"
-    "      <Min unit=\"ns\">%" PRIu64 "</Min>"
-      "<Q1 unit=\"ns\">%" PRIu64 "</Q1>"
-      "<Q2 unit=\"ns\">%" PRIu64 "</Q2>"
-      "<Q3 unit=\"ns\">%" PRIu64 "</Q3>"
-      "<Max unit=\"ns\">%" PRIu64 "</Max>\n"
-    "    </Sample>\n",
-    fl,
+    "%s\n      [%" PRIu64 ", %" PRIu64 ", %" PRIu64 ", %" PRIu64 ", %" PRIu64 "]",
+    fl == 0 ? "" : ",",
     rtems_counter_ticks_to_nanoseconds(min),
     rtems_counter_ticks_to_nanoseconds(q1),
     rtems_counter_ticks_to_nanoseconds(q2),
@@ -184,26 +178,38 @@ static __attribute__((__noipa__)) void test_by_function_level(int fl, bool dirty
   );
 }
 
-static void test(bool dirty, uint32_t load)
+static void test(bool first, bool dirty, uint32_t load)
 {
   int fl;
 
   printf(
-    "  <ContextSwitchTest environment=\"%s\"",
-    dirty ? "dirty" : "normal"
+    "\n  %s{\n"
+    "    \"environment\": \"",
+    first ? "" : "}, "
   );
 
-  if (load > 0) {
-    printf(" load=\"%" PRIu32 "\"", load);
+  if (dirty) {
+    if (load > 0) {
+      printf("Load/%" PRIu32 "", load);
+    } else {
+      printf("DirtyCache");
+    }
+  } else {
+    printf("HotCache");
   }
 
-  printf(">\n");
+  printf(
+    "\",\n"
+    "    \"stats-by-function-nest-level\": ["
+  );
 
   for (fl = 0; fl < FUNCTION_LEVELS; ++fl) {
     test_by_function_level(fl, dirty);
   }
 
-  printf("  </ContextSwitchTest>\n");
+  printf(
+    "\n    ]"
+  );
 }
 
 static void Init(rtems_task_argument arg)
@@ -212,7 +218,7 @@ static void Init(rtems_task_argument arg)
 
   TEST_BEGIN();
 
-  printf("<Test>\n");
+  printf("*** BEGIN OF JSON DATA ***\n[");
 
   cache_line_size = rtems_cache_get_data_line_size();
   if (cache_line_size == 0) {
@@ -227,8 +233,8 @@ static void Init(rtems_task_argument arg)
   main_data = malloc(data_size);
   rtems_test_assert(main_data != NULL);
 
-  test(false, load);
-  test(true, load);
+  test(true, false, load);
+  test(false, true, load);
 
   for (load = 1; load < rtems_scheduler_get_processor_maximum(); ++load) {
     rtems_status_code sc;
@@ -253,10 +259,10 @@ static void Init(rtems_task_argument arg)
     sc = rtems_task_start(id, load_task, (rtems_task_argument) load_data);
     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
 
-    test(true, load);
+    test(false, true, load);
   }
 
-  printf("</Test>\n");
+  printf("\n  }\n]\n*** END OF JSON DATA ***\n");
 
   TEST_END();
   rtems_test_exit(0);
diff --git a/testsuites/tmtests/tmcontext01/plot.py b/testsuites/tmtests/tmcontext01/plot.py
index ce59efabe3..944a5962c2 100644
--- a/testsuites/tmtests/tmcontext01/plot.py
+++ b/testsuites/tmtests/tmcontext01/plot.py
@@ -1,7 +1,6 @@
 # SPDX-License-Identifier: BSD-2-Clause
 
-#
-# Copyright (c) 2014 embedded brains GmbH & Co. KG
+# Copyright (C) 2014, 2024 embedded brains GmbH & Co. KG
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions
@@ -23,48 +22,38 @@
 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
-#
 
-import libxml2
-from libxml2 import xmlNode
-import matplotlib.pyplot as plt
-doc = libxml2.parseFile("tmcontext01.scn")
-ctx = doc.xpathNewContext()
+import json
+import re
+import matplotlib.pyplot as plt  # type: ignore
+from matplotlib import ticker  # type: ignore
+
+
+def _plot(data: dict) -> None:
+    _, axes = plt.subplots()
+    axes.set_title("Context Switch Timing Test")
+    axes.set_xlabel("Function Nest Level")
+    axes.set_ylabel("Context Switch Time [μs]")
+    x = list(range(0, len(data[0]["stats-by-function-nest-level"])))
+    axes.xaxis.set_major_locator(ticker.FixedLocator(x))
+    for samples in data:
+        y = [
+            values[2] / 1000.0
+            for values in samples["stats-by-function-nest-level"]
+        ]
+        axes.plot(x, y, label=samples["environment"], marker='o')
+    axes.legend(loc='best')
+    plt.savefig("tmcontext01.png")
+    plt.savefig("tmcontext01.pdf")
+    plt.close()
 
-colors = ['k', 'r', 'b', 'g', 'y', 'm']
 
-def plot(y, color, label, first):
-	n=len(y)
-	x=range(0, n)
-	if first:
-		plt.plot(x, y, color=color, label=label)
-	else:
-		plt.plot(x, y, color=color)
+_JSON_DATA = re.compile(
+    r"\*\*\* BEGIN OF JSON DATA \*\*\*(.*)"
+    r"\*\*\* END OF JSON DATA \*\*\*", re.DOTALL)
 
-plt.title("context switch timing test")
-plt.xlabel('function nest level')
-plt.ylabel('context switch time [ns]')
+with open("tmcontext01.scn", "r", encoding="utf-8") as src:
+    match = _JSON_DATA.search(src.read())
+    data = json.loads(match.group(1))
 
-c = 0
-for e in ["normal", "dirty"]:
-	first = True
-	for i in ["Min", "Q1", "Q2", "Q3", "Max"]:
-		y=map(xmlNode.getContent, ctx.xpathEval("/Test/ContextSwitchTest[@environment='" + e + "' and not(@load)]/Sample/" + i))
-		plot(y, colors[c], e, first)
-		first = False
-	c = c + 1
-load = 1
-while load > 0:
-	first = True
-	for i in ["Min", "Q1", "Q2", "Q3", "Max"]:
-		y=map(xmlNode.getContent, ctx.xpathEval("/Test/ContextSwitchTest[@environment='dirty' and @load='" + str(load) + "']/Sample/" + i))
-		if len(y) > 0:
-			plot(y, colors[c], "load " + str(load), first)
-			first = False
-		else:
-			load = 0
-	if load > 0:
-		load = load + 1
-	c = c + 1
-plt.legend()
-plt.show()
+_plot(data)
diff --git a/testsuites/tmtests/tmcontext01/tmcontext01.scn b/testsuites/tmtests/tmcontext01/tmcontext01.scn
index 9044619319..8347d8b3fb 100644
--- a/testsuites/tmtests/tmcontext01/tmcontext01.scn
+++ b/testsuites/tmtests/tmcontext01/tmcontext01.scn
@@ -1,255 +1,124 @@
-<?xml version="1.0"?>
-<!-- *** TEST TMCONTEXT 1 *** -->
-<Test>
-  <ContextSwitchTest environment="normal">
-    <Sample functionNestLevel="0">
-      <Min unit="ns">2440</Min><Q1 unit="ns">2440</Q1><Q2 unit="ns">2480</Q2><Q3 unit="ns">2480</Q3><Max unit="ns">2800</Max>
-    </Sample>
-    <Sample functionNestLevel="1">
-      <Min unit="ns">3520</Min><Q1 unit="ns">3760</Q1><Q2 unit="ns">3800</Q2><Q3 unit="ns">3800</Q3><Max unit="ns">4120</Max>
-    </Sample>
-    <Sample functionNestLevel="2">
-      <Min unit="ns">4280</Min><Q1 unit="ns">4720</Q1><Q2 unit="ns">4720</Q2><Q3 unit="ns">5040</Q3><Max unit="ns">5080</Max>
-    </Sample>
-    <Sample functionNestLevel="3">
-      <Min unit="ns">5320</Min><Q1 unit="ns">5640</Q1><Q2 unit="ns">5680</Q2><Q3 unit="ns">5960</Q3><Max unit="ns">6000</Max>
-    </Sample>
-    <Sample functionNestLevel="4">
-      <Min unit="ns">6360</Min><Q1 unit="ns">6600</Q1><Q2 unit="ns">6600</Q2><Q3 unit="ns">6920</Q3><Max unit="ns">6920</Max>
-    </Sample>
-    <Sample functionNestLevel="5">
-      <Min unit="ns">7480</Min><Q1 unit="ns">7520</Q1><Q2 unit="ns">7840</Q2><Q3 unit="ns">7840</Q3><Max unit="ns">7880</Max>
-    </Sample>
-    <Sample functionNestLevel="6">
-      <Min unit="ns">8480</Min><Q1 unit="ns">8480</Q1><Q2 unit="ns">8800</Q2><Q3 unit="ns">8800</Q3><Max unit="ns">8840</Max>
-    </Sample>
-    <Sample functionNestLevel="7">
-      <Min unit="ns">8840</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9280</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9320</Max>
-    </Sample>
-    <Sample functionNestLevel="8">
-      <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9280</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9320</Max>
-    </Sample>
-    <Sample functionNestLevel="9">
-      <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">8960</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max>
-    </Sample>
-    <Sample functionNestLevel="10">
-      <Min unit="ns">8800</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9240</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max>
-    </Sample>
-    <Sample functionNestLevel="11">
-      <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9280</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max>
-    </Sample>
-    <Sample functionNestLevel="12">
-      <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9240</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9320</Max>
-    </Sample>
-    <Sample functionNestLevel="13">
-      <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9240</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max>
-    </Sample>
-    <Sample functionNestLevel="14">
-      <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9240</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max>
-    </Sample>
-    <Sample functionNestLevel="15">
-      <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">8960</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max>
-    </Sample>
-  </ContextSwitchTest>
-  <ContextSwitchTest environment="dirty">
-    <Sample functionNestLevel="0">
-      <Min unit="ns">9720</Min><Q1 unit="ns">10560</Q1><Q2 unit="ns">10600</Q2><Q3 unit="ns">10680</Q3><Max unit="ns">11160</Max>
-    </Sample>
-    <Sample functionNestLevel="1">
-      <Min unit="ns">11840</Min><Q1 unit="ns">12280</Q1><Q2 unit="ns">12560</Q2><Q3 unit="ns">12600</Q3><Max unit="ns">12640</Max>
-    </Sample>
-    <Sample functionNestLevel="2">
-      <Min unit="ns">12880</Min><Q1 unit="ns">13560</Q1><Q2 unit="ns">13600</Q2><Q3 unit="ns">13640</Q3><Max unit="ns">13680</Max>
-    </Sample>
-    <Sample functionNestLevel="3">
-      <Min unit="ns">13960</Min><Q1 unit="ns">14640</Q1><Q2 unit="ns">14680</Q2><Q3 unit="ns">14720</Q3><Max unit="ns">14720</Max>
-    </Sample>
-    <Sample functionNestLevel="4">
-      <Min unit="ns">15000</Min><Q1 unit="ns">15680</Q1><Q2 unit="ns">15760</Q2><Q3 unit="ns">15760</Q3><Max unit="ns">15800</Max>
-    </Sample>
-    <Sample functionNestLevel="5">
-      <Min unit="ns">16320</Min><Q1 unit="ns">16720</Q1><Q2 unit="ns">16800</Q2><Q3 unit="ns">16800</Q3><Max unit="ns">17040</Max>
-    </Sample>
-    <Sample functionNestLevel="6">
-      <Min unit="ns">17320</Min><Q1 unit="ns">17560</Q1><Q2 unit="ns">17800</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18160</Max>
-    </Sample>
-    <Sample functionNestLevel="7">
-      <Min unit="ns">17440</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18160</Max>
-    </Sample>
-    <Sample functionNestLevel="8">
-      <Min unit="ns">17360</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18200</Max>
-    </Sample>
-    <Sample functionNestLevel="9">
-      <Min unit="ns">17400</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18120</Max>
-    </Sample>
-    <Sample functionNestLevel="10">
-      <Min unit="ns">17320</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18200</Max>
-    </Sample>
-    <Sample functionNestLevel="11">
-      <Min unit="ns">17360</Min><Q1 unit="ns">17840</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18160</Max>
-    </Sample>
-    <Sample functionNestLevel="12">
-      <Min unit="ns">17360</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18160</Max>
-    </Sample>
-    <Sample functionNestLevel="13">
-      <Min unit="ns">17360</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18200</Max>
-    </Sample>
-    <Sample functionNestLevel="14">
-      <Min unit="ns">17760</Min><Q1 unit="ns">17840</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18200</Max>
-    </Sample>
-    <Sample functionNestLevel="15">
-      <Min unit="ns">17360</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18200</Max>
-    </Sample>
-  </ContextSwitchTest>
-  <ContextSwitchTest environment="dirty" load="1">
-    <Sample functionNestLevel="0">
-      <Min unit="ns">23800</Min><Q1 unit="ns">24440</Q1><Q2 unit="ns">24640</Q2><Q3 unit="ns">24720</Q3><Max unit="ns">25080</Max>
-    </Sample>
-    <Sample functionNestLevel="1">
-      <Min unit="ns">28040</Min><Q1 unit="ns">28560</Q1><Q2 unit="ns">28640</Q2><Q3 unit="ns">28680</Q3><Max unit="ns">28720</Max>
-    </Sample>
-    <Sample functionNestLevel="2">
-      <Min unit="ns">31600</Min><Q1 unit="ns">32160</Q1><Q2 unit="ns">32160</Q2><Q3 unit="ns">32200</Q3><Max unit="ns">32280</Max>
-    </Sample>
-    <Sample functionNestLevel="3">
-      <Min unit="ns">35400</Min><Q1 unit="ns">35720</Q1><Q2 unit="ns">35760</Q2><Q3 unit="ns">35920</Q3><Max unit="ns">36080</Max>
-    </Sample>
-    <Sample functionNestLevel="4">
-      <Min unit="ns">38960</Min><Q1 unit="ns">39280</Q1><Q2 unit="ns">39320</Q2><Q3 unit="ns">39560</Q3><Max unit="ns">39640</Max>
-    </Sample>
-    <Sample functionNestLevel="5">
-      <Min unit="ns">42480</Min><Q1 unit="ns">42840</Q1><Q2 unit="ns">43080</Q2><Q3 unit="ns">43120</Q3><Max unit="ns">43200</Max>
-    </Sample>
-    <Sample functionNestLevel="6">
-      <Min unit="ns">46120</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46880</Max>
-    </Sample>
-    <Sample functionNestLevel="7">
-      <Min unit="ns">46080</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46760</Max>
-    </Sample>
-    <Sample functionNestLevel="8">
-      <Min unit="ns">46320</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">47040</Max>
-    </Sample>
-    <Sample functionNestLevel="9">
-      <Min unit="ns">46040</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46960</Max>
-    </Sample>
-    <Sample functionNestLevel="10">
-      <Min unit="ns">45960</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46960</Max>
-    </Sample>
-    <Sample functionNestLevel="11">
-      <Min unit="ns">46040</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46720</Max>
-    </Sample>
-    <Sample functionNestLevel="12">
-      <Min unit="ns">46080</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46920</Max>
-    </Sample>
-    <Sample functionNestLevel="13">
-      <Min unit="ns">46080</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46720</Max>
-    </Sample>
-    <Sample functionNestLevel="14">
-      <Min unit="ns">46280</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46760</Max>
-    </Sample>
-    <Sample functionNestLevel="15">
-      <Min unit="ns">46360</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">47040</Max>
-    </Sample>
-  </ContextSwitchTest>
-  <ContextSwitchTest environment="dirty" load="2">
-    <Sample functionNestLevel="0">
-      <Min unit="ns">37560</Min><Q1 unit="ns">38200</Q1><Q2 unit="ns">38240</Q2><Q3 unit="ns">38480</Q3><Max unit="ns">38600</Max>
-    </Sample>
-    <Sample functionNestLevel="1">
-      <Min unit="ns">44880</Min><Q1 unit="ns">45480</Q1><Q2 unit="ns">45560</Q2><Q3 unit="ns">45600</Q3><Max unit="ns">45640</Max>
-    </Sample>
-    <Sample functionNestLevel="2">
-      <Min unit="ns">50920</Min><Q1 unit="ns">51560</Q1><Q2 unit="ns">51600</Q2><Q3 unit="ns">51800</Q3><Max unit="ns">51960</Max>
-    </Sample>
-    <Sample functionNestLevel="3">
-      <Min unit="ns">57320</Min><Q1 unit="ns">57640</Q1><Q2 unit="ns">57880</Q2><Q3 unit="ns">57920</Q3><Max unit="ns">58240</Max>
-    </Sample>
-    <Sample functionNestLevel="4">
-      <Min unit="ns">63320</Min><Q1 unit="ns">63920</Q1><Q2 unit="ns">63960</Q2><Q3 unit="ns">64000</Q3><Max unit="ns">64600</Max>
-    </Sample>
-    <Sample functionNestLevel="5">
-      <Min unit="ns">69840</Min><Q1 unit="ns">69960</Q1><Q2 unit="ns">70040</Q2><Q3 unit="ns">70240</Q3><Max unit="ns">70400</Max>
-    </Sample>
-    <Sample functionNestLevel="6">
-      <Min unit="ns">75600</Min><Q1 unit="ns">76200</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76880</Max>
-    </Sample>
-    <Sample functionNestLevel="7">
-      <Min unit="ns">75440</Min><Q1 unit="ns">76240</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76840</Max>
-    </Sample>
-    <Sample functionNestLevel="8">
-      <Min unit="ns">75640</Min><Q1 unit="ns">76200</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76960</Max>
-    </Sample>
-    <Sample functionNestLevel="9">
-      <Min unit="ns">75640</Min><Q1 unit="ns">76240</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76440</Max>
-    </Sample>
-    <Sample functionNestLevel="10">
-      <Min unit="ns">75920</Min><Q1 unit="ns">76240</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76400</Max>
-    </Sample>
-    <Sample functionNestLevel="11">
-      <Min unit="ns">75600</Min><Q1 unit="ns">76200</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76920</Max>
-    </Sample>
-    <Sample functionNestLevel="12">
-      <Min unit="ns">75360</Min><Q1 unit="ns">76200</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76440</Max>
-    </Sample>
-    <Sample functionNestLevel="13">
-      <Min unit="ns">75360</Min><Q1 unit="ns">76200</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76960</Max>
-    </Sample>
-    <Sample functionNestLevel="14">
-      <Min unit="ns">75640</Min><Q1 unit="ns">76160</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76960</Max>
-    </Sample>
-    <Sample functionNestLevel="15">
-      <Min unit="ns">75960</Min><Q1 unit="ns">76240</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76400</Max>
-    </Sample>
-  </ContextSwitchTest>
-  <ContextSwitchTest environment="dirty" load="3">
-    <Sample functionNestLevel="0">
-      <Min unit="ns">52400</Min><Q1 unit="ns">52480</Q1><Q2 unit="ns">52520</Q2><Q3 unit="ns">52800</Q3><Max unit="ns">53720</Max>
-    </Sample>
-    <Sample functionNestLevel="1">
-      <Min unit="ns">61680</Min><Q1 unit="ns">62600</Q1><Q2 unit="ns">62640</Q2><Q3 unit="ns">62680</Q3><Max unit="ns">62800</Max>
-    </Sample>
-    <Sample functionNestLevel="2">
-      <Min unit="ns">70160</Min><Q1 unit="ns">71160</Q1><Q2 unit="ns">71360</Q2><Q3 unit="ns">71480</Q3><Max unit="ns">72160</Max>
-    </Sample>
-    <Sample functionNestLevel="3">
-      <Min unit="ns">79000</Min><Q1 unit="ns">79960</Q1><Q2 unit="ns">80000</Q2><Q3 unit="ns">80000</Q3><Max unit="ns">80920</Max>
-    </Sample>
-    <Sample functionNestLevel="4">
-      <Min unit="ns">87600</Min><Q1 unit="ns">88480</Q1><Q2 unit="ns">88760</Q2><Q3 unit="ns">88800</Q3><Max unit="ns">88880</Max>
-    </Sample>
-    <Sample functionNestLevel="5">
-      <Min unit="ns">96320</Min><Q1 unit="ns">97280</Q1><Q2 unit="ns">97320</Q2><Q3 unit="ns">97360</Q3><Max unit="ns">98600</Max>
-    </Sample>
-    <Sample functionNestLevel="6">
-      <Min unit="ns">105160</Min><Q1 unit="ns">105840</Q1><Q2 unit="ns">106080</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">107120</Max>
-    </Sample>
-    <Sample functionNestLevel="7">
-      <Min unit="ns">105200</Min><Q1 unit="ns">106040</Q1><Q2 unit="ns">106120</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">107080</Max>
-    </Sample>
-    <Sample functionNestLevel="8">
-      <Min unit="ns">104880</Min><Q1 unit="ns">105920</Q1><Q2 unit="ns">106080</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106280</Max>
-    </Sample>
-    <Sample functionNestLevel="9">
-      <Min unit="ns">105760</Min><Q1 unit="ns">106000</Q1><Q2 unit="ns">106120</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106280</Max>
-    </Sample>
-    <Sample functionNestLevel="10">
-      <Min unit="ns">104880</Min><Q1 unit="ns">105880</Q1><Q2 unit="ns">106080</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">107080</Max>
-    </Sample>
-    <Sample functionNestLevel="11">
-      <Min unit="ns">105720</Min><Q1 unit="ns">105960</Q1><Q2 unit="ns">106120</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106240</Max>
-    </Sample>
-    <Sample functionNestLevel="12">
-      <Min unit="ns">104960</Min><Q1 unit="ns">105880</Q1><Q2 unit="ns">106080</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106280</Max>
-    </Sample>
-    <Sample functionNestLevel="13">
-      <Min unit="ns">104880</Min><Q1 unit="ns">105880</Q1><Q2 unit="ns">106120</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106280</Max>
-    </Sample>
-    <Sample functionNestLevel="14">
-      <Min unit="ns">105720</Min><Q1 unit="ns">105880</Q1><Q2 unit="ns">106080</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106240</Max>
-    </Sample>
-    <Sample functionNestLevel="15">
-      <Min unit="ns">104920</Min><Q1 unit="ns">105840</Q1><Q2 unit="ns">106120</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106280</Max>
-    </Sample>
-  </ContextSwitchTest>
-</Test>
-<!-- *** END OF TEST TMCONTEXT 1 *** -->
+
+ SIS - SPARC/RISCV instruction simulator 2.30,  copyright Jiri Gaisler 2020
+ Bug-reports to jiri at gaisler.se
+
+ GR740/LEON4 emulation enabled, 4 cpus online, delta 50 clocks
+
+ Loaded build/sparc/gr740/testsuites/tmtests/tmcontext01.exe, entry 0x00000000
+
+
+*** BEGIN OF TEST TMCONTEXT 1 ***
+*** TEST VERSION: 6.0.0.aa07dc10645c3dc855c3df2b53520aebc2751b06
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_SMP
+*** TEST TOOLS: 13.2.0 20230727 (RTEMS 6, RSB d3d738c35a71ca05f675b188539225099401ac79, Newlib a021448)
+*** BEGIN OF JSON DATA ***
+[
+  {
+    "environment": "HotCache",
+    "stats-by-function-nest-level": [
+      [2820, 2820, 2820, 2820, 2820],
+      [3640, 3640, 3640, 3640, 3640],
+      [4460, 4460, 4460, 4460, 4460],
+      [5280, 5280, 5280, 5280, 5280],
+      [6100, 6100, 6100, 6100, 6100],
+      [6920, 6920, 6920, 6920, 6920],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740]
+    ]
+  }, {
+    "environment": "DirtyCache",
+    "stats-by-function-nest-level": [
+      [2820, 2820, 2820, 2820, 2820],
+      [3640, 3640, 3640, 3640, 3640],
+      [4460, 4460, 4460, 4460, 4460],
+      [5280, 5280, 5280, 5280, 5280],
+      [6100, 6100, 6100, 6100, 6100],
+      [6920, 6920, 6920, 6920, 6920],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740]
+    ]
+  }, {
+    "environment": "Load/1",
+    "stats-by-function-nest-level": [
+      [2820, 2820, 2820, 2820, 2820],
+      [3640, 3640, 3640, 3640, 3640],
+      [4460, 4460, 4460, 4460, 4460],
+      [5280, 5280, 5280, 5280, 5280],
+      [6100, 6100, 6100, 6100, 6100],
+      [6920, 6920, 6920, 6920, 6920],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740]
+    ]
+  }, {
+    "environment": "Load/2",
+    "stats-by-function-nest-level": [
+      [2820, 2820, 2820, 2820, 2820],
+      [3640, 3640, 3640, 3640, 3640],
+      [4460, 4460, 4460, 4460, 4460],
+      [5280, 5280, 5280, 5280, 5280],
+      [6100, 6100, 6100, 6100, 6100],
+      [6920, 6920, 6920, 6920, 6920],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740]
+    ]
+  }, {
+    "environment": "Load/3",
+    "stats-by-function-nest-level": [
+      [2820, 2820, 2820, 2820, 2820],
+      [3640, 3640, 3640, 3640, 3640],
+      [4460, 4460, 4460, 4460, 4460],
+      [5280, 5280, 5280, 5280, 5280],
+      [6100, 6100, 6100, 6100, 6100],
+      [6920, 6920, 6920, 6920, 6920],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740],
+      [7740, 7740, 7740, 7740, 7740]
+    ]
+  }
+]
+*** END OF JSON DATA ***
+
+*** END OF TEST TMCONTEXT 1 ***
+
+cpu 3 in error mode (tt = 0x80)
+ 2081487650  00009060:  91d02000   ta  0x0
-- 
2.35.3



More information about the devel mailing list