pmqtest(8)
π pmqtest(8) π
okay so bestie, listen. this is pmqtest, from the pmqtest(8) manual, and it's literally the tool you use when you need to measure how long it takes for one thread to slide a message into another thread's inbox. POSIX message queue girlies, rise up π
license vibes: # SPDX-License-Identifier: GPL-2.0-or-later
β¨ NAME β¨
pmqtest β start pairs of threads and measure the latency of interprocess communication with POSIX messages queues π
πΈ SYNTAX πΈ
pmqtest [-a|-a PROC] [-b USEC] [-d DIST] [-D TIME] [-f TO] [-h] [-i
INTV] [--json FILENAME] [-l LOOPS] [-p PRIO] [-q] [-S] [-t|-t NUM]
π¦ DESCRIPTION π¦
okay so here's the whole vibe. pmqtest spins up pairs of threads that stay in sync via mq_send/mw_receive(), and then it measures the latency between sending the message and receiving it. that's it. that's the whole thing. it's giving stopwatch energy β±οΈβ¨
π OPTIONS π
-a,--affinity[=PROC]β run on processor number PROC. if PROC isn't specified, just run on the current processor. staying home, no cap π-b,--breaktrace=USECβ send a break trace command when latency is>USEC. this is a debugging option for controlling the latency tracer in the realtime preemption patch. it's lowkey iconic for tracking down unexpected large latencies on a system π-d,--distance=DISTβ set the distance of thread intervals in microseconds (default is500 us). whenpmqtestis called with the-toption and more than one thread gets created, then this distance value gets added to the interval of the threads:Interval(thread N) = Interval(thread N-1) + DIST. math but make it spacing π«Ά-D,--duration=TIMEβ specify a length for the test run. append'm','h', or'd'to specify minutes, hours or days. lil unit suffixes, obsessed β³-h,--helpβ print help message. bestie behavior fr-f,--forcetimeout=TOβ set an artificial delay of the send function to force timeout of the receiver, requires the-Toption. yes it needs-T, no you can't skip it π-i,--interval=INTVβ set the base interval of the thread(s) in microseconds (default is1000 us). this sets the interval of the first thread. see also-d. first thread gets main character energy π--json=FILENAMEβ write final results into FILENAME, JSON formatted. data but cute β¨-l,--loops=LOOPSβ set the number of loops. the default is0(endless). this option is useful for automated tests with a given number of test cycles.pmqtestis stopped once the number of timer intervals has been reached π-p,--prio=PRIOβ set the priority of the process.-q,--quietβ print a summary only on exit. useful for automated tests, where only the summary output needs to be captured. shhh π€«-S,--smpβ test mode for symmetric multi-processing, implies-aand-tand uses the same priority on all threads. everyone gets the same treatment, as they should π-t,--threads[=NUM]β set the number of test threads (default is1, if this option is not given). if NUM is specified, create NUM test threads. if NUM is not specified, NUM is set to the number of available CPUs. the more the merrier π₯-T,--timeout=TOβ usemq_timedreceive()instead ofmq_receive()and specify timeout TO in seconds.
π EXAMPLES π
the following example was running on an 8-way processor:
# pmqtest -Sp99 -i100 -d0
#0: ID10047, P99, CPU0, I100; #1: ID10048, P99, CPU0, Cycles 153695
#2: ID10049, P99, CPU1, I100; #3: ID10050, P99, CPU1, Cycles 154211
#4: ID10051, P99, CPU2, I100; #5: ID10052, P99, CPU2, Cycles 156823
#6: ID10053, P99, CPU3, I100; #7: ID10054, P99, CPU3, Cycles 158202
#8: ID10055, P99, CPU4, I100; #9: ID10056, P99, CPU4, Cycles 153399
#10: ID10057, P99, CPU5, I100; #11: ID10058, P99, CPU5, Cycles 153992
#12: ID10059, P99, CPU6, I100; #13: ID10060, P99, CPU6, Cycles 156576
#14: ID10061, P99, CPU7, I100; #15: ID10062, P99, CPU7, Cycles 157957
#1 -> #0, Min 1, Cur 8, Avg 5, Max 18
#3 -> #2, Min 1, Cur 4, Avg 5, Max 18
#5 -> #4, Min 1, Cur 5, Avg 5, Max 19
#7 -> #6, Min 1, Cur 4, Avg 4, Max 17
#9 -> #8, Min 1, Cur 9, Avg 5, Max 18
#11 -> #10, Min 1, Cur 8, Avg 5, Max 18
#13 -> #12, Min 1, Cur 4, Avg 5, Max 29
#15 -> #14, Min 1, Cur 8, Avg 4, Max 17
look at those Min values being all 1. we love to see it π
π AUTHORS π
Carsten Emde <C.Emde@osadl.org> β thank you for your service, king π«‘
π SEE ALSO π
bestie that's the whole page π no notes, it's perfect
okay and one last thing, the lil sign-off at the bottom of the original says version 0.1 and it's the pmqtest(8) page, so there you go β version 0.1, pmqtest(8) π¦β¨ periodt π
π¦ where this page comes from
- arch rolling: rt-tests 2.11-1 Β· GPL-2.0-or-later
- centos-stream 10: realtime-tests 2.11-1.el10 Β· GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-only AND LGPL-2.1-or-later
- centos-stream 9: realtime-tests 2.11-1.el9 Β· GPLv2
- fedora 43: realtime-tests 2.11-1.fc43 Β· GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-only AND LGPL-2.1-or-later
- fedora 43: realtime-tests 2.8-6.fc43 Β· GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-only AND LGPL-2.1-or-later
- fedora 44: realtime-tests 2.11-1.fc44 Β· GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-only AND LGPL-2.1-or-later
- fedora 44: realtime-tests 2.8-7.fc44 Β· GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-only AND LGPL-2.1-or-later
- nixos 26.05: rt-tests 2.10
- nixpkgs unstable: rt-tests 2.11
- opensuse-leap 16.0: rt-tests 2.8-160000.2.2 Β· GPL-2.0-only
- opensuse-leap 16.0: rt-tests 2.8-160000.2.2 Β· GPL-2.0-only
- opensuse-leap 16.0: rt-tests 2.8-160000.2.2 Β· GPL-2.0-only
- opensuse-leap 16.0: rt-tests 2.8-160000.2.2 Β· GPL-2.0-only
- ubuntu resolute: rt-tests 2.9-1ubuntu1 Β· GPL-2.0-only
- ubuntu stonking: rt-tests 2.10-1ubuntu1 Β· GPL-2.0-only
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms