This avoids a dependency on the non-standard libxml2 module. --- testsuites/tmtests/tmfine01/init.c | 30 +- testsuites/tmtests/tmtimer01/init.c | 35 +- testsuites/tmtests/tmtimer01/plot.py | 52 +-- testsuites/tmtests/tmtimer01/tmtimer01.scn | 389 +++++++++++++-------- 4 files changed, 328 insertions(+), 178 deletions(-)
diff --git a/testsuites/tmtests/tmfine01/init.c b/testsuites/tmtests/tmfine01/init.c index ebf3f97dfb..3426b122fa 100644 --- a/testsuites/tmtests/tmfine01/init.c +++ b/testsuites/tmtests/tmfine01/init.c @@ -55,6 +55,8 @@ typedef struct { typedef struct { rtems_test_parallel_context base; + const char *test_sep; + const char *counter_sep; rtems_id master; rtems_id sema; rtems_id mq[CPU_COUNT]; @@ -88,11 +90,8 @@ static rtems_interval test_init( return test_duration(); } -static const char *test_sep = ""; - -static const char *counter_sep; - static void test_fini( + test_context *ctx, const char *type, const char *description, uint32_t *counters, @@ -108,16 +107,16 @@ static void test_fini( " \"type\": \"%s\",\n" " \"description\": \"%s\",\n" " \"counter\": [", - test_sep, + ctx->test_sep, type, description ); - test_sep = ", "; - counter_sep = "\n "; + ctx->test_sep = ", "; + ctx->counter_sep = "\n "; } - printf("%s[", counter_sep); - counter_sep = "],\n "; + printf("%s[", ctx->counter_sep); + ctx->counter_sep = "],\n "; value_sep = ""; for (i = 0; i < active_workers; ++i) { @@ -175,6 +174,7 @@ static void test_self_event_fini( test_context *ctx = (test_context *) base; test_fini( + ctx, "event", "Send Event to Self", &ctx->self_event_ops[active_workers - 1][0], @@ -227,6 +227,7 @@ static void test_all_to_one_event_fini( test_context *ctx = (test_context *) base; test_fini( + ctx, "event", "Send Event to One", &ctx->all_to_one_event_ops[active_workers - 1][0], @@ -269,6 +270,7 @@ static void test_one_mutex_fini( test_context *ctx = (test_context *) base; test_fini( + ctx, "contested-mutex", "Obtain/Release Contested Classic Inheritance Mutex", &ctx->one_mutex_ops[active_workers - 1][0], @@ -324,6 +326,7 @@ static void test_many_mutex_fini( test_context *ctx = (test_context *) base; test_fini( + ctx, "private-mutex", "Obtain/Release Private Inheritance Mutex", &ctx->many_mutex_ops[active_workers - 1][0], @@ -376,6 +379,7 @@ static void test_self_msg_fini( test_context *ctx = (test_context *) base; test_fini( + ctx, "message", "Send Message to Self", &ctx->self_msg_ops[active_workers - 1][0], @@ -431,6 +435,7 @@ static void test_many_to_one_msg_fini( test_context *ctx = (test_context *) base; test_fini( + ctx, "message", "Send Message to One Receiver", &ctx->many_to_one_msg_ops[active_workers - 1][0], @@ -470,6 +475,7 @@ static void test_many_sys_lock_mutex_fini( test_context *ctx = (test_context *) base; test_fini( + ctx, "private-mutex", "Obtain/Release Private <sys/lock.h> Mutex", &ctx->many_sys_lock_mutex_ops[active_workers - 1][0], @@ -525,6 +531,7 @@ static void test_many_classic_ceiling_fini( test_context *ctx = (test_context *) base; test_fini( + ctx, "private-mutex", "Obtain/Release Private Classic Ceiling Mutex", &ctx->many_classic_ceiling_ops[active_workers - 1][0], @@ -581,6 +588,7 @@ static void test_many_classic_mrsp_fini( test_context *ctx = (test_context *) base; test_fini( + ctx, "private-mutex", "Obtain/Release Private Classic MrsP Mutex", &ctx->many_classic_mrsp_ops[active_workers - 1][0], @@ -625,6 +633,7 @@ static void test_many_pthread_spinlock_fini( test_context *ctx = (test_context *) base; test_fini( + ctx, "private-mutex", "Obtain/Release Private Pthread Spinlock", &ctx->many_pthread_spinlock_ops[active_workers - 1][0], @@ -680,6 +689,7 @@ static void test_many_pthread_mutex_inherit_fini( test_context *ctx = (test_context *) base; test_fini( + ctx, "private-mutex", "Obtain/Release Private Pthread Inheritance Mutex", &ctx->many_pthread_mutex_inherit_ops[active_workers - 1][0], @@ -741,6 +751,7 @@ static void test_many_pthread_mutex_protect_fini( test_context *ctx = (test_context *) base; test_fini( + ctx, "private-mutex", "Obtain/Release Private Pthread Ceiling Mutex", &ctx->many_pthread_mutex_protect_ops[active_workers - 1][0], @@ -844,6 +855,7 @@ static void Init(rtems_task_argument arg) printf("*** BEGIN OF JSON DATA ***\n[\n "); + ctx->test_sep = ""; rtems_test_parallel( &ctx->base, NULL, diff --git a/testsuites/tmtests/tmtimer01/init.c b/testsuites/tmtests/tmtimer01/init.c index b905bb7ab4..1a37b5192c 100644 --- a/testsuites/tmtests/tmtimer01/init.c +++ b/testsuites/tmtests/tmtimer01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2016 embedded brains GmbH & Co. KG + * Copyright (C) 2016, 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 @@ -108,13 +108,14 @@ static void test_fire_and_cancel( rtems_test_assert(sc2 == RTEMS_SUCCESSFUL); printf( - "<%s unit=\"ns\">%" PRIu64 "</%s>", + ",\n \"%s\": %" PRIu64, name, - rtems_counter_ticks_to_nanoseconds(d), - name + rtems_counter_ticks_to_nanoseconds(d) ); } +static const char *sep = "\n "; + static void test_case(test_context *ctx, size_t j, size_t k) { rtems_status_code sc; @@ -130,13 +131,17 @@ static void test_case(test_context *ctx, size_t j, size_t k) rtems_test_assert(sc == RTEMS_SUCCESSFUL); } - printf(" <Sample>\n <ActiveTimers>%zu</ActiveTimers>", j); - - test_fire_and_cancel(ctx, j, 0, "First"); - test_fire_and_cancel(ctx, j, j / 2, "Middle"); - test_fire_and_cancel(ctx, j, j + 1, "Last"); + printf( + "%s{\n" + " \"active-timers\": %zu", + sep, + j + ); + sep = "\n }, "; - printf("\n </Sample>\n"); + test_fire_and_cancel(ctx, j, 0, "first"); + test_fire_and_cancel(ctx, j, j / 2, "middle"); + test_fire_and_cancel(ctx, j, j + 1, "last"); } static void test(void) @@ -181,7 +186,13 @@ static void test(void) timer_count = n; } - printf("<TMTimer01 timerCount=\"%zu\">\n", timer_count); + printf( + "*** BEGIN OF JSON DATA ***\n" + "{\n" + " \"timer-count\": %zu,\n" + " \"samples\": [", + timer_count + ); k = 0; j = 0; @@ -194,7 +205,7 @@ static void test(void) test_case(ctx, n - 2, k); - printf("</TMTimer01>\n"); + printf("\n }\n ]\n}\n*** END OF JSON DATA ***\n"); } static void Init(rtems_task_argument arg) diff --git a/testsuites/tmtests/tmtimer01/plot.py b/testsuites/tmtests/tmtimer01/plot.py index 0328062314..73654c5b9d 100644 --- a/testsuites/tmtests/tmtimer01/plot.py +++ b/testsuites/tmtests/tmtimer01/plot.py @@ -1,7 +1,6 @@ # SPDX-License-Identifier: BSD-2-Clause -# -# Copyright (c) 2016 embedded brains GmbH & Co. KG +# Copyright (C) 2016, 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,22 +22,35 @@ # 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('tmtimer01.scn') -ctx = doc.xpathNewContext() - -plt.title('timer test') -plt.xscale('log') -plt.xlabel('active timers') -plt.ylabel('timer fire and cancel [ns]') - -x = map(xmlNode.getContent, ctx.xpathEval('/TMTimer01/Sample/ActiveTimers')) -for i in ['First', 'Middle', 'Last']: - y = map(xmlNode.getContent, ctx.xpathEval('/TMTimer01/Sample/' + i)) - plt.plot(x, y, label = i) -plt.legend(loc = 'best') -plt.show() +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("Timer Fire and Cancel Timing Test") + axes.set_xlabel("Active Timers") + axes.set_xscale("log") + axes.set_ylabel("Timer Fire and Cancel Duration [μs]") + x = [sample["active-timers"] for sample in data["samples"]] + for key in ["first", "middle", "last"]: + y = [sample[key] / 1000.0 for sample in data["samples"]] + axes.plot(x, y, label=f"operate on {key} timer", marker='o') + axes.legend(loc='best') + plt.savefig("tmtimer01.png") + plt.savefig("tmtimer01.pdf") + plt.close() + + +_JSON_DATA = re.compile( + r"\*\*\* BEGIN OF JSON DATA \*\*\*(.*)" + r"\*\*\* END OF JSON DATA \*\*\*", re.DOTALL) + +with open("tmtimer01.scn", "r", encoding="utf-8") as src: + match = _JSON_DATA.search(src.read()) + data = json.loads(match.group(1)) + +_plot(data) diff --git a/testsuites/tmtests/tmtimer01/tmtimer01.scn b/testsuites/tmtests/tmtimer01/tmtimer01.scn index db3ca01d27..b278c75177 100644 --- a/testsuites/tmtests/tmtimer01/tmtimer01.scn +++ b/testsuites/tmtests/tmtimer01/tmtimer01.scn @@ -1,137 +1,252 @@ -<TMTimer01 timerCount="65504"> - <Sample> - <ActiveTimers>0</ActiveTimers><First unit="ns">8812</First><Middle unit="ns">1412</Middle><Last unit="ns">917</Last> - </Sample> - <Sample> - <ActiveTimers>2</ActiveTimers><First unit="ns">1602</First><Middle unit="ns">1010</Middle><Last unit="ns">1367</Last> - </Sample> - <Sample> - <ActiveTimers>4</ActiveTimers><First unit="ns">1524</First><Middle unit="ns">1089</Middle><Last unit="ns">1086</Last> - </Sample> - <Sample> - <ActiveTimers>7</ActiveTimers><First unit="ns">1791</First><Middle unit="ns">1121</Middle><Last unit="ns">1838</Last> - </Sample> - <Sample> - <ActiveTimers>10</ActiveTimers><First unit="ns">1488</First><Middle unit="ns">1016</Middle><Last unit="ns">2134</Last> - </Sample> - <Sample> - <ActiveTimers>14</ActiveTimers><First unit="ns">1527</First><Middle unit="ns">1698</Middle><Last unit="ns">3186</Last> - </Sample> - <Sample> - <ActiveTimers>19</ActiveTimers><First unit="ns">2078</First><Middle unit="ns">1665</Middle><Last unit="ns">3397</Last> - </Sample> - <Sample> - <ActiveTimers>25</ActiveTimers><First unit="ns">1519</First><Middle unit="ns">2368</Middle><Last unit="ns">4464</Last> - </Sample> - <Sample> - <ActiveTimers>32</ActiveTimers><First unit="ns">1243</First><Middle unit="ns">2623</Middle><Last unit="ns">3549</Last> - </Sample> - <Sample> - <ActiveTimers>41</ActiveTimers><First unit="ns">2368</First><Middle unit="ns">2578</Middle><Last unit="ns">4105</Last> - </Sample> - <Sample> - <ActiveTimers>52</ActiveTimers><First unit="ns">2322</First><Middle unit="ns">2563</Middle><Last unit="ns">4126</Last> - </Sample> - <Sample> - <ActiveTimers>66</ActiveTimers><First unit="ns">2499</First><Middle unit="ns">1855</Middle><Last unit="ns">4919</Last> - </Sample> - <Sample> - <ActiveTimers>83</ActiveTimers><First unit="ns">1689</First><Middle unit="ns">3128</Middle><Last unit="ns">5894</Last> - </Sample> - <Sample> - <ActiveTimers>104</ActiveTimers><First unit="ns">2301</First><Middle unit="ns">2647</Middle><Last unit="ns">4595</Last> - </Sample> - <Sample> - <ActiveTimers>130</ActiveTimers><First unit="ns">2880</First><Middle unit="ns">3183</Middle><Last unit="ns">6222</Last> - </Sample> - <Sample> - <ActiveTimers>162</ActiveTimers><First unit="ns">2597</First><Middle unit="ns">2376</Middle><Last unit="ns">7118</Last> - </Sample> - <Sample> - <ActiveTimers>201</ActiveTimers><First unit="ns">3519</First><Middle unit="ns">3466</Middle><Last unit="ns">6673</Last> - </Sample> - <Sample> - <ActiveTimers>249</ActiveTimers><First unit="ns">2829</First><Middle unit="ns">3177</Middle><Last unit="ns">7784</Last> - </Sample> - <Sample> - <ActiveTimers>308</ActiveTimers><First unit="ns">2614</First><Middle unit="ns">3396</Middle><Last unit="ns">7338</Last> - </Sample> - <Sample> - <ActiveTimers>381</ActiveTimers><First unit="ns">3454</First><Middle unit="ns">4888</Middle><Last unit="ns">9114</Last> - </Sample> - <Sample> - <ActiveTimers>470</ActiveTimers><First unit="ns">3397</First><Middle unit="ns">2443</Middle><Last unit="ns">7689</Last> - </Sample> - <Sample> - <ActiveTimers>580</ActiveTimers><First unit="ns">2233</First><Middle unit="ns">4410</Middle><Last unit="ns">9355</Last> - </Sample> - <Sample> - <ActiveTimers>715</ActiveTimers><First unit="ns">3787</First><Middle unit="ns">5891</Middle><Last unit="ns">6833</Last> - </Sample> - <Sample> - <ActiveTimers>881</ActiveTimers><First unit="ns">3839</First><Middle unit="ns">5089</Middle><Last unit="ns">9232</Last> - </Sample> - <Sample> - <ActiveTimers>1085</ActiveTimers><First unit="ns">2838</First><Middle unit="ns">2739</Middle><Last unit="ns">11575</Last> - </Sample> - <Sample> - <ActiveTimers>1336</ActiveTimers><First unit="ns">3256</First><Middle unit="ns">5011</Middle><Last unit="ns">9684</Last> - </Sample> - <Sample> - <ActiveTimers>1645</ActiveTimers><First unit="ns">2293</First><Middle unit="ns">5262</Middle><Last unit="ns">10183</Last> - </Sample> - <Sample> - <ActiveTimers>2025</ActiveTimers><First unit="ns">4436</First><Middle unit="ns">5934</Middle><Last unit="ns">8804</Last> - </Sample> - <Sample> - <ActiveTimers>2492</ActiveTimers><First unit="ns">4506</First><Middle unit="ns">7284</Middle><Last unit="ns">10389</Last> - </Sample> - <Sample> - <ActiveTimers>3067</ActiveTimers><First unit="ns">3832</First><Middle unit="ns">4990</Middle><Last unit="ns">9536</Last> - </Sample> - <Sample> - <ActiveTimers>3774</ActiveTimers><First unit="ns">5088</First><Middle unit="ns">4888</Middle><Last unit="ns">9633</Last> - </Sample> - <Sample> - <ActiveTimers>4644</ActiveTimers><First unit="ns">5590</First><Middle unit="ns">5749</Middle><Last unit="ns">8975</Last> - </Sample> - <Sample> - <ActiveTimers>5714</ActiveTimers><First unit="ns">4854</First><Middle unit="ns">6813</Middle><Last unit="ns">11603</Last> - </Sample> - <Sample> - <ActiveTimers>7030</ActiveTimers><First unit="ns">6139</First><Middle unit="ns">6132</Middle><Last unit="ns">12630</Last> - </Sample> - <Sample> - <ActiveTimers>8649</ActiveTimers><First unit="ns">6877</First><Middle unit="ns">3852</Middle><Last unit="ns">10973</Last> - </Sample> - <Sample> - <ActiveTimers>10640</ActiveTimers><First unit="ns">6532</First><Middle unit="ns">6097</Middle><Last unit="ns">11725</Last> - </Sample> - <Sample> - <ActiveTimers>13089</ActiveTimers><First unit="ns">5284</First><Middle unit="ns">5392</Middle><Last unit="ns">13246</Last> - </Sample> - <Sample> - <ActiveTimers>16101</ActiveTimers><First unit="ns">7077</First><Middle unit="ns">7572</Middle><Last unit="ns">14820</Last> - </Sample> - <Sample> - <ActiveTimers>19806</ActiveTimers><First unit="ns">7132</First><Middle unit="ns">8335</Middle><Last unit="ns">11668</Last> - </Sample> - <Sample> - <ActiveTimers>24363</ActiveTimers><First unit="ns">8676</First><Middle unit="ns">7919</Middle><Last unit="ns">13937</Last> - </Sample> - <Sample> - <ActiveTimers>29968</ActiveTimers><First unit="ns">5970</First><Middle unit="ns">10978</Middle><Last unit="ns">16035</Last> - </Sample> - <Sample> - <ActiveTimers>36862</ActiveTimers><First unit="ns">8804</First><Middle unit="ns">8767</Middle><Last unit="ns">13089</Last> - </Sample> - <Sample> - <ActiveTimers>45342</ActiveTimers><First unit="ns">8608</First><Middle unit="ns">10305</Middle><Last unit="ns">15709</Last> - </Sample> - <Sample> - <ActiveTimers>55772</ActiveTimers><First unit="ns">8949</First><Middle unit="ns">10031</Middle><Last unit="ns">16262</Last> - </Sample> - <Sample> - <ActiveTimers>65503</ActiveTimers><First unit="ns">9199</First><Middle unit="ns">10309</Middle><Last unit="ns">19090</Last> - </Sample> -</TMTimer01> + + SIS - SPARC/RISCV instruction simulator 2.30, copyright Jiri Gaisler 2020 + Bug-reports to j...@gaisler.se + + GR740/LEON4 emulation enabled, 4 cpus online, delta 50 clocks + + Loaded build/sparc/gr740/testsuites/tmtests/tmtimer01.exe, entry 0x00000000 + + +*** BEGIN OF TEST TMTIMER 1 *** +*** TEST VERSION: 6.0.0.76c91ee7793fc70b92e2f87e601c3fdc2d2b7f3f +*** TEST STATE: EXPECTED_PASS +*** TEST BUILD: RTEMS_SMP +*** TEST TOOLS: 13.2.0 20230727 (RTEMS 6, RSB d3d738c35a71ca05f675b188539225099401ac79, Newlib a021448) +*** BEGIN OF JSON DATA *** +{ + "timer-count": 61024, + "samples": [ + { + "active-timers": 0, + "first": 8560, + "middle": 8600, + "last": 8520 + }, { + "active-timers": 2, + "first": 9020, + "middle": 11680, + "last": 8860 + }, { + "active-timers": 4, + "first": 9480, + "middle": 9440, + "last": 11060 + }, { + "active-timers": 7, + "first": 9360, + "middle": 9820, + "last": 12300 + }, { + "active-timers": 10, + "first": 9860, + "middle": 9580, + "last": 11980 + }, { + "active-timers": 14, + "first": 9860, + "middle": 10040, + "last": 12280 + }, { + "active-timers": 19, + "first": 10360, + "middle": 10080, + "last": 13260 + }, { + "active-timers": 25, + "first": 10360, + "middle": 10500, + "last": 14460 + }, { + "active-timers": 32, + "first": 10240, + "middle": 10620, + "last": 13040 + }, { + "active-timers": 41, + "first": 10820, + "middle": 10540, + "last": 15000 + }, { + "active-timers": 52, + "first": 10740, + "middle": 10880, + "last": 13660 + }, { + "active-timers": 66, + "first": 10820, + "middle": 10880, + "last": 13960 + }, { + "active-timers": 83, + "first": 11160, + "middle": 11040, + "last": 14940 + }, { + "active-timers": 104, + "first": 11160, + "middle": 11420, + "last": 14340 + }, { + "active-timers": 130, + "first": 11160, + "middle": 11300, + "last": 14720 + }, { + "active-timers": 162, + "first": 11460, + "middle": 11380, + "last": 14880 + }, { + "active-timers": 201, + "first": 11500, + "middle": 11880, + "last": 17060 + }, { + "active-timers": 249, + "first": 11580, + "middle": 11800, + "last": 16900 + }, { + "active-timers": 308, + "first": 11380, + "middle": 12060, + "last": 15640 + }, { + "active-timers": 381, + "first": 11760, + "middle": 11840, + "last": 19800 + }, { + "active-timers": 470, + "first": 11880, + "middle": 12180, + "last": 16100 + }, { + "active-timers": 580, + "first": 11760, + "middle": 12600, + "last": 16560 + }, { + "active-timers": 715, + "first": 12140, + "middle": 12220, + "last": 17380 + }, { + "active-timers": 881, + "first": 12260, + "middle": 12640, + "last": 18740 + }, { + "active-timers": 1085, + "first": 12140, + "middle": 12560, + "last": 22320 + }, { + "active-timers": 1336, + "first": 12720, + "middle": 12600, + "last": 17240 + }, { + "active-timers": 1645, + "first": 12560, + "middle": 13020, + "last": 21140 + }, { + "active-timers": 2025, + "first": 12720, + "middle": 12980, + "last": 19500 + }, { + "active-timers": 2492, + "first": 12720, + "middle": 13400, + "last": 18160 + }, { + "active-timers": 3067, + "first": 13060, + "middle": 13060, + "last": 19220 + }, { + "active-timers": 3774, + "first": 12980, + "middle": 13560, + "last": 18620 + }, { + "active-timers": 4644, + "first": 13260, + "middle": 13860, + "last": 18920 + }, { + "active-timers": 5714, + "first": 13440, + "middle": 13520, + "last": 18920 + }, { + "active-timers": 7030, + "first": 13440, + "middle": 13900, + "last": 19380 + }, { + "active-timers": 8649, + "first": 13440, + "middle": 13820, + "last": 21640 + }, { + "active-timers": 10640, + "first": 14020, + "middle": 13940, + "last": 19760 + }, { + "active-timers": 13089, + "first": 13940, + "middle": 14160, + "last": 22100 + }, { + "active-timers": 16101, + "first": 13900, + "middle": 14320, + "last": 22680 + }, { + "active-timers": 19806, + "first": 13900, + "middle": 14700, + "last": 20840 + }, { + "active-timers": 24363, + "first": 14360, + "middle": 14320, + "last": 21660 + }, { + "active-timers": 29968, + "first": 14360, + "middle": 14540, + "last": 21300 + }, { + "active-timers": 36862, + "first": 14360, + "middle": 15320, + "last": 21440 + }, { + "active-timers": 45342, + "first": 14580, + "middle": 14700, + "last": 21600 + }, { + "active-timers": 55772, + "first": 14700, + "middle": 15040, + "last": 22060 + }, { + "active-timers": 61023, + "first": 14780, + "middle": 15080, + "last": 22960 + } + ] +} +*** END OF JSON DATA *** + +*** END OF TEST TMTIMER 1 *** + +cpu 0 in error mode (tt = 0x80) + 522750200 00009b40: 91d02000 ta 0x0 -- 2.35.3 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel