pmqtest(8)

πŸ“¦
version 2.11 Β· 2 versions
, in arch rolling, centos-stream 10, centos-stream 9, fedora 43, fedora 44, nixos 26.05, nixpkgs unstable, opensuse-leap 16.0, ubuntu resolute, ubuntu stonking

πŸ’– 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 is 500 us). when pmqtest is called with the -t option 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 -T option. yes it needs -T, no you can't skip it πŸ™ˆ
  • -i, --interval=INTV β€” set the base interval of the thread(s) in microseconds (default is 1000 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 is 0 (endless). this option is useful for automated tests with a given number of test cycles. pmqtest is 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 -a and -t and 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 is 1, 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 β€” use mq_timedreceive() instead of mq_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 πŸ”—

mq_send(3p), mq_receive(3p)


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