From ab5e1e245d34eaceecf71f6fdf0c2b6f235aaed8 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sun, 6 Sep 2026 10:31:02 -0700 Subject: [PATCH 01/17] friendly --- README.md | 41 ++++++++++++++++++++++++++++++++++++----- examples/publisher.py | 15 +++++++++++++++ examples/subscriber.py | 12 ++++++++++++ 3 files changed, 63 insertions(+), 5 deletions(-) create mode 100644 examples/publisher.py create mode 100644 examples/subscriber.py diff --git a/README.md b/README.md index 23d3b9e2e..73866adac 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,40 @@ -# MSGQ: A lock free single producer multi consumer message queue +# MSGQ + +A lock free single producer multi consumer message queue ## What is this library? +MSGQ lets programs on the same machine exchange messages. A publisher sends messages to a named endpoint, and subscribers listen on that same endpoint. Each endpoint supports one publisher and multiple subscribers. + MSGQ is a generic high performance IPC pub sub system with a single publisher and multiple subscribers. It uses a ring buffer in shared memory to efficiently read and write data. Each read requires a copy. Writing can be done without a copy, as long as the size of the data is known in advance. This library also provides a spoofed implementation that can be used for deterministic testing, and visionipc, an IPC system specifically for large contiguous buffers (like images/video). -## Storage +## Python quickstart + +You need Python 3.11 or newer and a C/C++ compiler on Linux or macOS. From the repository root, install the package: + +```sh +python3 -m venv .venv +source .venv/bin/activate +python -m pip install . +``` + +Run the [publisher](examples/publisher.py) in this terminal: + +```sh +python examples/publisher.py +``` + +Open another terminal in the repository root and run the [subscriber](examples/subscriber.py): + +```sh +source .venv/bin/activate +python examples/subscriber.py +``` + +The publisher sends `Hello from MSGQ!` once per second, and the subscriber prints each message it receives. Both use the endpoint `msgq_example`. Messages are bytes, so the examples encode text before sending and decode it after receiving. Start more subscribers to receive the same messages in multiple programs. Press Ctrl+C in each terminal to stop. + +## Under the hood + +### Storage The storage for the queue consists of an area of metadata, and the actual buffer. The metadata contains: 1. A counter to the number of readers that are active @@ -18,7 +49,7 @@ The counter and the pointer are both 32 bit values, packed into 64 bit so they c The data buffer is a ring buffer. All messages are prefixed by an 8 byte size field, followed by the data. A size of -1 indicates a wrap-around, and means the next message is stored at the beginning of the buffer. -## Writing +### Writing Writing involves the following steps: 1. Check if the area that is to be written overlaps with any of the read pointers, mark those readers as invalid by clearing the validity flag. @@ -29,14 +60,14 @@ In case there is not enough space at the end of the buffer, a special empty mess There always needs to be 8 bytes of empty space at the end of the buffer. By doing this there is always space to write the -1. -## Reset reader +### Reset reader When the reader is lagging too much behind the read pointer becomes invalid and no longer points to the beginning of a valid message. To reset a reader to the current write pointer, the following steps are performed: 1. Set valid flag 2. Set read cycle counter to that of the writer 3. Set read pointer to write pointer -## Reading +### Reading Reading involves the following steps: 1. Read the size field at the current read pointer diff --git a/examples/publisher.py b/examples/publisher.py new file mode 100644 index 000000000..a0fbdf9ad --- /dev/null +++ b/examples/publisher.py @@ -0,0 +1,15 @@ +import time + +import msgq + + +publisher = msgq.pub_sock("msgq_example") + +try: + while True: + message = "Hello from MSGQ!" + publisher.send(message.encode("utf-8")) + print(f"Sent: {message}", flush=True) + time.sleep(1) +except KeyboardInterrupt: + pass diff --git a/examples/subscriber.py b/examples/subscriber.py new file mode 100644 index 000000000..d84725215 --- /dev/null +++ b/examples/subscriber.py @@ -0,0 +1,12 @@ +import msgq + + +subscriber = msgq.sub_sock("msgq_example", timeout=1000) + +try: + while True: + message = subscriber.receive() + if message is not None: + print(f"Received: {message.decode('utf-8')}", flush=True) +except KeyboardInterrupt: + pass From dfd88cbb45d1f27777c0eb1aa8865a157884ce5e Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sun, 6 Sep 2026 10:37:46 -0700 Subject: [PATCH 02/17] lil moreexit --- README.md | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 73866adac..605874f9a 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # MSGQ +[![Discord](https://img.shields.io/badge/Discord-Join-5865F2?logo=discord&logoColor=white)](https://discord.comma.ai) + A lock free single producer multi consumer message queue ## What is this library? @@ -9,28 +11,20 @@ MSGQ is a generic high performance IPC pub sub system with a single publisher an ## Python quickstart -You need Python 3.11 or newer and a C/C++ compiler on Linux or macOS. From the repository root, install the package: - -```sh -python3 -m venv .venv -source .venv/bin/activate -python -m pip install . -``` - -Run the [publisher](examples/publisher.py) in this terminal: +Requires Python 3.11+, Git, and a C/C++ compiler on Linux or macOS. ```sh -python examples/publisher.py +python -m pip install git+https://github.com/commaai/msgq.git ``` -Open another terminal in the repository root and run the [subscriber](examples/subscriber.py): +From a local checkout, run the [publisher](examples/publisher.py) and [subscriber](examples/subscriber.py) in separate terminals: ```sh -source .venv/bin/activate -python examples/subscriber.py +python examples/publisher.py # terminal 1 +python examples/subscriber.py # terminal 2 ``` -The publisher sends `Hello from MSGQ!` once per second, and the subscriber prints each message it receives. Both use the endpoint `msgq_example`. Messages are bytes, so the examples encode text before sending and decode it after receiving. Start more subscribers to receive the same messages in multiple programs. Press Ctrl+C in each terminal to stop. +The subscriber prints `Hello from MSGQ!` once per second. ## Under the hood From 47dea652c589ad173254565ac0792bf2fd5b4d45 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sun, 6 Sep 2026 11:02:45 -0700 Subject: [PATCH 03/17] lil more --- LICENSE | 21 +++++ README.md | 67 +++++++++++++++- examples/benchmark.png | Bin 0 -> 54719 bytes examples/benchmark.py | 171 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 257 insertions(+), 2 deletions(-) create mode 100644 LICENSE create mode 100644 examples/benchmark.png create mode 100644 examples/benchmark.py diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..43af41c78 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) comma.ai contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 605874f9a..06487c0aa 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,22 @@ -# MSGQ +
+ +

MSGQ

+

A lock free single producer multi consumer message queue

+ +

+ Quickstart + · + Examples + · + Contribute + · + Discord +

[![Discord](https://img.shields.io/badge/Discord-Join-5865F2?logo=discord&logoColor=white)](https://discord.comma.ai) +[![Tests](https://github.com/commaai/msgq/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/commaai/msgq/actions/workflows/tests.yml) -A lock free single producer multi consumer message queue +
## What is this library? MSGQ lets programs on the same machine exchange messages. A publisher sends messages to a named endpoint, and subscribers listen on that same endpoint. Each endpoint supports one publisher and multiple subscribers. @@ -26,6 +40,55 @@ python examples/subscriber.py # terminal 2 The subscriber prints `Hello from MSGQ!` once per second. +The core API sends and receives bytes: + +```python +import msgq + +publisher = msgq.pub_sock("hello") +subscriber = msgq.sub_sock("hello") +publisher.send(b"Hello from MSGQ!") +print(subscriber.receive()) # b'Hello from MSGQ!' +``` + +## Benchmarks + +Run the [benchmark](examples/benchmark.py) from a local checkout: + +```sh +python examples/benchmark.py +``` + +Reports median throughput for 64-byte, 1 KiB, and 64 KiB messages. Use `--iterations 100000 --repeat 10` for longer runs. To compare with pyzmq: + +```sh +python -m pip install pyzmq +python examples/benchmark.py --zmq +``` + +Add `--pipe` to include a standard-library `multiprocessing.Pipe` baseline, or use `--zmq --pipe` for all three. Pipe uses raw bytes without pickling and requests a 256 KiB socket send buffer so the largest message fits before receiving. It is point-to-point, not pub/sub. + +All run in one process with one message in flight and include Python overhead. ZeroMQ uses IPC with XPUB/SUB sockets to wait for subscription readiness before timing. This measures sequential send/receive cost, not cross-process latency or maximum streaming throughput. + +Generate a plot from a fresh run: + +```sh +python -m pip install pyzmq matplotlib +python examples/benchmark.py --zmq --pipe --plot examples/benchmark.png +``` + +![1 KiB message throughput by backend; higher is better.](examples/benchmark.png) + +1 KiB messages, median of 5 runs × 10,000 messages on macOS ARM64 with Python 3.12.13 and pyzmq 27.2.0. The script prints results for all three message sizes; the plot shows 1 KiB. + +## Contributing + +Issues and pull requests are welcome on [GitHub](https://github.com/commaai/msgq). Run `./test.sh` to build, lint, and test the package. + +## License + +MSGQ is available under the [MIT License](LICENSE). + ## Under the hood ### Storage diff --git a/examples/benchmark.png b/examples/benchmark.png new file mode 100644 index 0000000000000000000000000000000000000000..45448ca8cc6742d2461f2d60825c052f18ec2f04 GIT binary patch literal 54719 zcmeFZXH-*b^zLif=vKF)A|TyDQL2FSW#z;yd+tMr z#zZvl-8Kr!!eN-wSnVmtXCuYmpFeuEyNjS}gd-64!58E8%|l&X{V&V2@6Q)*MGS;R z9K2QW9h`XlyqUN*sXdV{O~l~{IKsj7Qt;Ztv>Q+EfWO9gH9u->(EIo8p|pU%Uj6&_ z-PI%iec=1K!7e#T4T%B8>lym`ib?(C62?{3Ba{rBNN?=ETl z&*uK$ox2jql+dkvtpX-#t5OHF0Y~xEe@@_`FF3gTA<*(1mz;y^o0G91%0TVGe;TY2% zI4Mh-38$nLn%CC!w9w)y*!0xa3uqW&RRqzi!E1z+EaCkx?0*!MfN$tpMIerDY%F24 zCgILWg4I})%&x<&#IvUc)gZ%EjaY6D2z1mgBiux>qWQ;7j-|oKoVPJm&4mSzz4Fdo zz28GkP|Jh~pw@9L@o!DU9K=F#w4=wm6-=%85>zNYnjN$EA`TQTiMNnanyAkabER9l zQ9CG$ig^@iFCVhFBzfXp2@mqW{Gv62rSREBQWIj^�Bmd)<%>>w4R?_DRTgKrA2* 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
veNt^a>42AKA{CeeY zVtHNG!n0x}Tg;egRCpk!vV6!i1vIV@zEv;| zW@VaN8)d^0IPOjT)Krj*$DuKCwvG6Pw+=d)DKbcDiNGjkHA>zrsZddz6A)nL=7@rj zzyJP};!oXg-K8zfob({p?MDNFk|Ir2xHa9rxfr_9yM#IEF%uqHkw;a=7p*8P3<#hw zY<4}dC7a%f<^cm4vQYuP{k*6A(O8 zNUqMyTQ3vaMN|9!0DFh6xKA-8{5;}o}kJCtasOc_FW%nR&hxB7`2Tr;J4ie zj7{E(45(!$^7-8>j8;Kyq)F{!~bw!4EP=|TxP%xRGky|8 z8~vnH!-(RY)NqNbqSXP{I7I?iPy54xB80*C86mToRo-))F}Y7B!m5zi0Vk~KnA+XQ zZkR^)`9DBc0>CJ8yZ5K?ta8>N0e%*~V>J-^_fd%+(2V2G7g4w!0=g@IZ2JT?y0EzX z!m^gmTZjG2mtJw8m2$(*g;P#nYYLA!jnwM6;`)TvyY^NUiPG zX_UyGKZB6t4xZeTd~&B-%(2fKEb<~(RvUl9b^T)9Y+=5H$v?XSd?+r6AJN>4a?G_- z^wM8xy8QTC(|gOK3~<1fT5nQ@9|gA7W5J}leC6d`Y1{eF!(&h!K}FkB)11X6^xy|4 zz&miE^Vi4DgRZs%fah=pzP6PUQ$38j$<}iCRH*=W*7EOSn+HO-_+T@Hv4Dp~6)mGd z%7>nP4^{u26PbNc5567Zp39))rPHOwVTvKNb>DhExe|*tDur(hisrCCC}praqdP2R zmgkSqm%3_W#8agl`oSNY_Z@ju-D2&7uW;@bmKJ1vb?DHjSLYH}Vft6={)pT>prk?A_7-`qoTyA4ui6GGe87cCu0IQER#aaqfq@3`b6)pw{ zHkom=Pog~{LByj)T32mREggRgPG3RgE&XKN?;Vq6-C4DbaknE*gPV<-=kz80RXhWt zQ1+P`Q%@M$29cm^Q(Kg?!m{6DU8^5iT3Gg%4A9@mw+*%R*PGhGT^4r6;hWYse*Umk z0+%qF;0hr4X9hcfM&S-!?3M}WfbCVT??=Rl%0~c%v%y%AHp0W6U5ThFUn4YCIavO%0FLD(j23^KHwFkx$wk0vyvFNP!KIZxmIIP4 zD;WK$n(m==57Uw)mmS8C0q?Lwv2Yr#cy?`uwm!NHC{Q!#ihva2$^O+#f7$k`vp<}9 zHd%`-6)Ez32v1a#4;c4JI@uVbSDp^>Y$UkJa*?z-`QcfD5P6zx3z-@|GB zb+GiR*6zXmw}!^%?))el|3Zdoz&9V%^6N7Qdsg^B|<>iNcwEZ8x`~lF#{8?3rfMB6F z2^TqZGH(tlvyGC~ zuL>l)f`CvxOA>IA|5%3K5D{@6O1H-wo5nJ{n*zIRzplgjfH`j;<2co8i*#(Kn;jAuRvmBB z3Tk%)i|zA-#dyNjSgHHW4?-Wyxgtdu(_Q1uK(E>E_ZfWgL~|^Mv@C3Qe`=Y850v!! z2^p?)P8#>h9=kFFR~gG?bnFnkdkDT01&=%v^Q7~QdV9#uX!TT`3&$z3 z8xT?S6PlB%cCE7%fiFBF0UUN$mb+sNAc&NT0(;3bAa=8=(I=ItlkPu1LhC%nq!{j! znMZH@3QEs^b%UC)p_5?4aH0HU&Cllu;3ZQm!iJZdydu-m#m2nf%X=kcOVQ1=E44RG zl4i=f367YSh*W4ixE2>d`rRW>w*f@2u)^4}Ar$x@U;7_3SeKtHL*izI4bvHAJzPYn z*@8E8uR?FXzvN19ZPh%nF~bNXT-jd-pg)mLacf_BBfuwN4gn|GBpx+$o%@@AFuBvr zdqRLtB^N`&l2z|Y6fBevjI!kwKFF!AfRkJ{aDA^Wi(mjd9}nx?$t&U)(^cEY_2p3n zhAyyKIxRw{jjWZuKN;|bR%^FWG`nYFw+3ZE;QCrgr?n!O;a!GRZLBj;y5R+jgnHwc z#cD!nA3|`gk{2|Uvs@@-HF7)x5^}YLyk9*l$@!~_T|~S+$j`=g0orH}*6O<6Gu}A>>uoMGC#juCzM@i)8&1u>`5^mO z`G8|o9LjuWCSr#EOM7^M`i)goh^NL;wC!t~VLP1xh5?h&=C`W}#JM>l6y#4oGql$d z)ti_<)CCM`=}-?M48vAE<1tly+pmT@Fh*y0-rr0yK!1nQQTmsUN8xw$QMdj2wLx5!X^#Df4C*TgI4%kh@6?UD>k#O zeqDCcna89Lr!d z0HH1_Kd1}>jY`9eRJ+{JNcqG+q0As0r%iDC?!Vp$g{z668vu`37=bd?xV1YF_cu+xle>XWh%Nm!C0sS>&q@<~(b94VQkbvMhxEa2Hfit5fHqaHnk)U2|Rg)Wl zD}NVvceeh}%4y~E>UUm|o)GPwCu?}Zi+Tp_9Ijp}Fi1T4t{|i8ide=_A}z3gyn17K zs|wNQ8DVzgSEkeYyNJ2o)ETY22s`F+G0?HJ+^5YSCP`Pdv*@*LJ9I=&u*7jFiK{N} z8;9-gp`3T?M;Eysj`;>_5upI(-L~vLY-&reE2um=m(qB=ze62ef?jrdYe^I z3+**FTl=B8x;wDo#jNm}XI|*tjg_UccLh?Fk1X2&>8*d`LiX-UXL!DzP9HjEubxcw z?iiCpv?r(}y$NC92*ap?B{h#QK=N-KUEE;lp;PFd?R4*!kDdV7$dh7y#Ar^m{aVOQ zgd~+Kk>*cT6?v|eHyC6Ebv>^Jogocle%2Vx8jRDFp*?5PC@D@HeGNF+JmE;XyER=st=9!zn$}CPvZQwUj1!EL_Eu<)ZzunKS zjf~Qr5M>w-dMr4X5Oe`&nG{xVDbvW5UDcy|CQ|dA$#TN;sLKKL!!PIFu?z{9B-{J& zGFs@U^_qNbTBx!?ge}hbrI<=# zD;|9wuS|rr)?Ys{9?c;i^8pI zA)c@~T#_x|5Tk#T#{C;(mn$Q4Vgc4?{UviC9l^t<*S-rV&$0F;W`RcX!;?&j4aE#5 z^dFk*gV>7-pl)={&^>Dt&>NpziYo=FIUhp*#^T)ovHv9lAHq<4ufi)}G3 zl5wr3hElhEIp>pE6jQDQt0pR=gxSsr@^tgIQZqoCpMyA|?|$yA!PUesD>a$K1W)a- zL-P9c+Y#ONjc9g9KHtYcRLNJiQ-*hOWjF)eb%EP+F`m$~S2g0J!voNH{nEvX{&*6Y zu%PR!JN7-ie&SfbIPtsu&hp*4FX4e@DZat0uTemu3|()z;idk+5C|#0U+i1R zn1p9D`MqDtDBjfi(WZo5uY^=9uaBFBwK3~U8fW60a6W&kl=VUL`26!p&PGB0WiD##56{Pzz9)%v?H-q(m}Rcu!(>5S9$=1 zOEYwVhop4HUBWV+|Jp-U4Iw`7$K1iQHumie4TQ@KA(8JHO1kWi#}RHLUl%QdB`J%3co5TLs^GvbfdA|5>|~i;S_SB)%+|^9^O7dv7u(8^HUJB9z>}o#;6UnqoCLfcGAL8QF!E2#5;J3Hk)SH}DJ_ zmzk#H%Cz7)rF*X5XS}~k7N_!@(fx4nQGpoEH5VUC3Mt$_DD%Xw8xB?&$p5{y^CeoH*^QWN8~baW-y2*|E$Czu$rFi0?8;A=r5L^MEUcU((tJlDuT zzhUdS2EtRIZuKGT4M}ybKseGbNvrhTVDrJ76(4lQjR1609raH0@7V$dF4#|E1^;U= z!g5A;8#FoR`T+r$uJg&H-_RsO@6=ry2PcKk*J1*EI??4@fw6mu%Nj2bGB>0-fwt!k zJK$i-HMR~|jH><`RwxEH;$aPo5kp@dY~AcxZo|Sh0K?20PD?q6%R0crX{6BZ$lP$r zyRi@s9Zos%7Ci&JS-b%$cbns9Rr@K4J*jFQ$L7NeZWWfsdmIl+5|@e*S>F1}v;&cJ zidg$@-o|b=>f~{e+qWLnQwoRpHa1c*Wqz@8s=K1TI&B6j8zWrK6wRXcg89}VK5A)L zmZ3ybjh0$@(hz;v(dymA9htK8tBlUjD(NfBP`7{MjOiwA2)21Y%Xe?bJ~A56XAHtx zy^62a@w`ByxuR!;ynor`4=sxvLfEXn^Vw8^y|h|riPQMU+bzfi1~DYW-4Maugov-! zEUwSjOu|9FdbChF`m0KQ#I}x%@Qjj8?a>+U!tneRx@D^eBA&u6dPG=6!B}GQ>El8z z^bJQWSuMJ;J?p*l-kpsUal=YAGs8quS7CXfc|S+06$=q+H9530*%Ap>et+y>+wSTv zfs!kXZdf{F*^SKfcvOKs&84cmrJz}3^+;i;Sx_q_XB-N@I?~%Sy0x1;R%#!UN8xvW z)TjUBuk|PjzjnX{k(*8vw#aLyKmf2+*p`b6<%F6m1NZDGCkWn3{*lSy}k99Cg$+K-kfNz}XpIB3@vP&ya1_X)-3zN5X^Ac3$4p~H_^ zf8ubA%<&6oJ6Ojvq0(9zla8-ZA_PY@{WWlm?PI3#fJNqw)hUB!)rtKN!kgJYvnDZ28!(%Yf43f_e|Ip zsAhxkm;~%btc>BQI7`E#EE%~aTx~aK(_P#GUFS){HcB;obcc5A^dKxXfVdYvnR2B} zz3ar1m4$(^Ma``c9|ke-QEqp7 zE6Ky1F$-i{5+6eg^&}wMH6}M@v^Qm-o6V_+H9d4TM?4Ct0-6Ai9kxNB=}`e*$(Qaq z1tA`Dyd89E3(>E+rV>ImTd@-oyPgzp9_22J@oM3Q*MLDj|C^s7YPC+kLCva_%bc=0 zDghI30j0F~9tD=h2C8u%frw7W>-K1aEa^ngvKfmWN!?HZar1{fotqsDDmPci5tYHL_O#Y<-JYIjb9?3_AuHS z5t`@85fg@0Pkc zNeM5>)AprXpcDJlDhw~i7$#y53m?g)ViHu#ZhXdpu`=-U3MNRV(Q0KDh70!ZL!H0JzpPp`y z=Ko|SmE?lF4n4%k*e$I9f4KZb0tu(P=< zWM+i|=6{V>B_H5j4lvbb4^&o!1*2VT=&tQ>gcm?48#JL@ME{jNm=5%P`$3OV^x(Lq zYcgw|tZ2>bfj8#0V?l+yuto7Yn2d|F;aFqkpCSbBmW)S`d4$n6nPl+LhiBq$*XJHmZq2XvI2s4UbtE42GGQ|^jR9izhyfbg5f zPySf|#gm=vTHSqIU2wMmUR$E!kz4Js;>N7>gaBI8%V%Cysr$~>km2tJcR3q5=*p;^ zD!s_jq0i7oZ*z99q}B6n5!0lqIQ-Y##@x%s?nPjfn2T)!W5-zdQkK#ASTK=6^8R%@ zRHH2R{Qi8$E*FQIR}vN-j_Gz@c&whNgfWQ1_c9alLIeCmr^H#{rPHGP) zK+D#fvQgI3gl0nGc)(2O2#2|$R%w@b`)^XyT1H7kGj%0(`hDRCNKhcgqwfX$AwSDM ziEC>1G7$gRDd!#5Q^#Jt?x}DFLzHg&GUnGFwS%!VP&bBjRdI+Z)l3dg@BBS4meJA|9(+1DBKnbyUXikA8&jYR0~^+EV%&&fssmeYyrawYtDOd}+0%ev|$oFGyY z$VzliuAa9&g%~BHA9(>Y_2tHE0GWu9)ID*;cp69MrVK_ofp9;^vOWVdl$gXnS`FIXyC00 zN?&@|An*xNEMqDbQZC}zB7Hwj+{P{G!aw{y7t+hKlr8m6GXEI+NSkLFDmHRM+ls>o z$T}|ll)<&ibD-ltZPb1K10X2l9ta~FCY&(+;YcgziJ;{Pl$3T?D#T~_WM{{9z8*)W zS9i;vAde&`p$j|#RPzFinP|$4xtnJ3Wj9RK&NAcXkMB3CM7)iU5j89E)x6VgDWN9E zP~>@(Y2e1DPciUn@LM04$A^>&>++ypmg))l`1lr>`C@jgTx#e{;bP3G`mgFAFJ8M2 z<}%y9;rXD7J1s%f<7a?_8&Nqc$vovr?mtdpsc1VGsop|nb~8rDf0GJUMNb$N;eu`4 z8iv8ZJPU(Pc5v-15FnOl@ELf8#w-pLhcGU_NBqPO-o~P`u7DY6Uw?RFf+I1zK@$ZL zosZ0os92}=qMT}wPr$UDVztw$fr1yJCxlHWo+4f(H`a?eV?x~pkTTyB(b{YfzfWl? ziKVouO8F|MQ}Oc&Wm8qkYDi2-!V59|#IF>9KNqoFDJuR~L(Maoy@Zy4GB3+bIm6A^ z&qZOD1urB{q{k}+<;wfbV1&yTwOabJLVhQ27^DVDB_#Q=YFRi{HsKOS$99dYu_;^# zoj^x5$A>R^*?F5}tYO#6>T!6EBziIKLh?1_z-Ou7kMnfjqvA^M+zQ$e3q&N#VUnAN z7PC?}lUiHkNFP}IJXv2a2>Dk_+r0WqI*KUej=Lm&k8WIffjjq4L zlOQIE)kQ|QCv-;$l!c2}7ZDP7^7UuUSwApd!X8$3&8;%tJ88|3&?Ms=Gng$kHLhDn za+z3rA~@#Fs#)4sGdU}0+_hE?^NFJFO?3@gvNN|kvWYpm^QPwbf4j*S$e1hNJ5~21 zd*sE|Q0jDFtzYoc%aUo+segm9dd+=`F_<%451wQy<~7X6IvTGFTsD-d-UjZq<(DzL z^I@3ao!8Zl&j;@(wcu$Q#jP7ks~5s6DLG9U(e#1l}*5%@PgDi1dA1u%Q�f@*8!pW-_v=FpXz{XAmp zT0phg{Ts=38d<+A0hj1C!?ctuH+jMQU66q$m@q*5c6)~Jn>4lefkzB@7#cN+{dxk+ zL+A*nl9X|;oJL#h!JJZQHDfSpZAxt92`%wRb+l0c`l7VdWSyJMinr?s=y&OlKzSw| zBXF-_5~@_G(C0XYzxJbgBgD0v0qjY)&a;zTC6uoMFMQBhmGps}Y0KzizF-ZDl7JB; z$0#n8e`V7HK|j8bIR(}?cY9k14EZ`dXl?xd;opN9+nIGeq6+WV| z3H?phG8ll-70T3g<1uG+SqZX})RsCv>{*uAafipN$au?w7Sx z`#^J->9CY-_-UyYh)$SbdX`~x@+(8tyIBS%sERv@vR@c>$D-<5MYD^QZ-;YoWmtjj zkvlG3<+UFgzB*H{sKjWSUz2IR{;SHgYIz{aS!A!Rybfnz-!6Ey|s>D~f?X?_EvYz~VR1%I?7&}S`wQ}1;CUuL}@8(I?x?*b7(cU{uqhVq{?rq96kN9Y(?qq;eBfRCBpBL)uK64jn zEQe!2aX#7J%bz;|vbxVh(S}EnoIGmj{JEm~`aFrcdP2O=TZ{>6CbH(Y=BJy`8g$q8 z4XFQvcz^If0mSJ*)kh;Eg1wf;{MMB7ahz<-tM|c3@t4h-cklCsp|UshJJ0u2EOS^& zf^mtYVcAs>TvwkfL7Mwq&jKVv$~MPcZKK)*;&m;PViDxgR7aDyBrAQ^x ze;jm2hKy=!6QAvY;aWXMJ^Knni_ff!z^=%GS^MF|oS9a@^DB5m@pU?r1SxHBiYup3 zDiIH7c%g*)nw|>H+7$hbjK5Z1-}!h4NEMoZ2f&qooEb{&y)11Px;($;3MTpxni|}X zM3P@JAOaf_ZlplK$%ja3(dcHmwojXgs4K3td!$eLDltP6Xe|u(G(hiJLi_&17DVZOP#-;)F zd-JS~({qx21-r$la47LwfTym*rp`Zq7ynm*EWa;?l&4@B9o=nrgHsYeVLeB_0n&Wn zeRKFaWa99zSVdY_<^RRrdj~buw*S7^Kt)ASnl$N36%Y`RsvsRidW-bldkZKkAiahj zq(}$p9i(@VF1-^v(h^$8zT@Nb&Yn5{p7Wct_q>_WF%rmPWv%DbLxMOMYhh^st!{9()fYoRx2LFKThj&qXJ90B z#god#z{!1ar?&#HoM$KaTN{Q0s@rMneeu{5-IF0?Tr4v?S@Q1e1lW3A!pJm>zYKKG zo;~ETcs?_WUA^L<4-%zBfEt_o=$Jge-Xp(!El;;h` z+8T5(=&<|=d@8~C)EDMGKS9frsm2*oIDg@N8mrD0@8lvYaNT%a$tWi?SEgMAxabzY zY8U1Y+V6{tUMFi;jJuo3JDn%P(i}hNOGpeW==?!jupa4f>JT%X%ex(wOzCn+9VaCF zjrI!e9d@qO5$d<#EUTGUD5yTLWDC#tsX`Nzt8c~uNXFxufi!&fyG+#XN~gR)1?`4t zQ5@E^fqPx3I_;jk)THq)`GFd(oV{;K;ko7{xD#y9Piy_Qach>YV%EtoG7QElVBIXy z_r!Q%_sgx*yv};}$g}oC4{Vny6?vPT>q%8w;34<$@%@&@dY4H??@fT;@R~_C#hR16 zsUn@kEvLSzvR2snmkADLL^|Ip?f2P}AWqtv!}6?5M1O5hr4-MslE-+>LcF#2hUlVP zs1r(W_RuoWtTAL!lK>>gJ5WO|x`y&RK!+_|fVS66#azjd;U46&c;{1~X3552O1ZzN z)@AF(O@nCUTMY9`MQIOn5xo3_bud+|Z?reZSpN>4iZ41PY;pHvJRB7)9ub8Q9fsG5=hB=6(#BQdQ~Vke#xs(Larq zg7SNy(g&~*moQjuT~tLH+v=dH9nSLXhJt0=XwU3o?y;= z(AKL+;1ti-+JBihoRAlLp0G3L4WA(K43w~hZdWh_aN)-~ZknK*{iuUR?=SS!PQ{Qmjq}3>DB&aBc z=&taY46Jt>$fn#z%8X;z;?!D#A1mEJf~HaiL3dF3&&05iIDaVuB6;-rm^F zEgQy@j;K0M8#Om2u&_n-#|i-drYx1KBuwQ-QT?P0*1}FajR3Zx0AN6mLpF2JYr6hU zUFr{blWu9_Eq}4OP6AD`OLTozVA-Czi%o)5zBuppeW;un3acCMjxhm2N4!|B-BwMwSZ4{r-GusROS z!W^Zn0<5Y3K1ZFhGG{BmR4BlvyCPpu=LUz2X*=dNZVtS-`0aMIjRJxy*!Sh?7O;mC zdG1s>XSPd-O7#;Z>hC)jQ5(j$1*sQ!|2o=?(__Hj>>sOf`4EtyI)CqMH-aozF1jqO z7C`g3QJRKdxK0wnRe}qFi~XAEV}_;$(DH!wD>1hT5r`1^7^%b+em^ASRKI3f#RJdO z%r8CdzUEgCq^})EuG7?53fG|H+PIJCi=)NOPXnO9JQObwH3>v+OIX^$af0@)=d(iL z-I2$mpVa3lIEb&yP*<(*cU|ZLooy8od3KY^@;&k(_K=5X4rF1Id4(!=(@&UgsEk*2 zWqfdGPbS-{T4|5Jw2<251B!5z57gm47N4SUBble}_g80h#~4eG?r++XT(k-P0Xl*9 z^c;bY$?p;1;J=5r6JJ=QDMvUx>oP|NS{KDbBdFEMx<7rATfFOKE`ynNU)E1o_~KPH zx=1YxDi)1)Eded&urY{jgvMJhnkNDU68kS~yc^L9W9*FUPo0)@35<5QQAv*H;Nq(2 zfP==U9?=q$5s5y9&)UUXq6gSk@J^@OEWgKLT;!Ez;OS?=QuXZ4*r#lSN6!FYjXHT; zo14nLX7NU4VB!w+G4Qnq9cmiI1{K!xIC^4R4CO>DB!y!I+Lg^?d07f$ zzy)Y913DYL;wY>;*HQ0bWIOC3qXKA5*vY=(qs1#i1FAFrGa%+?xJJgwR*#2cn|Ya658 z0`kA-yWQkmD6FTBtI}BYV#aHrr5MQnOw`O7i88QFw_DV2suHXb*1U-u-T)m2%yC@_ zP{3~~mijP~!QsY90`Zh>!aH*;v*sQ}@SJGH15Nd{DL=;27MFr~Sjrdr#sFj0^FAJF z?a|4Ht|s5RPAxmIDi9!TiI~uG9`_3i!2;QOSSL6q%T9M6I(MPE2u4*tp#jgp!mrR?#sob{K<1IZH=eU!{bc}2M>5SdN>Oc+)m?KRS zG%x8poO`=Y6u#?7T|OBHX%4ns^J*?#K~MzCO(|P3r2*2yu$epj?2^G0G42hu){SkA z`fsemL~?4WptRoo@hjo=uF1@gboAF5xFLV2a-4X(+!G}tpJI(`mYSNy3<1<|$VQ83 zLO&>k`${wTygW~i?7QNb9!w)L*>^LN7fY;a*FVR@{knevqw3<S+c1kp4zi`bEm_(mcd4uIx zcCMt~aJNPA%hZl%S+iP3BXXU*7L7RWRl}8jTp@w@Lj9B4d0sExQjW^&Jl_5yhVR?v zy6Q4)?zDCGbV*uGcYTwna|KO|T)~GZ3ugR@jB_)5HDy1-D6dq34>PrW&`8 z46Vw?X|7FuR45x(OU&RV%&NpzBXLwK&+cdw&mgdbBP>V^*ylP_rrJX(6J1EB-uc%r zWkEbmsj{pS$LxQm2+FH3sjDjg{ytP9OEjJ0#4NZtaxiqjx{MOJ2o|~{M8lo>V$oM< zShSp0+P;YvzaQ?Nf_ic4l;pl%{#FPfcj4l*H33@+2N)tRZ^B-zgZ0f!C_iy$`LqNGG-BR+2IF2J$)2leHKt9i@zLE-1J%J~X z<@9tJ@36^}sIV;WhBW?QhOYkCcnN7~j5}~DtIs*OK3weM>DXEyZ>L7%0<0}GMbn;p z4{sV6q2D-}^k{Zar{HFPntVdvG;dC#OQb&Mp_pH@Si(8JRhs#A*>w&R$No&m%4OIb z6r8_{yR?CP6U!v(H(`FD#5k%|IejL@TDxpeZ0CPs7;DmJaQu4#Akqj1kMefnE#EO( zb0KG|7a>$GGd4koBz59(ZBY9cJCT*aL> z2U&L97c)yblF6*fX0?g|?W`4)zqK=$tSXuW_KZ=xTzU6$s2Y(MKv9MY(6GC3H=JM) z0F6%tMi-Ss|Iz5lG8;0?1gOhTSswfeS4XXDE(D4fxn$e3ASN6|hk&JL{$6x{i$l{^ z*jzo{i4aI1ZHF+if7HhtnzGhm5K82%d*bnOP|-~r9}q|nZM3uW^Ydd#AYB#Szt>6Z zm(3AaRWy;8_de%tt!0~P>U~Pj&IbFR_NGQVjt4UYZ7&st;cC{50|rqFws7d4^Xjkr z44b0tK(_woKDK)VjI|Z($_$$Q_2-}0%G#L+p|jPN%P&mSu)!|2^?uxp->N=`4zGsn ze{a+d+vP^(K#KH&*-ARC?$!E!{Z@)Wq($k0f-rNa$XO)720&a=ysKqFeGc2O-I+2SXqB17 zcRH&uJv`k*d^n?DFy0T+*jLLnS{)!Vg+Cje^uJ$Fy??XV9dUHC!bASU0G9q*Siju> zh-#UJ7bmNsxJR3>=S1*Ync%KHIw;PFvg&D2QO~oUwt=`RGTnZF{~13-u(S#|vJFPo zIL$x3Go~L$l$0ud=@;D5-bP63OB0zIGxHA!?EKD|%#!24mbGzm+2iL^uBww;HM)M9 z$;;iGfRtR7;97U{Aa4|~svbPGM^h5KLZy6yvo#(yF%?gK6KrE_v6wg|)jC7aFUG6_Y#0!(?vk?o&ECO$I z0O*}RwP*>|wkCW{UFQni4kw?MzN1|@^5&3V$y5bmB3P@u5Thgy(36U}_`5Z$%}(Cc z8&2)Tm?sazfs3Qd{9QD|$pQvT#09102sIi88uMbir{+DLJwym1s{!qJdypn>rY*cH zwl~G?;@AOQU5g~2?m-EX$`s|2(CH{w2;`Za!D$sAQ^8B1nIm3aB`$a*3#)7ZF&-f>- zMc8kDGHuQ83vx|kQ6IYO)ZN{&5$i-QfM}%)+CeRVYztekPe*W--n$#=iQhZLUNLD` zAOrDNV@v3GbG8%R|10};7eUcW)U>dP?J)BMX0kW8fZm)$vJC&ULAuHPUkk3S8m4 zFC2X)zwn&=Dn)|bifFOWl3k{e(bRHgV~z?nl2jTh!ip98GRr$iU0i>nYW*iU%ckmz zWaYUx#8$i}ZjZSQ%N#KHhSF`OX`Ax3}7zPo`ctXHDSjW6RQ>U||Sv!A*Z& zBI$;9c-2A8v-#eeUM2JkKe$oT8e<$Br2}J(LUU1fM4oD?eeJW_cbC=jZvg5UY{NvM za;aZ#HL2cOKze?&G9`!)Uc(3YG}C3eHiRw^x5?tYAM&sczTFqpVKY#9t7-Fn>4%0~ zlb@fN>+GdXMHh06<3%Za;q=OiK1T*#!zH(9neB@!;NvA62^l*m$^e!%SE>y)<0QR}6F7 zh*_)Z^#WDhwO#d?KoFt5Q1MM(#xpMIqa_PRsoRUap~S(X#9f2KwJ+34Oau}nn(t;c zd_rOjVvJ$OC>rw~P18W2@vUzjFS8n~YcDe1w`Zg=-H*+08S|Nka9Xtnkb-D0n1bIT zx17Xsk%Bo=rB2svqqrE9K3lPH&Z34RXj94ph_10+UwewWadzWRgFtL9@nHpPTS`Jk58_8KYirQvf85h=QS>8 zj62Zf9JiGaS1eDHJI@;ILS}$kgZKq1@wsKc97@L23GEn1U!sIhaGRo1Z)%7%35Y0Xe z1OYzV!yH%}4zL9(VvtX1*^ zY~Ztv5`L#gL!PhB+^5=B6K#|WmR7s4=t>sn*}{2b#=bSkGvdD?o~2J%RbE*FO8zHR zXjq|bhW?BSYPG1g12_g18jF}_6G`M-W)f=ou(~zIqt!&)_Ra{pVT|p+G>yAIZnb(- zq<&wH9~7h}x|61+XOpAhP%Odhe8c|^IdPZ>N(L*02U>m9p>2(LWTRNrMmc5WBt5na zXK^BEs}<^lE#m0jG45dFW6x7H-1o^FpmME9^$mP)vs;)5Zj7Z$+Go0`~ukZ z?0Ozc$yi>v$?LBff?8beZoo&$;+aGsjHbm}Syw-9Im?<+CrI5?+yTy|Gma&G{*3GC&krR+&T`Qw<_9(e=pRX29n)T=^mt zqS_@8Fl@orx_&|thdi{pjFW3Lx&rH(hMt7Dw*P4IArk86shmliaG=$c9S;5j$IKQ0 z%y=aRY?%ZM(|BX&2}0;Ltf3FcwZ*Wja_)A^XM!+C_C{g$2ILq(-jBgvfGUO8H}K{- zsSnLKZ{ny(1Bm=mSvo*&wASF;!9yh(AR)3#j6#}rfVKzgB6Mt=J444e#4OF%y9CZu&Xs&I{R5+s zqknW2C$|mcOA%`KLAK(}so(sOnYsv&@$Dx${jsTx3L64g`EYQ~VLaC_`C7cGv;lp) zY`>+iiA4dxp{<;0h~=FDDoyQ2KkVz2u7C+OF<8e-8~h5c@#kxz7ud?%`qbvG*IjI( z7_6vh(r3p-X+@i$wXfk*po*O)P~h+*&J>t(tie9I{b6czJdaO)0Q<(i*dYknWdQg) zGJ55vmQTUxP-QFjmc!bMac@yPz>2uBTo`aIO7sx-8KzXP27{I|IY0;6@#Hn#(YDzV zzz%2%mj+WPMyjx8zXs4b!NDn4#9;lk;PGEf!T-ycg8zXZ_YX}&z;$P9=${W!Y5TvU zk$_Ja`}qI+Xe4JwFo^AIg(B_lBwKN_%5LJpg<81-`=4Wf<)n+`fnAC-&jCvl_VHg} z(f@hCqW{s+dCHCd&hhIE!;Xs(xtJ8Z*b;dP#>Ekp_6x|C*-X$9$JwTsaatZs3JY~! z`*(OyI`j-3R)r}xUHmjY_eD?Sg77}LFfHIU&YSH9_|5@5>YBm;1Q~>NJDVdl$pGSO z4S2|gt?HJSbbzN7-v$F<_}F&eXy>mW_A*h{>R+@(Hk*G<)5esx)tSU$08LpC>j)}= zifNc1V#f6*OA3})>v^8>`HO!?2l5!q&o?fDj#D6T;c@{@RdV$%aHFSt4(twBYVUZ{ ztLf^;Ki@oV0i{5}v13!j_-tbbFj3tf?jFS3jv>1X9VyoiNgh}@+tz#f2s`9w3Ak}s zH{G!5m5%Gex~gyycJkLnM^fzP^p)e^pZwD&ye>C8X!`v#*)ZD$;)S+$nsgbcI!W;l z`s_ypddD1wr89TFlycOvV=K*h14^jf?!3i3c@AfHLCMgEsw+!%M;A=S{(dSc|IR5= z!&bwsN(b}@!RQ%gN>dQe+JnYZJLub_sKu>Fpi)FygALZcFYKL8soD-;ePL=nCrS_h z{Yb1qoM{MrSMi(%t(_Kvt3kT6p;y8RJji><+JYb4WlZr{KVk;y{atSmgyn8~Jy!TT zT1o|2-~BtFfN}z$s@X`EQ=rLR#M*x2b%zQMIv~&>vMx*8dKh$v1<+1w+rfk$^-cZ= z`Tu;o_O5qXhMi@siM(M*3@i*Z&i+&}$}Bi7r8`76hc?q7m`j}8n^to##0F3J}whF>1OdvKef5>b0d-p6#bPHRYi)F&`Jf6Sr&#AL5(yhS*JEY1rlJy2Ubv9ALoOoBJsqd*#1e zO8bo)ZO%dTXF#$Ie2o8|He*0dkugc^%&_=9I8_t~;xew$3Xh|WHW2+#Q*TN2fUs}ym^cR3u7o%6nReOphgCE9d-mAnq5P;_k;1w!`@bNy97nXYHK#|g% zLLLY8VM~CLku_dI0W=TBfDoA7-XHYk#y`_8eVIMc$pl=LOkedRfR7F<5v@AUzi)`} z3w=_hIMiImC8iRKJSYp=WEV)+3U%%!BO#uy0NuFu8Gs}XdC1FJr3fyI2h$ZG&Tl)k zIE>@OrlB3!ykcy#jHKW{qtJ4VM%D)Rb~@lh)3abO4c0X-D==1LnNN7oFQmRIjFm;o zg<*$XxXlM5fMFIiey}qXI&a|xUHd32*KtXI5!(Z|#DLjwtpL)aYlwKM4*(M1+HWV^ zH9QLmyFo{{@hl*FyhdRpFHN;hB8Ejda?LXMx#M`3fWOJn$vRDW?n% z^!Ov`xR3bh+;UR7-m97Rd(Nf>_m3uHU1wL~oW9L(tJO+J13gN|0|lHd zO?qz*7&d<-<+BqHCVxu97<{}-nXcC(@W!WK;7wLjnIHl7LV9^GeC>lZU9`+awqdR0MNe&14|CC8W5(q}y{BpWZT82p@X zwtUJ+vvjyM6ILq;9Mo7#C&Tt!`4k^;rLS{uB~RSAo)fKa8yfOvrd{=1g2!_v&KV(1 z45Q?t`CR{kSJLY#`|YW3Dp~fg(it`-hZT;}_lAy`U#uSM-#1vpH#BUmT^jn4n^v@p zyS@1;if7~XFwaKjSAFAPYJM6?=reXn7jo)!&)}fFms~D|BySpZlg-MU>di`&>&>c^ zM)4h9J5!Ui=uyM;rk;f-iYI@&7Xm9F>EkV=zAboeTc=+X7IGt<5fGNPFFU8d>G)D) zNt5nFO5LJIPM+RCO0tB>SxdbaLYzk~KbA`(uU3GvHRG=tuOgkX^!n5xce%}kyk-S^ zDu485Ye>u)1Vxir@z?-9iDxOe$2}si#^O=AdIXbd+S|F0R%c~c%LSdR);4bv^bgzg zKQqg>KH3})DmG;4$7>HECmE z>&2W&fjI~y@h8jVK%G~?^o0;H@7mkJAfip{YC@`H*V8!>?b?0CFAv|^)LmGv1LZzvFu z*Jdmk0mG+QrvT8rfx%F-0P`J=t>5$x<(rqmO?QB_I|a<9t80!>wgy?B+fEE0*Hm!q z!@CW?PqpKxDyQlkr#(ndu;vkK@Q$DX~9q7;gHhE6bv#l#7<$2p($X3!uEcQF4g zx+M1qSC5OC@fM5W_Z#BF+=s?BEbxsG z*o2#_Zg3uNDAC3=U+jYAu+~VyBMJ`hnA+m zNM}MkT^{BF(LbSgc7BG$$`b_S9suUBR}Fx{Jt8wY^Vm27>o-numB3ax%j8XRxLB@} z=sw4yxHa6_cXm6xzo{F89?fvA7~5_m+v>}I8a^T zprTyD6i&JaQzzwr(x_G<#eR!4z^DHhH_)HfLz-;Ntf*u=*d8J z=%C2BNTh0%arAA3Oj{Xg=BaA<=BTYY(?)s0{Uv{efMRdPjLkbHIcA<u{ZecBB%8C4MWD(@30ONTt7AfE7B14d~)ZF3tRctSIY5m z`I>QMuL^#~1$^ZQ4v9T`#_D$7NKN%txlJ!wva3UvX@j@u{t_nst|2Dwsb==`ufJa< zM4lfU$C2`V|L9u`eTA;xcvTUD5{M5u7D2QMw@tZO=`*$2al8O1 ze+^LVOj&H;0P6Mm-3XaBU?j-?95fz6?8zH|dvMN?N-p9cK1qB4XOgj^*5WW2OWt^0 z3fND{pE39w*e%^>hQG#63Wbq`@)R}$B|1TAF3M!01Pa#GMF|~pHf4^7l-eA)dIHRn z-kN*IbhBh6Y{)o38CIlXXKY7OQ@7Lxvpl@TJNH%WnQo=th_#Ms$vem8tR;g^Z$kqw z_xlpxxW1u|Ns$&2xs9jy`YH>lJW3TDs0^7}1H#(d=1^fd4o6tB15P+KcCG{v z2_#`GciB_ZpV#8tnhRlhGd-glRQt9}CZoq*ey83RtU{7WZ+EYA@Yk1}3 zm*ojPG<~DJ8D8~tAAa6A$d)OdoC$juah&DH;GmJJYNzDM_JdwO`EtfqP}3sy?hF)r z{=mbR?fs=oT-mOCn!gXm9neHCWqZXYJ?F!{1dS7B#&^lMwd5F4?edkF(vB5lRTo_Z zvcOoXF=f(6ciYiz`PU71mvhfW{1&_;`{UEHY9BWhy^*;&$Y&%Azc-^S%jJ)c3BM^3 z{lX`VYDD9|bMrym$j?PUG)T^RavrH3i*`(PRYc9iCN4e~ja#MXelyjW03{rnyr5$m zRq(ZoUz!atF2s*c1*P|ti#LpcWaRXV`c?|YwBHJyl7vWk7?nP3Jf8@AE)rNhet`bx z7sA2uG%!pn(}ObfO;LL@Xlhn;s4p3$8-K@(4;9que6%%@>DLS2&&ezmgqToEMQu3A)#iQwB&!Vl#+Bp-uQN20IOvhR^WnSU2 zO|+lk)$4EQ#kI~XFR{M9+Bn7=wUWjrxwph% z$n;S7Sl*u@5a9RoT3=o--5(r}%0vW^FQ;^*RB8{sRrC)_4qrdmGVKVV;%qIL^(%}e zrF5OTz2DNxSH7Qe?b_9=oxXay#!Ukd=`*!H3Y*tQ?&l8sDtoaT9KUik>HK@-5^KNz ztee2!G9_ScNxDk4Kpwo7E_Id9X?tWp$c5t7t^D;DY<+WGysZk6Nj`N4-gQ;av=wII zjHYuku;@>kk?zl5J2>i^Cz-)Fyw{}6Jbfya2S)c(I;RnCBH(u$PkWXx$R_`%MvQ~= z;5HAtpfl2I-F1}BVR2;LK&Y46M`*$ZnF@!)br51tM(}S063*{(#B{?-PpTHW_4iw= z1d~E3UrT=M8Q%?q-CS9uWal$J)nQXwE4X)s5~Z1Blis_=ig&4bKJ`&S2J06py3@ym z{g-{*J9aZ;T}++BzxJdsykK;^AYP9DIFUA0}wm$sNo5kx+eFv2ry1_fYs% zzTd-Kq~+drZ^ooMF13p?WlG?)?Pgrf79vx){Bh&Bit>RPUz?Ffnc&}x?G~*tuO$2K z_}d|FE_xxMm;EV?kMP1M9G?i_6?_^>H+}iKd@TOlrCR z>|EIC=yc@xl7UI4>uNOano#FnZcR3K*hzM(u6icxFqCXcvPv(g*Df+!Zvvg%r=q`S zB6wXT;ll-+^TwUG;nJ6xhXVeoY2f%89$AcsE6#bmX>j+cJ3n3*)Y9xtW?Ah{l7@G8 zig_oSbXj9e!{m++rwsUeMdXs7wqUTb24(JY-+F#kCl#S^wHPI?L93uRB@k zQr(+fx}Vm9$KNmYarf?{SA$Pa%&L9UgrZvTaHTXj24tL8-;f2EZ#phFo5njhSS8R8 zbVW~Foi$ZXKj@e`a2z5pesmO;3CXTvV`>w#Z8M9CJD(;%UW;bxCj`>}hp(8hnR#J@T?N~5fo2oC3zDm>7G*lt+*1u;<#O)W;E{|9E zQp)>bA56=1jpf*fHW%32OMSDtf~Q9Cd5TNoqzN|*CFUsT2P?0AfspN1W_|Dpj4D~) zVj*+6V#mmI>4%P@jFZP*SdabP>}T$G?ap0=F8{42D>_*#a5Yx z{vPPnf)Y=RSZz_I`RuEnY?db$YDJ5`j}Ax(z4wK4P2Wj`a~4ueNKCsuUtMP(Vc z#BRI5$baVLef(S%FLott(C_Zui0?L+2#01N%Ie0l8<2^}VwR5Wl+Upvr-<3^@Tx4o zo5qXr%@lZpB?Bum@0`cySom1R^}i2Xe7U37Lpb0zH~eRi4oLABOi&GeB@4UOE)d(% zvf`0~mG;!EfN8rGC3nX~k~=WX%5~cU*jGKMQ@Bv};qHWlOl0S8JO3iM;%|B1r?fA0 zPMvmHxe;s*8YU{&SP!^vSd$6=v}dIC3c{gzHyHJ_&eIp!Dcutjyv-lkz@yD|(G}7A zvf2i(am0g!#6;E&vI&nbm22y5;U^p#Ix5ME$D5g}tP}RD&Ph3vKFqLs^3NUUJ7m66 z6SBXCZ~My|J?Lp0gST5ZQD7Y#6c$xtU+i$Y#b4V)A?U7k7#S18z)f-WM>JLPq^xvg zT+-HWXH#RHnXewN1#aHWHB_&cVW=(YXp@v3zhmuHAz~K_j+04)bf_ER`B>|R9qcCQ zs?_N>t1f{Ztw*fJZ`8ix=)dFXi18lgTaj8`DfD48w-l0fK4dYB+)|l>(=jc~4djRV z36?0_{abd&31(y+u^&kD#tU<+nz`#=v^n8t*Vo?2K*QO!vuR9AmjO*qptAOy>Yv$1 zjJ&?kY8xLU>oSQ$~@( z`p2lRzN61JP5Kpv1EtUm*3QTv9}_`Vi3DeQb%!CxHjd{aKZ!L!wQW_ueU{=z?slDo znTv9vj?SW{kP^l%$_QRY{j+B}impjsr_qmIkW;-x@!o$9{+sxTn}1Q!?DvWEZ2^|| z>#V+OvO%#$4#yswtMaV_11E8XY=SPkQHZ(oA3K}5jdQ9m@d6qfHk}<~IhS8=y%|QP^=>d?I!QH3e&(TB8{270TJh9&-g&|%~DDf z&p%xb93|$_BHf;aP5&?|S3#*N%U!6noWqM_&1!M}!5(U#LZ@So+E{s^S(mnbW6Fk< z*c6%`^&(fx#J8q>Q6pte{yk+jgRi{ITT>gT3e>9&+|4)J_WVpcAAO|Bne{}>b$vhc z==ByOoSZ$GA!SZ~n*9|%R`ipd+`j62|3&2UF6b&`tVxHTPxz%lJ8qzl)51Fg7x6-R zuLv4*@)u^p$ME@6XyjsQmd!?qRUk#IMl#5yhSYf3B`s76Sn=*q zm)G`^Q$uMQz4lUirp_17;K}U6-}REk51`3H5C=y}Q!a21sy4S!z$D6@7Dvn{K-AJ= zTzA8cCl~TsjxnkQ4aEfQW@>l1uv;s}oOo@fb5OFU%cNCUFHEIQ8(V9cHT5sqAU{*^ zrdA?PzH(gt_>{i!@x8a-r3#bD9}iWU);@ToGUBq;m_3{K`x9H)TVHzlzLK*G_e@De zp=d^$Z8SsnH~6u{mu31uHRv;I-HPRJf$AR;PXnJE&b`ZFvzTM|iliwHyBgRvu-C@F z*TLHL4fE)qd-$Ek6%Xf_u!a;Xlyl4_6tV--<>xxP<)mFo%o@9!9G$CjDRYPSvWX$w zL%O7dLjAS2pii#$rRJl=N`BpM`ZJS@IdR!sLv{97Cd!=sTb57@Fp*9nLrKADH4n+p z(=6NEO@r(5$4}23Umy~2!R1yoB z;5G+|(uC2d&(D%xv*qiEJ$IrESv0pcVMAB+0kx3@MqYQv+fIq|T0DJz(9$Eb(>Z>J z9ZJ>q5o9t;bvzj6X#F{(m&Wt&w)wOqv5<=9(xuQ2atLPL(f#mbd^`4zDg&qL-8a{& z92_XZ26E?9ONWvgO5CRu{EJ@00;8+q%!+20y1!mYVn0}%y1!CAJ{Pqd{UEVuSI|vE zGK7pJNIl=BD*0#lJ2DXKDL zCv+qwXpJ#5pV8|#y``m3g!;{)bu7_D20^ffLuUjn-+zr;dn_$o{dme{JHlNywx{}lM5kNDb9q))38Qt;u)NQAq5~oFk#rpj&vka9Y<(i(-})jNgal-VagXR}X?6OOgqZTiY-1UG z3L>_wIwqpJx5puwM`)It^5kPtH9UDeJ7_#zEof`1utW(pb}7HbQkLEbVu#55mWnG* z{5NP#A${RL1Q>6auX0?h$Q$fq_?~8$;12U50-jfmok|3JM3rOibDt#A?+m`-iGP_9<*uX8--|&srYsa=lq+gNt^SSoU$i0~2Y%a3VD}PUdmHT{XqEUODgbVl8 z1NtnT=$ul7C4u6!fJbzh#bkEt)$5k3MH@$+*^ybcFHqS!jvamqu=?;g`nTT(MyYm` zn`+N&>J`2W1vGgZpP#|2%kr6}zbuLcz9Egh`Lit)pYUzm(h3)9S!Sq6(_taqr^ky? zp*yndcBr3UE-Llr^vP?1of!m)O=K0*2Zk~~OY|MKla6@$oxOKA@|R}@o-gj>+{oQU zXFf_zklu{?yWISUQ&F321u+sCR3cL|{dE7AcV&>CLNY%Kf}Q@k&Nr{uZ6+^_TeB^GwAAc;?33-t7?j zjdsx+<_lUs2RNGPIZ?RMTj^qi8dJ;7`xxA#?uLh~VmxTC`;WaJNwKJI?C~~B80_32 zym9D7{`ZWsd)L>xM4M9AWOaV*HG-RVj_p-kh)4z2a%sbFH#T&U@nNPh&-E zz40mE7|V^)ZN3W4*zFwjIM2C&g8SIuCa<(8f7I2nqo{dYr~xx+Ku-lkPbEgenL&yS zBllhBnCq=FtXf@iq%mI_Ec4RujCc6{9`YjxM2Na8{NQEzT}ae|HeHtSCmdK zvAS4CoZtugeC-N)bSwke6a}6v+Tc~Q=QSy}Mw~r-2FJf^nrK6lw}%vZvV1wym9hJr zfrXxL{KBn-ZZuCN5t6dJ zf2+l_T=w3--8xOV9JPIQbT2AZKrAvbiX|S;p`5iLf2le$Dw?G_C#_F?!VCJ9S^KBr zW#)u3XPw&t#Gkefsv{F^FwPh^6q2p#edAS;g(7P{Z|w>rs_vMik2+m_=X}4iy;nUh zw4{}zsNakI{V*#=3siNnIgiy``D;d~kmf3fCVQZCKR0)?_{+?JVv_}P_K9A zP0jVYkDgf(z;i~boWHsgK?4@9!wkr3OBn_Cv#>Z=xSdZIGR5(^r2zco9>q>%r>UeF=Mii%7n0|%XmKOxZ~gl%`S*ly zzP$GdmTo@7mFk{mt?kJu=!+-|F$YD&e&dbDEBQoT->#> zf46oV936q{cQ3bP^r~KptQL9AvC``?N|qRnee<{Aao$_EnkWWdByK{-1XlVfz2}gZ_Jl|2-N1AFoV=O4FbQ{Ug(2 z3F%{mdf%dUz}(s)J?_F*H;bJ0du@cS&{aEVe)-Z!DNI4nmK^7I(MgY5&!-Hdyq3Xy zsI|FL?dNfSvz7J&hvQ@EJa-;u^=Owqa{J>;Kkz^)+vv2}_|qzC=a-s6dXHN@+8qBP zI=ELZ&wV?QFLon_#jV~NTnLfAIQpD|F8gI$!fvk!qm=0dnO=9l`Y5}yZ=7ip!n}xh z{ecN*ZNW=Cl2xO)ef#}F4EaTDP9sNg0tqo;+U<+aSMl7zz@H0V_1K~*1D+!B2@SBC z|Au?}hjm3PWi5M&ry*S(o#LD9(EA3m1hty0}!- zolMYIhsPQ5G(uoVu&0Q=ihRr7T`_Z3-q^zNEmPXfEE@?__77DVSf90K8b-&aJb}w4 zsF^|4)GBm5-62Jx2O?(#J!f<0I%ZHS6*BCek~;E8RO8l&Z_{*Uo>4cbzpZr*^TGmy zuSYcr33SEyd6J%d;B=DuNv2kj**u2ArAK1U5!@`c-MAU6(^&W#A z{_aFID%A_!V>R*J8)jsRcpyN3aRD7_kT9(Fu%kBDsr=S4u`r8!eUukmax#L-BTnCN zZ&G=zc)KHdsJC(PVltM4xZGDSS1;x4O(t97_@;f`d75&1W&pQwyeRQ0y(d)ewj$8g z+r2+=fg@_(MOwEW0bA~Yn@-%m!;BY}5`F`s7;$!isz`bcNL;9{zP^}GEMvr*jaP7# z9?Bp2Y41y@C-y0YL;v%ixy;E?E zu$z}Z3MiLv!aX+cpLmYz<((W^szqIzVUOzZbdDX9e`w~~yYj}5IxGaE6bcteM-*Q6 zrCDBHHsiC(7P|_Wtg?nB2?JEX5t#-qj^!BvbrhbS*EsXjY#Dx6t5KC6VwFt6Jk^q& z8|9W58u#NE)XLV$Ro$YNz^*4H7E5Yj<9NP9X5C35%Rx`L%M+jOtK_NZow}GawVb&` z*=%dcIK@jHSX%Hq4sQx1`g`tsn60{vqPZ?NB(LGbc$^y z_WP~6d{Rpu<@vF18A959_Uo-?i>F?6{@zg+={oM%8FX~Ll&Ug?91uP^>{u^3f_n>3 znRv;SCGq=+Ib8GzSDQ#tS6153gI11G?L6Y?x4bBFZ4a z&W}~~5otU+F>=fdUCJ8h_MelFG3^MoKNYqgG+x#LgvQ6-%dJl)iV?og@|U1p>uoIK ziKRbA-?=Kwe3_9W!+H9lr9+_`_SPgmE1i~ZIb!N{k1<=~gPK`INR^y$@(cNrlG1Yb zIYl^=kYGiG%*tYNL)gk(UyxcMtX48C{D&`2QFqXOB^dPmxUcikh_r=P&G`!i!GV*J zTU_1AviGMCeqT0R_b2IGrO{fWy$56H`nQ(zw{h&?-OU#s8&>YSiBI+$Z$LVEmQrGh zIqH^%=TnEW9JPx|6sgEu3Tq~lJPrim}xe(6Nnu#C`mq-{`JviU!F4UrWa5serILru;MTiE&bCEt6-h~>^mRr229mmbcs z9z1yhI;QVXp@jEiAT~}d6}s&8>TYHMPBz2SFNAEX&kP^Oj$ix&rO=XnMfZJa-7uVH+;}%d5|d+cUtxArm(sasg0eD z6j(X(MELTL%vZOEa+TrkBhH+(tRw3l$y3jwe*8EuaqtgKc3MZ*R9NcAc$YZ%dDdS= zXzHLgRf=fK^Hg0dy>T8}yX=ZsIhU4o=etPG*qQPZJ0Qi=dUj3S{bmy6rx<9u>h(Uv z`ZS_;M%2#HU6+9^DU;-qc(TSFtL*oe)p2>FzY$;QV_sV6J^4sGAp)*Cu)B4~T=AUn zzKVD4bgTYU7Ay0`CzdRT>3#Yc$5-oGa_w7>1_?E4&) z7+BuGOy83mOO~_#ZXBCn6}*ij>3n?rrbXmQA+n!kD#p=o2}SP3?k?siE` zt)5E-5>=IVhpM~~$Kb>jsMJKwm!Xv=ZYs)4Bh}{)F1Ibl?c8TRm*@2af9lCUHEZj5 zwa13zOP;I7%;Bmd*sI_E+C%c2VyJng3)_mHtxrVR;Vo%7g$UKe3auD{5~dY{TviAS zaye{24d>Bh`G_*uHg$zrN!Ym5#9xZ*=qbjK>3;VrKzjA9ZaaV$Q6@PruMMU{r&&w& z*80Std+aToXqT@vVnYj!P(K>6_k^VLUZgTJq$P;?dwGp3x+@4omhpvrO7)MVd(Z1^ z`6^5CREgaRasiaC6kO`5^faQ`e%uIlDHoSe_ZsDDH`sWA%DcPEt?Q0znxDY#4mQhI z0_8R){j_f;mzKC zDM=s|lz}hL&h;@F7eVAieXbG4@HTN6ZI_m|a;N4g&T86>Rj#4=2qfspwcY&Sa4k}) z_vx8pGPfbm=g*g1nIL*=<&GAxAJ&-_w;7;34y$OgWTCEcXrefZ@OHO%O?S$jPf$T5fZ3K8QP#U>x-mq+zkU-}QUUK$wkX z17*e6TS0n^qozAl#z}(lv`$TDp)>d5X-Gysx#ZhXLthDQMZ~8$58-QafjegFH|Wkl zrW4EDriS+o9EE-W!J#gyszza0YO-MrX z%XzeZWlj);6n+PCtKBfmL$v@V)wI=q^ya8Q;L4a2SErF|$i{N4%4Lw<#FehzRZiPT zR@@y6^$@?(t9a0HyJ2=tgu&1MZ$A^ebPKfsjhWF*hSc@_My$n$!W+frG1!w3i|?6_ zm1;a5Nr0>ry0J2Ln|+|zwNc&7(pYw7L~N^RyV$6B>MROaAxxT7ap%f?IeYrE?uwMs z_Tc01!FrLwm!{!~-(M2c>6l_K(L-V_kaguTmXvkB^n3$#dfbF5vs(F63*C;^)?bb3 zAPJZ?dFN?uJBD3Sf{!UmDBifYT(_!$IdMz3Ojn`YnFlxIDmnG5x6<_U9h@m1l8InD z3bE)f@qW0Ze@%qa-`;Q2PJB1!1>!{gemjfV=sd`Y6AIz5fL8Oo-BSc(Xqec)5&=gAg>BURVqxot6o5ZtLjEpXp@z6kY?Arn( ztQ*xneTNEdx(gPi`6l6~H6fAm_1kn>YUjG7q!gjelu4=9)SS%YHNa*uIU5yEZkCyy~l z7cZIpK6x}KB%>K(+Tf5}I93hyTU4IjHF&{ZiMiBxT?%7U90V;|yU0_p4m zGk^~R82!OL|2BNE$7)lwM|UB`FK-8KbMFG+605(QBO*)prV3j?5u?!^NYw$S<7x02 z2xMHD;_yn;w4z0^2th^ecKqziwkqOLu^~Ge#U-Ie1whTy!N1s7DQ`Lr(F+0+wJ#>I z$Ebe8%2g4)qfBph#w8PZiA~Wx%LWH_`AB`ksS%fh#eT#KiHgpn^L79?Ji7JQ-`;(d zrgt$6-L2-=_KG${fc^`|ZBhAdv zqs#O1Z#(tSjAYmJtS0aC3p3&$76dD>~rL!#s_I$4w{GelndO`1^kCNBgY#( z*%z5EZSol2zBg#y8qI!-0b+pwX^?+V#Q2(hdOnHLk|ofI-J08FhWH?_+vfT#85(|_ zM#@@!p!5<4OWw&-W=9I7BxguMW}^>toSn#51sB_rQvsIe+m=u%C~lt^h9|uHP+? zC$BqAqTCsz@A}=|s#4FD+nB!lOG&bQPQFJV%66j^o7P>ix%qd*p;+{JoO}I|=2w;! z=Juh$HO;{r}VM?|-GI`h?*XIp^IHiu=h^b{2qtOpM63E|i(BD1Lwa0!g zRH?*G9az|UpX3_L!x)EFdM4YQ;bPBJ(rru-PWD}tX&Rz|Hb`^E+QTuuSyy&>J*V$Q z`_s@(P6d8h<-JU=r=up0Mn&0iIJp2~;ayod0P;bOC9@V90s!+2MP_;?*s?)UXfR=Q#T_smhbt=3trPpt6oRE`J0JM zyv)c*Ph*E{m;2(3)}a!==Qe1dn?W^5@4@Mr$7>x|ecK;#*t&y<%n1ohBUVs9;-#YBjI+7c9bwj>FCPO41m)kV`}p}KRPX)DmR&R*P8^5 z_v5_0I8a-FLPiglX#k$7))2GdcFX}1_Z53db#AM%Pvf4^46o+xayDwdHxpbdKU7_PTZdwQ^^LG%H zzOmDat~WxmRkx&g|3g}W->~xC|F;_me)&H=ng3du|Hpjp|1`D!v(o?fyMlk6+hV3Y zdyv?;&oT;hvX|h_Ua>EJ&quj!@l9i_a4`wK1-wa>j~wKLnHHT#AYDjUcPhZ z!_KOEi9wNvY9q&mp#mxUoTlp7+O&rJv+buJcC3pzg|Lb{8M;$U)v@&l zty^nrH@O{pK7YPri;KQ^!Z1s1&~@0nPMx=Bli*q235C_ob%)xlu0iJ(uv328yIYGq z_jmSkOx3BbmV!p+*=r4QCg@M1M5P%YiS1tHQzC@V&3i#ff^8|>WJg!SOZJ??G zl4OSM$B$~n#F1p$8-qi;`m-J|3k^|^KrF`QB&@{gunm)Y&pm&{*A_B?VK>o-iqmKM z1|DIZRO=zOBDW# zn=kpIQ#_)qS z1fIbQpDA%~ZD11Q@vj2URvoMNaRNw@1P3_Lm2*-}Kt3-mCD*f*xzN zdq-SXg78Q#4DYRF(sYj_zXT(|g@cFkeOhO``54pycxa{+sr?%@R`Eh$TS)7|q`fi{ zwD=ntFW`q#55A$6>N?vVZ>V*=J?x9?ofD+ZDVn~wQ|jKA_0Z3Bdmc8n0oK}fGPkHN zSM_XFWa{w~I*C!-j|^Y5MFmsLY|kM`PaKm{6p;7N#60BXQPdI%MQcd!h6#rtHvM1P z*x0B&H_89f`c+NKFj3QvqG5)pO;Pl|A8lapg_r+Lgm9M90A(k-Lrw|tBbJw!KS{G4 z{XoBFpozkrJ7>>ggfUQ8sB*K++|`q{3U477C04py<=WBRu~X1E79FgPlm%aV*6o$EKb@P(M+d6ARz z3Se6Y9LfzWM5U70E_afy{8A6nqd&^RDQ}myJX#a1%i!g^h|h~tPL&QUxl}&Vc;?i! zgf{y?%nY3$&O7T>E$3gj?rv1#Ix8+59{3G?(tLJehbaX0=IuL_OjoknL7HVnkiFic zM{h<0(g>JgT=>+%dxDe9(_p0Ivxdv(|8eNe{%~Sp{4VYinfFotOL?F(j(6~6{YE^Q z%qOPwnMl?k;M(8sD-kwH#Wz^^b@p8;oF*nAP$rDB|er0ff6CF{_@*XZd71X-nT3Dmv=yab}B-c)UKdN zvjvRHYmSx;$}snI65uGkt`W?Js=ywV%%(tJ*>Z!-!ezC2@jt+7S9m&7D4Gy@niXRwI?!ukfZYT zO<`j}3GVvMLLA*zSchQsN;{kF%8~hW0nre~UZ_+m)Li1x7oWZxkT*7sqBXz+ry7k0V`;ZauCT zCl5(xiejnlLTm(l8|=L_hh<$r_=SN7c;tdm=#dnsWq&nR37Bo#{%*r?c3_WqYXGvB zv`$*3C9>_N{#qUj7yV?g)b}a;-l-j^SyQL)WSw7F{HdVJ}x zPAv{fwh)n4nuo{$uH{o(x{0L7R(TW>Qt7`q=)p@DjkNMisyrJ`OhX$ zj?-&}-F3IHpUf#$eK6^fZayE>@!fc;7mU@PT~lav7ys4%>oAVg{E4=iG?_A%f1YI^ zU#oeBj#BNvXV(oYJUKRZQ8_=d&GyqKw*n7%?`3+45_~cW8l;e{6h&mNUgD?1LTC6I zp(^J|O{tF*2Q!zluywk>sbpE{@dj3QcAoPcU!ABP1C(?HKcjKG7Rl#ZD(h&`)XfHv zqtc0!gcq-rliVNAB)a-S3Eo^VyBqc>InUf8biB+}d~w{n+&i zXv$sNwR|l|oC|{3DKGERJFEtG-Sg|Kw0(HJ!`E#^s>q_MT~P@!d#VoiXC1{fr|{3G ztV1+Z=Th@*e?H*@Cb#jG&kuA>Ebp!sbeujvx3wh3|(YGSiv@S_Yl-Z(E_Kv1WLN-2FLMZ%ze9igT?yV8wQt#O?C6b zt6tuAh?}t#-=88yAHR$aXmkub4nmRN8TK z=bmlcv$I1@kbfN%G9()wq?3xPEnKTTs&5pU;~aOE>Nda0KFnj<<4;n*wyB0 z^b21eH^x(ENq2$?RD>4_6M8b5D|K8`?V~q*NZv>Js!)f};U5q{h--1( zNmA(;@@bsvcf=!Xu?OX(u>*2iG_a>`b2&bKYDaBOqFv&2QGOb%5m2S@!_Y#eln!$1 zSTbjn+@|H+Jkc(Mak*Z-?z#r_*0-#VKD6^!@S072F^Zp$tDy;!6Sw-= zLJ&OKsnS@JO6*a8de}p{K%VULg^9^ zi|Jf#ruw4==Fvhpd2Ge4O5108tLy7An?*^u*~qErI=9A3Jygep%7lpDiTQy? z`=MAR5tz<%DAU9_MOo5tae<{VaE5}9^0ob9wz<9@n>NhWpxk8DB%z5m+;H<`b?o67 z#$LtQYopk>I0Tl=q(x9cZ}7vWZr)EPEl^q%ov#*BeZq1H@zC8BZxZIt=*xwR7uQDK zx{Xb`x~DK9ejMHf&O;HVY&d(Lt_U`6K5t>j^u^}h4P-Ht;dS0ma^KxDJU97GY7Y}J>r?KU1`d8=IqN=AZDKOiKC4M=jL z;X;|BzAcaKgp2HJ%#=If_)yNLZUNpg3!k3-;5AC7tLxf2HAA0N*^TCY`JE;=WI!2uyCkp%syM_G~SV$v9BZ^v^qUI`xAZ{NMpNX^bZR}^c6w|?4`CR4`X zq90s7cszEsbdaK%sNmN)=w;ztt_VNi{DB5r+&oqH{x(>w$3!g*#1zz^|5>Pg_}3Mq z#K*+i-yIKGSUb2pywdQ#ByXd1ftzi$x)=o7QKCrRdAH>t2UD!L2* z6$IwV_S}Q67ld39F#CqpzMor~z0@ z{;Bn|AbSgsIQ5t^Sl^bHuQ4+fuP82cAnB-U>Q;>fRz#wLi-&KMo1M>m*g_kuide`mI?P7}<7kwomF}i<3BQC{&^p)fmA-w$WZC3wtn-5jm z)#~IU>@puC{i#2jf?>zrs7t!7dbr#w%mC)K#D-^Y;AZr!6rYvZ-s>s>#PUrm6o7_9 zq!nFqm_cw1YE)A=hSU@1WDEF%Ie1=AT8scJz})KjI^DuRaRus4FYsqOjO90KD)oz= zCvRHrbb{u1ERvDAegE?V+k=+RX3ch!b1rj1aZ(f(PJk5l&O~WsAu1;EZ09dvEK2I3 zC(M zu3lBxE*uwz)lL1g8`6fagWcf3%ctso!0`)MI|?Z&wP^UyS7y2$g@t>8x>ZYK*373^ zw`%kT!YJ!;*`Az03h#UvBNQ_<9s{{UTzYO#$;Hbls}vq}ZEY!C7Vd!uOxF-U7Hjsb zWEyjqm#Z#4Gq@-~D^Z46Tz?qHboydN&~8b>sd2{2BG)e8N|HeffLQ|lyOtHML)ChL zIWNNy6#9Zk;q2j-O>j)%WI5DludM3(bR8emNcZFyd5{gy_ft>L~k%Iw46lC0d*nN*9aRbc80v|^!s4sn-8B_~ukkLeLj zPc(ySwg?mhwck%0ytwP;w>ZLXv0m|(^|lu7@+fWk0ilc^CpH`ry*+XvnPg{Y+x|*y zoRAvXg!&*mAtr`kjxiSS=Xs;v&OB9?Uxi&94b*dmPYXHVsU9`!QS-B9D}g9&bKi5v znbDm(gXzRqBCk4Pd+>3fIG3CBS!?}7t=OZ!o$Dd>ZBB~B@6GH z&&P@C1GRAL)etqtmN%eT*MZYj&LEpk04mY6#x-l`raJkPzEa3>1<&Prt?fngBLCU= zl|~*Ha~bb#ylMs2!IQ0{I?t-|I0M>BId!a}@8t_`Cn(K*sZK`6@ri#`kecs$0}GRy z`S2lRj*l%~MVH08p5w0R@_}6WnMncIoW& zddZoyo;|ff{qrXDe+MSnr7Arqf4ptQNh);@DPzhFl+v#F# zh{U?5iK3<@W;m~pi+NrIm!CGvk?D1Y%eeS)Sd{~2g7SsQh#Kiy?^vyfSSbp5`64Y0 zkWe>t<2nsTpDpVJ@3-m9#y^(&YodIRkXU0vT(=>2Ud4Bd#q;MN`?`+!v zw%WJl87=AO$YHG!mLi&KO(kiljzWXpGOJj6x_;Df!;gL0qI~zmNUqvmA3{rBXY>G_ zBc4x!icb~_3)`8hW+~>h73~TL^!Z6ZP7(mb_j!u&xa!}@k}ANYYWY< zLBSNNnn4n1;ID0Kx`8~-hTr`zESKL=^)7JkaeQ!aO-+qXe1TcbOH|ZThtE^vt(GFg zE*`r9IZJg_q7pR6pKA2#Ogrspy3hx1F5dj5@6!X0Mj@9V=iznmTD57^X70-lC34nn zAvk41GXZT%7Zdx z@7#S^VGxKiJXRWg2iYilu$7=lZU!214+u3Raqfi5%qY*lS<; ze_RQT$nIseEz9jP%^=rP+{c_Tgkp9(PPL6#+lA}4yAvUP zDhNfD?+anqhrw^usZZw-2Cih+8T!B+)-M&S|kYjB~ zGC@GUl!lt#0{SdkCz6za&Cl@i&niE z&-C7(;QT(Wh`e%LJ-0hW!1G|cUs0F-6ove2G3KXYzOOIFL3+E+dP}*gautMbBhv@q zbGvmu9J!4fhQYV2t17uKoy(`cC2G2SK7@m1ns_QM0Rr)=0c4Kdwe*{ z02Xi2z}>Fe9*3%krHL`!SZCT@%N$<8@b>>ym=gi?EMY0K$;XNF{1-F8LL03!Y!Z!r zbknz)K2)@^5&2;7fxL^w!lvjTu3E>2u^zfaVEH2(hFtyY;4du6XYS$Hk~v{ zT}*)Y-CeSmgQW#K?IfyVr;OEe+q^sDm3KA;;&J0vYHG2RH2)UIv<{zopD)u-RM@oW zU!v`MV9yqiik9&-RA6!Z5H~$nk2_vyj(Ii6xfQVs*!dSXT}zXUf}8Ia*Y!JKGe8N@ z-t{x>{Ymr6{p8?UI%wHtwq)e`UDi0Ka`p1X<}Z$-m=CFcV8&8eKh`{WAkY=zg%sqP4$0 z?rhrdxXeOJTV!L5De|4zxmd%tY7$|%qd~V`P^D+vQsiW{O{-(#4e#6ukAs*#&o3v} zwju&MaiBA!8UA}xcUP>b9uz5-yvj15r%j#!DW>eqS?K-yk@XXfX~%UUt9Jl8hhsk9 zUInpGPnqf(Hn`_>|HM$`n?6+>6wfhcW2%M34g%KHj zhV87_kt0WYo$0p2}oZSIQ%Fb}jeMK&ca zZfv8K)lxxiwo}TrN-NASh8q(bf~WT$Eoh(I;Sc^ zuL6!AmGDba+?Ha|F-67Gh1v|(Y8w&GPC^IfBdprwd(Qq`ey@Tm8mLUA zC;Z|j^Y*{)IIbC99BYcd;ba24xs0AKB^Kl(w$M(dEy%Zkmt*7NHsmJMrCq?DqcW2O=~Z!4A%)TjR6H)(xN z#0nVA@_4x>uXL6_K)OB0dyu>Y-h*6&%!0T04YaYjaGZoaG-(uyFZ_2)I>%lBo#)># zjuSdGsv?GtumlDMUX;#;MO}i$UEjd5omE_JxRGIRoVc-SZszl{;RIs^QhNJW0dr9@ zZtLun;DEh$(g3b@|Epq zxVp!Se5Puknsw#P1bc41*s{vT0^Ki*_2 z`-1QfPr8vWAk~=qYjY>}9+*pl#rr`ODx3(t%0K!(4F9)1f+yljQtP+Y`d#e>jX-Zj zC15RrbwXTd{w0E1Vb8UhFHkN^VyFJ0_W~b-18MR%)5*A@E)Mg9mf4k+zU#FM=+kCG z*KjWm)@*-TnpOF{a|HER0E7OZ#`)CZv!}U=>09PRErhXJ+tqqg+~&mLf&%(aVES7B zLaF1FeZWD9|9Zch+1DUUq6nJzhmve0igf>^yIclzVBDAvuB-AaKD>d9DB4RD?s*QH zh3XnQsQ1&4im=8N!g1xz#loEEqqV5us`Y@~J0j|}pc)s;!f50imwciJ3#H`lYBX$b zQ`fdfZraSG2ev1H2HksL05n7h(3Q2llmDd~jI5{>boy{1#f5XwTl8ad&KF)T7{A#A;{ z26aMg`G!{&mI`--VxEv!LK`{@Ko{GA@Rt~ly)HBVPf->CBl4fdA&;>P3J4OreKEt{ zo#r5Q!ID6$PNIJ2MStPk_wT1_TxUz@O+=+TK+SI}7?1It+rUMHh3iG8thH&UdNl{U)ADLO%fVt``anW=D zCDem)qd>{x@p7n<+XRo_CTHwJ`yLIA4pqQt0%8}6*3)qu&KCxz(rEsZ#ISZ7Vf}H5 z1$H0yN6g0ydMbUp?ueRe7DdrBaw{ zF5~cJ>qroZ*4z)`Q9X36|Nf2#;}U**`#w*h`tEkh(}F1mj;!_lL4h=rX=;>PQEMV& zU5EL~n5rPnckS{)T3rJpGh4^s*&VeLmqoZ$@HC>6zNsiG%FLv9hTwvKuJi>i51-&pgsEKKGxO z{`XJ0)iibEdjhvr8~0|||8KJdei+ki xwEubBQu*_)|NQ(v;svn2aU_Nt&RR?}8NT~+5^@tsF6{}&Z@LXZFe literal 0 HcmV?d00001 diff --git a/examples/benchmark.py b/examples/benchmark.py new file mode 100644 index 000000000..901b84c63 --- /dev/null +++ b/examples/benchmark.py @@ -0,0 +1,171 @@ +"""Benchmark same-process pub/sub: python examples/benchmark.py --help.""" + +import argparse +from contextlib import ExitStack +import multiprocessing +import os +from pathlib import Path +import platform +import socket +import statistics +import tempfile +import time +import uuid + +import msgq + + +def positive_int(value): + number = int(value) + if number <= 0: + raise argparse.ArgumentTypeError("must be greater than zero") + return number + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--iterations", type=positive_int, default=10_000, help="messages per run (default: %(default)s)") + parser.add_argument("--repeat", type=positive_int, default=5, help="runs per message size (default: %(default)s)") + parser.add_argument("--zmq", action="store_true", help="also benchmark pyzmq XPUB/SUB over IPC (requires pyzmq)") + parser.add_argument("--pipe", action="store_true", help="also benchmark multiprocessing.Pipe with raw bytes") + parser.add_argument("--plot", type=Path, help="save a chart, e.g. examples/benchmark.png (requires matplotlib)") + args = parser.parse_args() + + zmq = None + if args.zmq: + try: + import zmq + except ImportError: + parser.error("--zmq requires pyzmq: python -m pip install pyzmq") + + plt = None + if args.plot: + try: + import matplotlib + matplotlib.use("Agg") + import matplotlib.pyplot as plt + except ImportError: + parser.error("--plot requires matplotlib: python -m pip install matplotlib") + + with ExitStack() as cleanup: + results = run(args, zmq, cleanup) + if plt is not None: + plot_results(results, args, plt) + + +def run(args, zmq, cleanup): + endpoint = f"msgq_benchmark_{uuid.uuid4().hex}" + publisher = msgq.pub_sock(endpoint) + subscriber = msgq.sub_sock(endpoint, timeout=1000) + backends = [("msgq", publisher.send, subscriber.receive)] + + if zmq is not None: + # Keep Unix socket paths short enough for macOS as well as Linux. + directory = cleanup.enter_context(tempfile.TemporaryDirectory(prefix="msgq_bench_", dir="/tmp")) + context = zmq.Context() + cleanup.callback(context.term) + zmq_publisher = context.socket(zmq.XPUB) + cleanup.callback(zmq_publisher.close, linger=0) + zmq_subscriber = context.socket(zmq.SUB) + cleanup.callback(zmq_subscriber.close, linger=0) + zmq_publisher.setsockopt(zmq.RCVTIMEO, 5000) + zmq_subscriber.setsockopt(zmq.RCVTIMEO, 1000) + zmq_subscriber.setsockopt(zmq.SUBSCRIBE, b"") + zmq_endpoint = f"ipc://{directory}/socket" + zmq_publisher.bind(zmq_endpoint) + zmq_subscriber.connect(zmq_endpoint) + # XPUB lets us wait for the subscription instead of guessing a startup delay. + if zmq_publisher.recv() != b"\x01": + raise RuntimeError("Unexpected ZeroMQ subscription") + backends.append(("pyzmq IPC", zmq_publisher.send, zmq_subscriber.recv)) + + if args.pipe: + pipe_reader, pipe_writer = multiprocessing.Pipe(duplex=True) + cleanup.callback(pipe_reader.close) + cleanup.callback(pipe_writer.close) + # On Linux/macOS, a duplex Pipe uses a Unix socket pair. Make room for + # a full 64 KiB message before the same-process receiver gets to run. + with socket.socket(fileno=os.dup(pipe_writer.fileno())) as pipe_socket: + pipe_socket.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 256 * 1024) + # Fail instead of hanging if the OS cannot buffer the entire message. + os.set_blocking(pipe_writer.fileno(), False) + backends.append(("Pipe bytes", pipe_writer.send_bytes, pipe_reader.recv_bytes)) + + print(f"Python {platform.python_version()} | {platform.platform()}") + if zmq is not None: + print(f"pyzmq {zmq.__version__} | libzmq {zmq.zmq_version()} | XPUB/SUB, copying bytes") + if args.pipe: + print("Pipe: send_bytes/recv_bytes, duplex Unix socket pair, requested send buffer 256 KiB") + print(f"{args.iterations:,} messages × {args.repeat} runs per size; median results, 100 warmup messages") + print("Same-process send + receive, one message in flight, including Python overhead.") + print("Not cross-process latency or maximum streaming throughput.\n") + print(f"{'Backend':<12} {'Bytes':>10} {'Messages/s':>14} {'MiB/s':>12} {'µs/message':>14}") + print("-" * 66) + + results = [] + for size in (64, 1024, 65536): + payload = b"x" * size + for name, send, receive in backends: + for _ in range(100): + send(payload) + if receive() != payload: + raise RuntimeError(f"{name}: warmup message was lost or corrupted") + + durations = [] + for _ in range(args.repeat): + start = time.perf_counter() + for _ in range(args.iterations): + send(payload) + received = receive() + if received is None: + raise RuntimeError(f"{name}: receive timed out") + durations.append(time.perf_counter() - start) + if received != payload: + raise RuntimeError(f"{name}: received message was corrupted") + + seconds_per_message = statistics.median(durations) / args.iterations + messages_per_second = 1 / seconds_per_message + mib_per_second = messages_per_second * size / 1024**2 + results.append((name, size, messages_per_second)) + print(f"{name:<12} {size:>10,} {messages_per_second:>14,.0f} {mib_per_second:>12,.1f} {seconds_per_message * 1e6:>14.2f}", flush=True) + return results + + +def plot_results(results, args, plt): + from matplotlib.ticker import EngFormatter, MaxNLocator + + labels = {"msgq": "msgq", "pyzmq IPC": "zmq", "Pipe bytes": "multiprocessing.Pipe"} + rows = sorted(((name, rate) for name, size, rate in results if size == 1024), key=lambda row: row[1]) + maximum = max(rate for _, rate in rows) + formatter = EngFormatter(sep="", places=2) + with plt.rc_context({"font.family": "sans-serif", "font.sans-serif": ["Helvetica Neue", "Arial", "DejaVu Sans"]}): + fig, ax = plt.subplots(figsize=(10, 4.7)) + fig.set_facecolor("white") + ax.set_xlim(0, maximum * 1.2) + ax.set_ylim(len(rows) - 0.5, -0.5) + ax.set_yticks([]) + # Keep grid lines out of the values on the right. + ticks = MaxNLocator(nbins=4).tick_values(0, maximum) + ax.set_xticks([tick for tick in ticks if 0 <= tick < maximum]) + ax.xaxis.set_major_formatter(EngFormatter(sep="")) + ax.set_xlabel("Messages/sec — higher is better", fontsize=19, labelpad=15, color="#172b3a") + ax.tick_params(length=0, pad=9, labelsize=16, colors="#425b6c") + ax.set_axisbelow(True) + ax.grid(axis="x", color="#b7b7b7", linewidth=1.5) + for side, spine in ax.spines.items(): + spine.set_visible(side == "left") + spine.set_color("#192a32") + spine.set_linewidth(2) + for index, (name, rate) in enumerate(rows): + ax.barh(index, rate, height=0.78, color="#31cf43" if name == "msgq" else "#b9b9b9", zorder=2) + ax.text(maximum * 0.029, index, labels[name], va="center", fontsize=22, fontweight="bold", color="#172b3a") + ax.text(maximum * 1.173, index, formatter(rate), ha="right", va="center", fontsize=23, fontweight="bold", color="#172b3a") + fig.subplots_adjust(left=0.055, right=0.98, top=0.95, bottom=0.24) + args.plot.parent.mkdir(parents=True, exist_ok=True) + fig.savefig(args.plot, dpi=180, facecolor=fig.get_facecolor()) + plt.close(fig) + print(f"Chart saved to {args.plot}") + + +if __name__ == "__main__": + main() From a0ba52d92d54c568c374592f4ac1f03bbfe5f410 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sun, 6 Sep 2026 11:08:31 -0700 Subject: [PATCH 04/17] lil more --- README.md | 18 +++---- examples/benchmark.png | Bin 54719 -> 72875 bytes examples/benchmark.py | 106 +++++++++++++++++++++++++++++++---------- 3 files changed, 91 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 06487c0aa..bf4323f1c 100644 --- a/README.md +++ b/README.md @@ -53,33 +53,33 @@ print(subscriber.receive()) # b'Hello from MSGQ!' ## Benchmarks -Run the [benchmark](examples/benchmark.py) from a local checkout: +Run the [benchmark](examples/benchmark.py) from a local checkout with uv, which installs the dependencies declared at the top of the script: ```sh -python examples/benchmark.py +uv run examples/benchmark.py ``` -Reports median throughput for 64-byte, 1 KiB, and 64 KiB messages. Use `--iterations 100000 --repeat 10` for longer runs. To compare with pyzmq: +Reports median throughput for 64-byte, 1 KiB, and 64 KiB messages. Use `--iterations 100000 --repeat 10` for longer runs. To include all comparisons: ```sh -python -m pip install pyzmq -python examples/benchmark.py --zmq +uv run examples/benchmark.py --zmq --pipe --zenoh --lcm ``` -Add `--pipe` to include a standard-library `multiprocessing.Pipe` baseline, or use `--zmq --pipe` for all three. Pipe uses raw bytes without pickling and requests a 256 KiB socket send buffer so the largest message fits before receiving. It is point-to-point, not pub/sub. +Choose comparisons individually with `--zmq`, `--pipe`, `--zenoh`, or `--lcm`. Pipe uses raw bytes without pickling and requests a 256 KiB socket send buffer so the largest message fits before receiving. It is point-to-point, not pub/sub. All run in one process with one message in flight and include Python overhead. ZeroMQ uses IPC with XPUB/SUB sockets to wait for subscription readiness before timing. This measures sequential send/receive cost, not cross-process latency or maximum streaming throughput. +Zenoh uses two sessions connected over a Unix socket, with a Python callback queue. LCM uses raw bytes over UDP multicast with TTL 0 (host-local) and includes Python callback dispatch. LCM requires a multicast-capable network interface. + Generate a plot from a fresh run: ```sh -python -m pip install pyzmq matplotlib -python examples/benchmark.py --zmq --pipe --plot examples/benchmark.png +uv run examples/benchmark.py --zmq --pipe --zenoh --lcm --plot examples/benchmark.png ``` ![1 KiB message throughput by backend; higher is better.](examples/benchmark.png) -1 KiB messages, median of 5 runs × 10,000 messages on macOS ARM64 with Python 3.12.13 and pyzmq 27.2.0. The script prints results for all three message sizes; the plot shows 1 KiB. +1 KiB messages, median of 5 runs × 10,000 messages on macOS ARM64 with Python 3.12.13, pyzmq 27.2.0, Zenoh 1.10.0, and LCM 1.5.2. The script prints results for all three message sizes; the plot shows 1 KiB. ## Contributing diff --git a/examples/benchmark.png b/examples/benchmark.png index 45448ca8cc6742d2461f2d60825c052f18ec2f04..1ebaf97b01f5cb347fa07583083e7e8cefcd5842 100644 GIT binary patch literal 72875 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 literal 54719 zcmeFZXH-*b^zLif=vKF)A|TyDQL2FSW#z;yd+tMr z#zZvl-8Kr!!eN-wSnVmtXCuYmpFeuEyNjS}gd-64!58E8%|l&X{V&V2@6Q)*MGS;R z9K2QW9h`XlyqUN*sXdV{O~l~{IKsj7Qt;Ztv>Q+EfWO9gH9u->(EIo8p|pU%Uj6&_ z-PI%iec=1K!7e#T4T%B8>lym`ib?(C62?{3Ba{rBNN?=ETl z&*uK$ox2jql+dkvtpX-#t5OHF0Y~xEe@@_`FF3gTA<*(1mz;y^o0G91%0TVGe;TY2% zI4Mh-38$nLn%CC!w9w)y*!0xa3uqW&RRqzi!E1z+EaCkx?0*!MfN$tpMIerDY%F24 zCgILWg4I})%&x<&#IvUc)gZ%EjaY6D2z1mgBiux>qWQ;7j-|oKoVPJm&4mSzz4Fdo zz28GkP|Jh~pw@9L@o!DU9K=F#w4=wm6-=%85>zNYnjN$EA`TQTiMNnanyAkabER9l zQ9CG$ig^@iFCVhFBzfXp2@mqW{Gv62rSREBQWIj^�Bmd)<%>>w4R?_DRTgKrA2* zI|So@bDHmcnTTotZd{&F9)q3V5|53}B!r~UC8#U9D63Wfp9zoBy=+P@ZAps+$ zxG1pIYy7wEry=`=D7)ONy7A|(Y8dw=@9#CLIt$E^)u>XVkiDnv9ZQh#T8o4|vf5oc z;#IwPwd4QvqdnK(!R_Grx;k{r?8>%1LY?t-Y4QJ3^P``Q?a(km349;gS zMm2Nj(2b*<(hhFi-ancpL;BM=6=*~%EjFgAU1m^iVL6S%I)sXs^guWDhdbm}=-|FA z^i*&9XsfTKh+%V|bk5aEz@v`m1j+7`)^hhIQ8Rm&ro)K&W`S|WMU$kSP`>Uy&o;|# z?x_Z6o>ot|dij_B#Nl%1(cKEYnIKZK+(=4|`5G%t+RrR2a3RhcE8xh=^KvEOzry45 zPitnCbCB?<+T}6xkPUS^lzZdbGx(*bW2ZU0B-$xmWuEPP5-?goET5X{R(+t#!BZTp z(`4BD_nG=l^UtPLHlnRh5u7EwVLKIMDe^?yR*3glvk*dbAVY^l({-)nj3mNCv%H7L zyod7j9C@)h8absmF13*wLSu5UZ`R7sp=`V?>f9vP;6zLJZhJdKg=|!y+P>%+MOy4d z`Q@q?RS~P*sJXXCN#*rJJjp`;E#9I;qXf*xEH>S=$OF^jjogUrejbXuIYCK!=e$%Q z7b5{*IY;3MciE;<6J8)52;&H0>l;n;u~>Te%r~CJgj7CQyM?MqZp4mzmfy5Jt4A3G zZi5c$ov0oTaaGqTpGvb|SV)P_6ju;gMODd{I-@`9Tlp-WkhJ~vIcPgQ^(61o09j4* z?)bc~q`nVkhCaX5zhP?aJ<&uh-D1QWRu718GV2_TOFYJ%q*^ySnbeE=p3SVBk|QL| z_TM7Ak=!^sx(goOJG(6gcWhb5CbprO6LDU$0dicqxVB9Fm zWNh|wMDbz!%c3T`^9m1ZR``Z&3oNO$&oNxMgO`y+6bw)p%k>>*OP|C%-Vzc zJ17Ol@iL$2&u$OrqY~0Prq0KRS&dXXxMGA;AR!z5;m1z%N=?9L_SQ%HsdAXd*=Z55 zU@cDiGnIf?^9&iWrttCgbLt4Y{rng2IC|c}=~2J0-ZyCyOSd0x&?)PkPW_-PByFX- zx^I7Q;F^0;F)YX;Q3b{AZWpD_9>et;Bu!_4=7 z`tKxYKM%XjjTB3l4YMcd0(rXGiesCSXSfec+cpRq8)J<#g{L~s@W?9TQ7Rf!vemm+ zPIW7mRdJsRbb^T4{VBhn1{1NB>M!%3Qeg&e^&9)%D?1ZncOz&Odi`KG#z>mYi^$Nq z`o@_muPMc{iVr4g$PW<8K~8gcGHc59wV>`w?e-9Q*>NtV0JpHItw?YZro6Hf5gy1o zO+TB!xS+YcZ_mBYpY`}cTGcn)-{CvUthy04Of|9c=r!|QV0FPMI|v@RBRnRzM~KWV zuNG;)4w@zU9$Bx(Rk9GRhi0EoML8%MY>LzENu;jzYuU1}TI?fa1 z@oKCTS?5kKmKh^qT_EedrNZ1j5U6JL8z$!9&g-chtXDXAg0X782X@>yQHN}X`6ubR zriQh>W^>{@y^4|;7nFWK_M*-TLSE)boqptfX`;oruZfT+Ekadpybw;?mG-5y`P#Er zJuG>&(SNVPvOdiXSH7lP{i2#%M7-6=;nwa-DnvtPMa|304L0Z(MEk4@V?GE^Wgz28Lv|E+AU*>onhwGwutLR=JaR8N`R(Z)xoSM5NRUK)xE zS+A}pR!(*A3GwmJ|KZ_iXmCSrOAtN|tLi;wGa-IwP}^ zWd;?B{H%T&xzHyawy|5fiaw?Beq$APDZwN4M^BlD7cTrzv>D<%8EIE5n=7!G;~W11 ze_uq3;^zK?Ga}~-YpnT_DXZqWpSs7njc; zU>;wlo{(cz}$1 zZ#SFfOlhZxCyZTX|%`3A7`MJ_aUS8jz zIjFBa;X@s9tPyR!;^mcBknB>eI?LGILkpasvRouh^p*1-Y{yhZ6Qnh!HcKakN7fLK zxgVLtQZLK%dD#KmmnE<6ZD#U%&zCIO6KbadEFY4Hivt;~Dg=o7x5*zkdY@-_Udul` zvZ4VByJ^cvYHL5WVa68Qw31l+>SgjJUHhVUGNE}!j4HK0t8b@qhMhvFad)tv5z38V zWw#D>O-5)<7C_gX2kJwa7<;zq+(Fvvz8p$4@S^bAZAuKZJ)sGk4ORXtX>Dlw)g=}W*gz5C#4J?8^%v!2v ziZ6^avmCNxwDO|2S6 za+3>~H{(*XSTjAo3_c~!IEsY&~iT66Xn{z?{AYW7HjunjYaKBXKOn)>ApPv_~xYsxATw#nY_0=m`=kPJmZ#*!F zK}_*ME!KDRl<8XBq2EGxl)}@78njpOt^AH1YCjJGys=lP!7VB2 zv|>z__nx^>4@ja}%`>YaV!0e=1@X6t!P_h2j!W(_@#%k6bt}#Zyg4mlRc-cgvyJl1 zPB%twnsUt-ZpS?s3s(alR4SABEwvTIq*;XfgFg~RBcaQZo7gh9~2*Lieh`|Nfin~@6r zLw>${<|f;bKlOPU8zCI*Q$TK~?d(Um6xq^t`1Ra6m0UhzrWxcv;7(>k!&XoB6^I!+ z9s>&GDoJJaL!BLDv#t4EcH_iN_p*$Ia_!2vK()b2Wb68BCU!w?T5JVOOpU~L!wunPj@~c7ug<{`IZ^%%lPbIsgoTsjbYD_K z^~yeL;8f-|2W{{;FHfpfpyf87d{B*hZup)*&S$;a8&vim!fbRhZbtjWajB`EQCnyW zqK(N(w=(AhZt8pQLR(YA!%mLce&BpxJ{0(U!;uZon)P7PKPPPdwlS}7^=qXMb&xId z3|8y$`clNT3rE;aY0DAYJcg@_(eyl5&+BV4f0mWZ?+&3{y(xV**XtQ+;Q9nDFN%y7 zekxsUnIeibxi=syY)4PmzO3OGTR(So?q||q6!08+#HSu&vWazeG!|=+;jOV>-c{Qn zx>@Bg>BpY?4h+j?$he;eqWELM(C-fp+4d@>Tk>`i1?8INM ze!aCDYLmAKqT=)Z%~ZSF*i!p`6ER0IXSl7{eam_`{q2jrSE}N;WJDE@I%q+{Db|am ze(vi(YDr+N2&PIf8Lv7%>L^~f1IL! zw7Ud;>dH!}RVAq7tQSsxkJg(1Q==CZKIx2P*gRavc>?eMGZ;ir7{=AsM=4doZd59h z=Y^{j@;4rr%Cv=6VnlRbCA_^SK3C(&ol+esL+nABhj7bG-YK!OWQ>>j zWS_ieO^AxAtf)J>>EJcw&%Oz-^?_7;Y>LQ|pt@zCNg)EMzd;%$cMGmnSy!-A(^F?2 zpni)yed%u^F{$ry|7T5iIYZjAV~7=GHSs2QhO!OJ4Zb8xY_sXb3S#I1n1HPy8Z9#) z?^c0bn%RGQdG(E8n`fzClGv_e^sZUh$e= zV<4q-)Q<(otTdQ@?+C@8pYp8MH%C~7j|n;LZujedOV_gvpK-hqYf&H{uI7Xd&<*AjM%TAt!B6Q7@piYZp#OmblLv3 zg&or%zU_&-Fldzg?47W-g8+BP+=L|bV7H%|C`00H-YHE3A*{K5bpYtc-Iuix`tuc? z1~jrTg2ZR0<9M90cpr_cqtNF~F+PEssZKzbAQqOgE>u`He15Mz8S(YwE>OQxWOMiK zg*@4Rcoaop1bzAPwdpMiKTLEjO>lQK*~iu;^cs2Xoq|6Kz-m0 z)SgG;#D!4Wx}i)K2jjSIjdgYi#&LBEICAp^+W0<+d;Ky>oEV;_$|v^p6VqahY=y;r zcPHa{ENy=(Cs~ou1XNt3qjf^LBRNLA>6V|>(~i10C-vWt=csyWL&}2|W#t!>lmAN6 zLkC+kT%D%nI=fM=Z=wtx8MfbzO6E)zZN?}q97*H8W|`_j2LN_^L@bA!LPhh2yyzEufCxAaH^jqpnMY4wTo z)C-uqi1Z0TpgeaYPm8RjUA-S44NOFP!f4)}sJ>xNaEW$@JEM~GN0}8GAhH>$VU@5p z`b?^N_F${~6NQknmr;=U`+aeCstt><-mM3P2b0B~IG>-Al0n~R(kWwA5DAawgElk& z*Y?&cZ_PYPx}~c+@9MQbLi&fyr*D$}ER$=EF=!^!86!V92lHgWg7`(O>GR@^RtoARUdVEp3LI z<0=um3aYd=%MQG2Ma`W$_fcWttIkJ3eJx*d^~`v_Q}qC|8l4U32<^h2d3gEl2NV0u z+}uihL4MnKl$tO6saSj2kdln7m7~Au9^K!$Jo^J zL1{9C2%I^Jjj=F3pX=0!jiqM=1;mPtO!_d4tVqvxVZ5N6nBUrTt&?N@Lh7J6^4eHY zEALrQ<`1ETRzAvUOij?Jft|-r+a@oh#y3hMM_O@jrtD(kkeN9D*Zj#osa6q|!_>r~ z&U?Ots+M7UItec*s^A{2_Aai^yU=}PZng5FJHsanT9vHcx{Y{B2wZDV=yF)AViA#m zgpTD&OR>KCAYlH*FZE@7JYU3K#WHLu$M30IV{q`Pia}hW&7ih;O1s$_xR87h@^`{* zDo`j4`O0QZImbA#k2RoDE7=9+ZaM|{`>jpb)l)_0@@d~s!p`?9hI9-6)EcXx1g->` zd*&k^T2D0M7qg`kGXKg_;`K7xUQ@f|3y*knCWacXDgdL? z)J_F243Ouxs$g-pIT1Sp{Vtur3l&pv64e-~@hgi%Nr0gAc~s)TOSd1zFW%Ky`A)TO z_$Sz?leM82+tw#7S1j$_ri0tZ15@!1KZXWxhZ4Af$Kc`ccWXD{IKrDgArUYUu+_`9 z$s-$fPnkNh=G|c|*Zu7F%i>{EJh!`}E0x&5Xl@L( zZ{D}^UsGYkFm=R~U1Y_`kM1ao{z+w73*b5Z-f2Ab#x*j_%RxDmsFM_@RFcpd5Ywrv zD&&hcOi+|R{nYiFf)MXHMs;;s^OR-X@kv$9G@GK&vRnIVGi)+R%QX|wXNk}t&d}e!&)1^-s~n9$ zJ78x`?aMM0PNqnQmz~kH99;c;33r1Yra#4b^E00YUtJ(~_&$@m$cdr0`ANooU>D!u zo@X4xCh51kzHRPxelFQIC&0Jo+;N=37==7x-}>V4lPe`>Fi%lO=h~9uwNg)Jnt7+a zN+PS09$G;=@hi2fcaY}ph2w6W{`p1xcvC%P+%tK6UYQiR6;DHeY7-eZW@6RQGidL? zf9aL8XmhU(bWpQ;f%iB&9+NGqn29bpmAoM&Exn4YFx-}BEYU*?-%qBvwAO62^3_ba zi;qL6(|B=pV}cvNrs&QjMp*gH@c)CGs*2b*sni~nR|Vy%)EEV2;olAPwag#susg~B zmZ1(n1y|wrB)+t;x1U0R~3!sb*ufDbskV6MSU^D#h&myCKlg*Rm+FW ziANGL#Z{CRa{~#STvwetC!7b2PkF$%`&sh*%Tm-6l0?Ik{o1uH0@zL+Pa;(?vQ58? z##9;`lN@_4G;CP5Nb~)`o+-u*yCf}r?(7}0iO?nYxoBVAN+?jI)C4R+CoZXSGwKvEww_TyuSanZm+-AL=JXE&Tv6;#Y0!-D6! zk9)=qC{>w?AuNNQlQ#NQ<>9y<1BN54a#3;YLKVT6{5~MHLBgtxrQH+NL+S zTR0Mu8aP$3-!96A?cP+X;z;*SV#+*V zN(>LCCV`POd#07#xk7PG#y35TCVg>HDQ0fJgYeZ#*dHLCDDj3VyI;2`oloC`wR-R& zxZ48vy??!7tCdZt)st7I`OZzGQ>c>^vi#B}*WBD_LZ-u#Y<{WqPV|lL{yEzp&Svo#=5neAc2J}-9G*Cr{N^<02Y<8&1|9=?f6}VE+cCQ>8dVonZC4-3 z1`B3gh%c{08&oqIwHamQXZ=@yMXmn*EH~`;SP-^7fzfn}SEF&?7*p-_T`Ab~!tNlW zD`aipBkCgU6xz9?$8~JZO4}=qlkCff)2te8t4)03Qf$J8YX+qgjLv@Z6KoEy&-5j2 z|DjGETWEi)=TFPv6*z2LeYRS0?3e$8BjuWR%lWstK}iWJKgD)hZ^m=Y2c|sFXFo6$ zE9m6e@2BiKE`PbGJWt$R%KbF_S-;b1xGlKezdF;gQem`l^~!FU>VM7UXBHof^aMTY zKkbPQjL2;kdbsB@mNP?-z@XF^;){rfMw|f!{eAV$H>dM; z%2I{_El_
veNt^a>42AKA{CeeY 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�f@*8!pW-_v=FpXz{XAmp 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 diff --git a/examples/benchmark.py b/examples/benchmark.py index 901b84c63..aaffae403 100644 --- a/examples/benchmark.py +++ b/examples/benchmark.py @@ -1,18 +1,36 @@ -"""Benchmark same-process pub/sub: python examples/benchmark.py --help.""" +# /// script +# requires-python = ">=3.11" +# dependencies = ["msgq>=1.0", "pyzmq", "eclipse-zenoh>=1.10", "lcm", "matplotlib"] +# [tool.uv.sources] +# msgq = { path = ".." } +# /// +"""Benchmark same-process pub/sub: uv run examples/benchmark.py --help.""" import argparse +from collections import deque from contextlib import ExitStack +from functools import partial +from importlib.metadata import version import multiprocessing import os from pathlib import Path import platform +from queue import Queue import socket import statistics import tempfile +from threading import Event import time import uuid +import lcm +import matplotlib import msgq +import zenoh +import zmq + +matplotlib.use("Agg") +import matplotlib.pyplot as plt def positive_int(value): @@ -28,38 +46,69 @@ def main(): parser.add_argument("--repeat", type=positive_int, default=5, help="runs per message size (default: %(default)s)") parser.add_argument("--zmq", action="store_true", help="also benchmark pyzmq XPUB/SUB over IPC (requires pyzmq)") parser.add_argument("--pipe", action="store_true", help="also benchmark multiprocessing.Pipe with raw bytes") + parser.add_argument("--zenoh", action="store_true", help="also benchmark Zenoh over a Unix socket (requires eclipse-zenoh)") + parser.add_argument("--lcm", action="store_true", help="also benchmark LCM over host-local UDP multicast (requires lcm)") parser.add_argument("--plot", type=Path, help="save a chart, e.g. examples/benchmark.png (requires matplotlib)") args = parser.parse_args() - zmq = None - if args.zmq: - try: - import zmq - except ImportError: - parser.error("--zmq requires pyzmq: python -m pip install pyzmq") - - plt = None - if args.plot: - try: - import matplotlib - matplotlib.use("Agg") - import matplotlib.pyplot as plt - except ImportError: - parser.error("--plot requires matplotlib: python -m pip install matplotlib") - with ExitStack() as cleanup: - results = run(args, zmq, cleanup) - if plt is not None: + results = run(args, cleanup) + if args.plot: plot_results(results, args, plt) -def run(args, zmq, cleanup): +def zenoh_backend(cleanup): + directory = cleanup.enter_context(tempfile.TemporaryDirectory(prefix="msgq_zenoh_", dir="/tmp")) + endpoint = f"unixsock-stream/{directory}/socket" + + def config(listen, connect): + result = zenoh.Config() + result.insert_json5("listen/endpoints", repr(listen)) + result.insert_json5("connect/endpoints", repr(connect)) + result.insert_json5("scouting/multicast/enabled", "false") + result.insert_json5("scouting/gossip/enabled", "false") + return result + + receiver = cleanup.enter_context(zenoh.open(config([endpoint], []))) + messages = Queue() + subscriber = receiver.declare_subscriber("msgq/benchmark", lambda sample: messages.put(sample.payload.to_bytes())) + cleanup.callback(subscriber.undeclare) + sender = cleanup.enter_context(zenoh.open(config([], [endpoint]))) + publisher = sender.declare_publisher("msgq/benchmark") + cleanup.callback(publisher.undeclare) + ready = Event() + listener = publisher.declare_matching_listener(lambda status: ready.set() if status.matching else None) + cleanup.callback(listener.undeclare) + if publisher.matching_status.matching: + ready.set() + if not ready.wait(5): + raise RuntimeError("Zenoh subscriber did not become ready") + return "zenoh IPC", publisher.put, partial(messages.get, timeout=1) + + +def lcm_backend(cleanup): + # TTL zero confines multicast traffic to this host. + bus = lcm.LCM("udpm://239.255.76.67:7667?ttl=0") + channel = f"MSGQ_BENCHMARK_{uuid.uuid4().hex}" + messages = deque() + subscriber = bus.subscribe(channel, lambda channel, data: messages.append(data)) + cleanup.callback(bus.unsubscribe, subscriber) + + def receive(): + if bus.handle_timeout(1000) == 0: + raise RuntimeError("LCM receive timed out; check host multicast support") + return messages.popleft() + + return "LCM UDP", partial(bus.publish, channel), receive + + +def run(args, cleanup): endpoint = f"msgq_benchmark_{uuid.uuid4().hex}" publisher = msgq.pub_sock(endpoint) subscriber = msgq.sub_sock(endpoint, timeout=1000) backends = [("msgq", publisher.send, subscriber.receive)] - if zmq is not None: + if args.zmq: # Keep Unix socket paths short enough for macOS as well as Linux. directory = cleanup.enter_context(tempfile.TemporaryDirectory(prefix="msgq_bench_", dir="/tmp")) context = zmq.Context() @@ -91,11 +140,20 @@ def run(args, zmq, cleanup): os.set_blocking(pipe_writer.fileno(), False) backends.append(("Pipe bytes", pipe_writer.send_bytes, pipe_reader.recv_bytes)) + if args.zenoh: + backends.append(zenoh_backend(cleanup)) + if args.lcm: + backends.append(lcm_backend(cleanup)) + print(f"Python {platform.python_version()} | {platform.platform()}") - if zmq is not None: + if args.zmq: print(f"pyzmq {zmq.__version__} | libzmq {zmq.zmq_version()} | XPUB/SUB, copying bytes") if args.pipe: print("Pipe: send_bytes/recv_bytes, duplex Unix socket pair, requested send buffer 256 KiB") + if args.zenoh: + print(f"Zenoh {version('eclipse-zenoh')}: two sessions over a Unix socket, bytes via a Python callback queue") + if args.lcm: + print(f"LCM {version('lcm')}: UDP multicast, TTL 0, raw bytes via a Python callback") print(f"{args.iterations:,} messages × {args.repeat} runs per size; median results, 100 warmup messages") print("Same-process send + receive, one message in flight, including Python overhead.") print("Not cross-process latency or maximum streaming throughput.\n") @@ -134,12 +192,12 @@ def run(args, zmq, cleanup): def plot_results(results, args, plt): from matplotlib.ticker import EngFormatter, MaxNLocator - labels = {"msgq": "msgq", "pyzmq IPC": "zmq", "Pipe bytes": "multiprocessing.Pipe"} + labels = {"msgq": "msgq", "pyzmq IPC": "pyzmq", "Pipe bytes": "multiprocessing.Pipe", "zenoh IPC": "zenoh", "LCM UDP": "LCM"} rows = sorted(((name, rate) for name, size, rate in results if size == 1024), key=lambda row: row[1]) maximum = max(rate for _, rate in rows) formatter = EngFormatter(sep="", places=2) with plt.rc_context({"font.family": "sans-serif", "font.sans-serif": ["Helvetica Neue", "Arial", "DejaVu Sans"]}): - fig, ax = plt.subplots(figsize=(10, 4.7)) + fig, ax = plt.subplots(figsize=(10, max(4.7, len(rows) + 1.7))) fig.set_facecolor("white") ax.set_xlim(0, maximum * 1.2) ax.set_ylim(len(rows) - 0.5, -0.5) From 849056fa5919842153e24c899897fa0d8d0b3314 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sun, 6 Sep 2026 11:21:20 -0700 Subject: [PATCH 05/17] lil more --- README.md | 9 ++++++--- examples/benchmark.png | Bin 72875 -> 73891 bytes examples/benchmark.py | 1 + 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index bf4323f1c..f32a257c6 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@

MSGQ

-

A lock free single producer multi consumer message queue

+

High-speed pub/sub, made simple. For Python, C, and C++.

Quickstart @@ -15,6 +15,7 @@ [![Discord](https://img.shields.io/badge/Discord-Join-5865F2?logo=discord&logoColor=white)](https://discord.comma.ai) [![Tests](https://github.com/commaai/msgq/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/commaai/msgq/actions/workflows/tests.yml) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)

@@ -77,9 +78,11 @@ Generate a plot from a fresh run: uv run examples/benchmark.py --zmq --pipe --zenoh --lcm --plot examples/benchmark.png ``` -![1 KiB message throughput by backend; higher is better.](examples/benchmark.png) +**Scope:** This is a same-process microbenchmark. MSGQ reads already-available data and never exercises its empty-queue wait path. The chart does not establish cross-process performance; transport choice and blocking versus busy-polling can change the ranking. -1 KiB messages, median of 5 runs × 10,000 messages on macOS ARM64 with Python 3.12.13, pyzmq 27.2.0, Zenoh 1.10.0, and LCM 1.5.2. The script prints results for all three message sizes; the plot shows 1 KiB. +![Same-process 1 KiB message throughput by backend; excludes MSGQ's empty-queue wait path.](examples/benchmark.png) + +1 KiB messages, median of 5 runs × 10,000 messages on a Linux x86_64 VM (4 AMD EPYC vCPUs, Ubuntu 24.04) with Python 3.12.3, pyzmq 27.2.0, Zenoh 1.10.0, and LCM 1.5.2. The script prints results for all three message sizes; the plot shows 1 KiB. ## Contributing diff --git a/examples/benchmark.png b/examples/benchmark.png index 1ebaf97b01f5cb347fa07583083e7e8cefcd5842..918134d857426e07203c9e4a0f10381c03f686f4 100644 GIT binary patch literal 73891 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 diff --git a/examples/benchmark.py b/examples/benchmark.py index aaffae403..79f5a24cd 100644 --- a/examples/benchmark.py +++ b/examples/benchmark.py @@ -156,6 +156,7 @@ def run(args, cleanup): print(f"LCM {version('lcm')}: UDP multicast, TTL 0, raw bytes via a Python callback") print(f"{args.iterations:,} messages × {args.repeat} runs per size; median results, 100 warmup messages") print("Same-process send + receive, one message in flight, including Python overhead.") + print("MSGQ reads already-available data; its empty-queue wait path is not measured.") print("Not cross-process latency or maximum streaming throughput.\n") print(f"{'Backend':<12} {'Bytes':>10} {'Messages/s':>14} {'MiB/s':>12} {'µs/message':>14}") print("-" * 66) From 58c1bba087aca17041815637b7b6ce3ce4c0228b Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sun, 6 Sep 2026 11:25:25 -0700 Subject: [PATCH 06/17] readme --- README.md | 47 ++++++++--------------------------------------- 1 file changed, 8 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index f32a257c6..6f4b21fc4 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,13 @@

MSGQ

-

High-speed pub/sub, made simple. For Python, C, and C++.

+

High-performance pub/sub messaging, made simple. For Python, C, and C++.

- Quickstart + Quickstart · Examples · - Contribute - · Discord

@@ -19,14 +17,17 @@
-## What is this library? +--- + MSGQ lets programs on the same machine exchange messages. A publisher sends messages to a named endpoint, and subscribers listen on that same endpoint. Each endpoint supports one publisher and multiple subscribers. MSGQ is a generic high performance IPC pub sub system with a single publisher and multiple subscribers. It uses a ring buffer in shared memory to efficiently read and write data. Each read requires a copy. Writing can be done without a copy, as long as the size of the data is known in advance. This library also provides a spoofed implementation that can be used for deterministic testing, and visionipc, an IPC system specifically for large contiguous buffers (like images/video). -## Python quickstart +![Same-process 1 KiB message throughput by backend; excludes MSGQ's empty-queue wait path.](examples/benchmark.png) -Requires Python 3.11+, Git, and a C/C++ compiler on Linux or macOS. +1 KiB messages, median of 5 runs × 10,000 messages on a Linux x86_64 VM (4 AMD EPYC vCPUs, Ubuntu 24.04) with Python 3.12.3, pyzmq 27.2.0, Zenoh 1.10.0, and LCM 1.5.2. The script prints results for all three message sizes; the plot shows 1 KiB. + +## Quickstart ```sh python -m pip install git+https://github.com/commaai/msgq.git @@ -52,38 +53,6 @@ publisher.send(b"Hello from MSGQ!") print(subscriber.receive()) # b'Hello from MSGQ!' ``` -## Benchmarks - -Run the [benchmark](examples/benchmark.py) from a local checkout with uv, which installs the dependencies declared at the top of the script: - -```sh -uv run examples/benchmark.py -``` - -Reports median throughput for 64-byte, 1 KiB, and 64 KiB messages. Use `--iterations 100000 --repeat 10` for longer runs. To include all comparisons: - -```sh -uv run examples/benchmark.py --zmq --pipe --zenoh --lcm -``` - -Choose comparisons individually with `--zmq`, `--pipe`, `--zenoh`, or `--lcm`. Pipe uses raw bytes without pickling and requests a 256 KiB socket send buffer so the largest message fits before receiving. It is point-to-point, not pub/sub. - -All run in one process with one message in flight and include Python overhead. ZeroMQ uses IPC with XPUB/SUB sockets to wait for subscription readiness before timing. This measures sequential send/receive cost, not cross-process latency or maximum streaming throughput. - -Zenoh uses two sessions connected over a Unix socket, with a Python callback queue. LCM uses raw bytes over UDP multicast with TTL 0 (host-local) and includes Python callback dispatch. LCM requires a multicast-capable network interface. - -Generate a plot from a fresh run: - -```sh -uv run examples/benchmark.py --zmq --pipe --zenoh --lcm --plot examples/benchmark.png -``` - -**Scope:** This is a same-process microbenchmark. MSGQ reads already-available data and never exercises its empty-queue wait path. The chart does not establish cross-process performance; transport choice and blocking versus busy-polling can change the ranking. - -![Same-process 1 KiB message throughput by backend; excludes MSGQ's empty-queue wait path.](examples/benchmark.png) - -1 KiB messages, median of 5 runs × 10,000 messages on a Linux x86_64 VM (4 AMD EPYC vCPUs, Ubuntu 24.04) with Python 3.12.3, pyzmq 27.2.0, Zenoh 1.10.0, and LCM 1.5.2. The script prints results for all three message sizes; the plot shows 1 KiB. - ## Contributing Issues and pull requests are welcome on [GitHub](https://github.com/commaai/msgq). Run `./test.sh` to build, lint, and test the package. From ad8c84d20a4949cf6ca344e1f728ddaca5c7f701 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sun, 6 Sep 2026 11:30:20 -0700 Subject: [PATCH 07/17] smaller plot --- examples/benchmark.png | Bin 73891 -> 49514 bytes examples/benchmark.py | 15 ++++++++------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/examples/benchmark.png b/examples/benchmark.png index 918134d857426e07203c9e4a0f10381c03f686f4..b391e419bf19e28cd69effe25aa65bf4e7a89311 100644 GIT binary patch literal 49514 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 literal 73891 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 Date: Sun, 6 Sep 2026 11:32:11 -0700 Subject: [PATCH 08/17] shorter caption --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6f4b21fc4..9ae3cb6ce 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ MSGQ is a generic high performance IPC pub sub system with a single publisher an ![Same-process 1 KiB message throughput by backend; excludes MSGQ's empty-queue wait path.](examples/benchmark.png) -1 KiB messages, median of 5 runs × 10,000 messages on a Linux x86_64 VM (4 AMD EPYC vCPUs, Ubuntu 24.04) with Python 3.12.3, pyzmq 27.2.0, Zenoh 1.10.0, and LCM 1.5.2. The script prints results for all three message sizes; the plot shows 1 KiB. +Benchmarked on x86 Linux. See examples/benchmark.py. ## Quickstart From ca26dc6275fae087b105d02001c10f4413895392 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sun, 6 Sep 2026 11:33:37 -0700 Subject: [PATCH 09/17] lil more --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9ae3cb6ce..df6faa7fd 100644 --- a/README.md +++ b/README.md @@ -23,9 +23,10 @@ MSGQ lets programs on the same machine exchange messages. A publisher sends mess MSGQ is a generic high performance IPC pub sub system with a single publisher and multiple subscribers. It uses a ring buffer in shared memory to efficiently read and write data. Each read requires a copy. Writing can be done without a copy, as long as the size of the data is known in advance. This library also provides a spoofed implementation that can be used for deterministic testing, and visionipc, an IPC system specifically for large contiguous buffers (like images/video). -![Same-process 1 KiB message throughput by backend; excludes MSGQ's empty-queue wait path.](examples/benchmark.png) - -Benchmarked on x86 Linux. See examples/benchmark.py. +

+ Same-process 1 KiB message throughput by backend; excludes MSGQ's empty-queue wait path.
+ Benchmarked on x86 Linux. See examples/benchmark.py. +

## Quickstart From 4ab59554f7c1048dfd3382f5e5faee2ea917d02e Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sun, 6 Sep 2026 11:34:28 -0700 Subject: [PATCH 10/17] new line --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index df6faa7fd..12be626aa 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@

MSGQ

-

High-performance pub/sub messaging, made simple. For Python, C, and C++.

+

High-performance pub/sub messaging, made simple.
For Python, C, and C++.

Quickstart From d066d007d8163641cd2249a87827975733835f54 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sun, 6 Sep 2026 11:38:01 -0700 Subject: [PATCH 11/17] lil more --- examples/benchmark.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/examples/benchmark.py b/examples/benchmark.py index 7bf701732..474ebb4fd 100644 --- a/examples/benchmark.py +++ b/examples/benchmark.py @@ -3,11 +3,12 @@ # dependencies = ["msgq>=1.0", "pyzmq", "eclipse-zenoh>=1.10", "lcm", "matplotlib"] # [tool.uv.sources] # msgq = { path = ".." } +# [tool.ty.rules] +# unresolved-import = "ignore" # /// -"""Benchmark same-process pub/sub: uv run examples/benchmark.py --help.""" import argparse -from collections import deque +from collections import deque # codespell:ignore deque from contextlib import ExitStack from functools import partial from importlib.metadata import version @@ -44,10 +45,10 @@ def main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("--iterations", type=positive_int, default=10_000, help="messages per run (default: %(default)s)") parser.add_argument("--repeat", type=positive_int, default=5, help="runs per message size (default: %(default)s)") - parser.add_argument("--zmq", action="store_true", help="also benchmark pyzmq XPUB/SUB over IPC (requires pyzmq)") - parser.add_argument("--pipe", action="store_true", help="also benchmark multiprocessing.Pipe with raw bytes") - parser.add_argument("--zenoh", action="store_true", help="also benchmark Zenoh over a Unix socket (requires eclipse-zenoh)") - parser.add_argument("--lcm", action="store_true", help="also benchmark LCM over host-local UDP multicast (requires lcm)") + parser.add_argument("--zmq", action=argparse.BooleanOptionalAction, default=True, help="benchmark pyzmq XPUB/SUB over IPC (requires pyzmq)") + parser.add_argument("--pipe", action=argparse.BooleanOptionalAction, default=True, help="benchmark multiprocessing.Pipe with raw bytes") + parser.add_argument("--zenoh", action=argparse.BooleanOptionalAction, default=True, help="benchmark Zenoh over a Unix socket (requires eclipse-zenoh)") + parser.add_argument("--lcm", action=argparse.BooleanOptionalAction, default=True, help="benchmark LCM over host-local UDP multicast (requires lcm)") parser.add_argument("--plot", type=Path, help="save a chart, e.g. examples/benchmark.png (requires matplotlib)") args = parser.parse_args() @@ -90,7 +91,7 @@ def lcm_backend(cleanup): # TTL zero confines multicast traffic to this host. bus = lcm.LCM("udpm://239.255.76.67:7667?ttl=0") channel = f"MSGQ_BENCHMARK_{uuid.uuid4().hex}" - messages = deque() + messages = deque() # codespell:ignore deque subscriber = bus.subscribe(channel, lambda channel, data: messages.append(data)) cleanup.callback(bus.unsubscribe, subscriber) @@ -154,7 +155,7 @@ def run(args, cleanup): print(f"Zenoh {version('eclipse-zenoh')}: two sessions over a Unix socket, bytes via a Python callback queue") if args.lcm: print(f"LCM {version('lcm')}: UDP multicast, TTL 0, raw bytes via a Python callback") - print(f"{args.iterations:,} messages × {args.repeat} runs per size; median results, 100 warmup messages") + print(f"{args.iterations:,} messages × {args.repeat} runs per size; median results, 100 warm-up messages") print("Same-process send + receive, one message in flight, including Python overhead.") print("MSGQ reads already-available data; its empty-queue wait path is not measured.") print("Not cross-process latency or maximum streaming throughput.\n") @@ -168,7 +169,7 @@ def run(args, cleanup): for _ in range(100): send(payload) if receive() != payload: - raise RuntimeError(f"{name}: warmup message was lost or corrupted") + raise RuntimeError(f"{name}: warm-up message was lost or corrupted") durations = [] for _ in range(args.repeat): From b73e26724b3ec9d794fb966666c11d9fee9c06e5 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sun, 6 Sep 2026 11:40:25 -0700 Subject: [PATCH 12/17] lil more --- examples/benchmark.py | 77 +++++++++++++++++++------------------------ 1 file changed, 34 insertions(+), 43 deletions(-) diff --git a/examples/benchmark.py b/examples/benchmark.py index 474ebb4fd..712036521 100644 --- a/examples/benchmark.py +++ b/examples/benchmark.py @@ -7,28 +7,28 @@ # unresolved-import = "ignore" # /// -import argparse -from collections import deque # codespell:ignore deque -from contextlib import ExitStack -from functools import partial -from importlib.metadata import version -import multiprocessing import os -from pathlib import Path -import platform -from queue import Queue -import socket -import statistics -import tempfile -from threading import Event -import time -import uuid - import lcm -import matplotlib +import zmq import msgq +import time +import uuid import zenoh -import zmq +import socket +import argparse +import platform +import tempfile +import matplotlib +import statistics +import multiprocessing + +from queue import Queue +from pathlib import Path +from threading import Event +from collections import deque # codespell:ignore deque +from functools import partial +from contextlib import ExitStack +from importlib.metadata import version matplotlib.use("Agg") import matplotlib.pyplot as plt @@ -42,7 +42,7 @@ def positive_int(value): def main(): - parser = argparse.ArgumentParser(description=__doc__) + parser = argparse.ArgumentParser(description="Benchmark same-process pub/sub messaging.") parser.add_argument("--iterations", type=positive_int, default=10_000, help="messages per run (default: %(default)s)") parser.add_argument("--repeat", type=positive_int, default=5, help="runs per message size (default: %(default)s)") parser.add_argument("--zmq", action=argparse.BooleanOptionalAction, default=True, help="benchmark pyzmq XPUB/SUB over IPC (requires pyzmq)") @@ -55,7 +55,7 @@ def main(): with ExitStack() as cleanup: results = run(args, cleanup) if args.plot: - plot_results(results, args, plt) + plot_results(results, args.plot) def zenoh_backend(cleanup): @@ -104,6 +104,7 @@ def receive(): def run(args, cleanup): + print(f"Python {platform.python_version()} | {platform.platform()}") endpoint = f"msgq_benchmark_{uuid.uuid4().hex}" publisher = msgq.pub_sock(endpoint) subscriber = msgq.sub_sock(endpoint, timeout=1000) @@ -112,8 +113,7 @@ def run(args, cleanup): if args.zmq: # Keep Unix socket paths short enough for macOS as well as Linux. directory = cleanup.enter_context(tempfile.TemporaryDirectory(prefix="msgq_bench_", dir="/tmp")) - context = zmq.Context() - cleanup.callback(context.term) + context = cleanup.enter_context(zmq.Context()) zmq_publisher = context.socket(zmq.XPUB) cleanup.callback(zmq_publisher.close, linger=0) zmq_subscriber = context.socket(zmq.SUB) @@ -128,11 +128,12 @@ def run(args, cleanup): if zmq_publisher.recv() != b"\x01": raise RuntimeError("Unexpected ZeroMQ subscription") backends.append(("pyzmq IPC", zmq_publisher.send, zmq_subscriber.recv)) + print(f"pyzmq {zmq.__version__} | libzmq {zmq.zmq_version()} | XPUB/SUB, copying bytes") if args.pipe: pipe_reader, pipe_writer = multiprocessing.Pipe(duplex=True) - cleanup.callback(pipe_reader.close) - cleanup.callback(pipe_writer.close) + cleanup.enter_context(pipe_reader) + cleanup.enter_context(pipe_writer) # On Linux/macOS, a duplex Pipe uses a Unix socket pair. Make room for # a full 64 KiB message before the same-process receiver gets to run. with socket.socket(fileno=os.dup(pipe_writer.fileno())) as pipe_socket: @@ -140,21 +141,15 @@ def run(args, cleanup): # Fail instead of hanging if the OS cannot buffer the entire message. os.set_blocking(pipe_writer.fileno(), False) backends.append(("Pipe bytes", pipe_writer.send_bytes, pipe_reader.recv_bytes)) + print("Pipe: send_bytes/recv_bytes, duplex Unix socket pair, requested send buffer 256 KiB") if args.zenoh: backends.append(zenoh_backend(cleanup)) - if args.lcm: - backends.append(lcm_backend(cleanup)) - - print(f"Python {platform.python_version()} | {platform.platform()}") - if args.zmq: - print(f"pyzmq {zmq.__version__} | libzmq {zmq.zmq_version()} | XPUB/SUB, copying bytes") - if args.pipe: - print("Pipe: send_bytes/recv_bytes, duplex Unix socket pair, requested send buffer 256 KiB") - if args.zenoh: print(f"Zenoh {version('eclipse-zenoh')}: two sessions over a Unix socket, bytes via a Python callback queue") if args.lcm: + backends.append(lcm_backend(cleanup)) print(f"LCM {version('lcm')}: UDP multicast, TTL 0, raw bytes via a Python callback") + print(f"{args.iterations:,} messages × {args.repeat} runs per size; median results, 100 warm-up messages") print("Same-process send + receive, one message in flight, including Python overhead.") print("MSGQ reads already-available data; its empty-queue wait path is not measured.") @@ -191,7 +186,7 @@ def run(args, cleanup): return results -def plot_results(results, args, plt): +def plot_results(results, path): from matplotlib.ticker import EngFormatter, MaxNLocator labels = {"msgq": "msgq", "pyzmq IPC": "pyzmq", "Pipe bytes": "multiprocessing.Pipe", "zenoh IPC": "zenoh", "LCM UDP": "LCM"} @@ -201,9 +196,7 @@ def plot_results(results, args, plt): with plt.rc_context({"font.family": "sans-serif", "font.sans-serif": ["Helvetica Neue", "Arial", "DejaVu Sans"]}): fig, ax = plt.subplots(figsize=(10, max(2.2, len(rows) * 0.48 + 0.7))) fig.set_facecolor("white") - ax.set_xlim(0, maximum * 1.2) - ax.set_ylim(len(rows) - 0.5, -0.5) - ax.set_yticks([]) + ax.set(xlim=(0, maximum * 1.2), ylim=(len(rows) - 0.5, -0.5), yticks=[]) # Keep grid lines out of the values on the right. ticks = MaxNLocator(nbins=4).tick_values(0, maximum) ax.set_xticks([tick for tick in ticks if 0 <= tick < maximum]) @@ -213,19 +206,17 @@ def plot_results(results, args, plt): ax.set_axisbelow(True) ax.grid(axis="x", color="#b7b7b7", linewidth=1.5) for side, spine in ax.spines.items(): - spine.set_visible(side == "left") - spine.set_color("#192a32") - spine.set_linewidth(2) + spine.set(visible=side == "left", color="#192a32", linewidth=2) for index, (name, rate) in enumerate(rows): gray = str(0.88 - 0.28 * index / max(len(rows) - 2, 1)) ax.barh(index, rate, height=1, color="#31cf43" if name == "msgq" else gray, zorder=2) ax.text(maximum * 0.029, index, labels[name], va="center", fontsize=16, fontweight="bold", color="#172b3a") ax.text(maximum * 1.173, index, formatter(rate), ha="right", va="center", fontsize=16, fontweight="bold", color="#172b3a") fig.subplots_adjust(left=0.055, right=0.98, top=0.98, bottom=0.21) - args.plot.parent.mkdir(parents=True, exist_ok=True) - fig.savefig(args.plot, dpi=180, facecolor=fig.get_facecolor()) + path.parent.mkdir(parents=True, exist_ok=True) + fig.savefig(path, dpi=180, facecolor=fig.get_facecolor()) plt.close(fig) - print(f"Chart saved to {args.plot}") + print(f"Chart saved to {path}") if __name__ == "__main__": From 2e968879eea87109a0bf07a7f3f757c6dbb744de Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sun, 6 Sep 2026 12:23:24 -0700 Subject: [PATCH 13/17] lil more --- README.md | 39 +++- examples/benchmark.png | Bin 49514 -> 54996 bytes examples/benchmark.py | 448 ++++++++++++++++++++++++++++------------- examples/publisher.py | 1 + examples/subscriber.py | 1 + 5 files changed, 346 insertions(+), 143 deletions(-) diff --git a/README.md b/README.md index 12be626aa..7a411fb8b 100644 --- a/README.md +++ b/README.md @@ -24,10 +24,45 @@ MSGQ lets programs on the same machine exchange messages. A publisher sends mess MSGQ is a generic high performance IPC pub sub system with a single publisher and multiple subscribers. It uses a ring buffer in shared memory to efficiently read and write data. Each read requires a copy. Writing can be done without a copy, as long as the size of the data is known in advance. This library also provides a spoofed implementation that can be used for deterministic testing, and visionipc, an IPC system specifically for large contiguous buffers (like images/video).

- Same-process 1 KiB message throughput by backend; excludes MSGQ's empty-queue wait path.
- Benchmarked on x86 Linux. See examples/benchmark.py. + Verified 1 KiB cross-process ping-pong: delivered messages per second, counting requests and replies.
+ 1 KiB cross-process ping-pong on x86 Linux; counts requests + replies; Zenoh tuned.

+
+Benchmark details and reproduction + +Two spawned processes exchange one request and reply at a time with blocking receives. +Both verify every sequence number and full payload. Each round trip counts as two delivered messages; +timing includes Python allocation and verification. This measures ping-pong performance, not maximum +streaming throughput or fan-out capacity. + +The chart shows the median of five shuffled samples, each lasting at least 2 seconds and 1,000 round trips, +after at least 100 warm-up exchanges and 0.1 seconds. Tests ran in Ubuntu 24.04 on a Linux VM with four AMD EPYC vCPUs. +MSGQ uses shared memory with its default blocking receive; elapsed time includes fallback polling stalls. +pyzmq and Zenoh use Unix sockets, LCM uses host-local UDP multicast, +and `multiprocessing.Pipe` uses raw bytes without pickling. +Zenoh disables QoS prioritization and uses its low-latency transport for 64-byte and 1 KiB messages. +It uses standard transport for 64 KiB because low-latency mode cannot fragment large messages. +Native blocking receive and the default shared-memory settings are retained. +Use `--no-zenoh-tuned` to compare the original Zenoh defaults. +The five 1 KiB samples varied as follows; all samples, including stalls, are retained. + +| Backend | Median messages/sec | Sample range | +| --- | ---: | ---: | +| MSGQ | 362k | 333–372k | +| pyzmq | 114k | 106–118k | +| multiprocessing.Pipe | 232k | 229–232k | +| Zenoh | 86k | 85–88k | +| LCM | 174k | 172–174k | + +See [raw samples and environment](examples/benchmark-results.json) and the [benchmark script](examples/benchmark.py). + +```sh +uv run examples/benchmark.py --json examples/benchmark-results.json --plot examples/benchmark.png +``` + +
+ ## Quickstart ```sh diff --git a/examples/benchmark.png b/examples/benchmark.png index b391e419bf19e28cd69effe25aa65bf4e7a89311..c4609d5d4c8e673669a3f19b21e34fe9c104ae53 100644 GIT binary patch literal 54996 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

Or=jGnQ_tFPg9R(=!Kzoa(6gc9`?% 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 literal 49514 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 diff --git a/examples/benchmark.py b/examples/benchmark.py index 712036521..0e18dd6c4 100644 --- a/examples/benchmark.py +++ b/examples/benchmark.py @@ -1,8 +1,8 @@ # /// script # requires-python = ">=3.11" -# dependencies = ["msgq>=1.0", "pyzmq", "eclipse-zenoh>=1.10", "lcm", "matplotlib"] +# dependencies = ["msgq-ipc>=1.0", "pyzmq", "eclipse-zenoh>=1.10", "lcm", "matplotlib"] # [tool.uv.sources] -# msgq = { path = ".." } +# msgq-ipc = { path = ".." } # [tool.ty.rules] # unresolved-import = "ignore" # /// @@ -10,19 +10,20 @@ import os import lcm import zmq +import json import msgq import time -import uuid import zenoh -import socket +import random import argparse +import hashlib import platform import tempfile import matplotlib import statistics +import subprocess import multiprocessing -from queue import Queue from pathlib import Path from threading import Event from collections import deque # codespell:ignore deque @@ -33,6 +34,10 @@ matplotlib.use("Agg") import matplotlib.pyplot as plt +BACKENDS = {"msgq": "shared memory, default blocking receive", "pyzmq IPC": "XPUB/SUB, Unix socket", + "Pipe bytes": "multiprocessing.Pipe, duplex, raw bytes", "zenoh IPC": "Unix stream, native FIFO receiver", + "LCM UDP": "UDP multicast, TTL 0"} + def positive_int(value): number = int(value) @@ -41,149 +46,310 @@ def positive_int(value): return number -def main(): - parser = argparse.ArgumentParser(description="Benchmark same-process pub/sub messaging.") - parser.add_argument("--iterations", type=positive_int, default=10_000, help="messages per run (default: %(default)s)") - parser.add_argument("--repeat", type=positive_int, default=5, help="runs per message size (default: %(default)s)") - parser.add_argument("--zmq", action=argparse.BooleanOptionalAction, default=True, help="benchmark pyzmq XPUB/SUB over IPC (requires pyzmq)") - parser.add_argument("--pipe", action=argparse.BooleanOptionalAction, default=True, help="benchmark multiprocessing.Pipe with raw bytes") - parser.add_argument("--zenoh", action=argparse.BooleanOptionalAction, default=True, help="benchmark Zenoh over a Unix socket (requires eclipse-zenoh)") - parser.add_argument("--lcm", action=argparse.BooleanOptionalAction, default=True, help="benchmark LCM over host-local UDP multicast (requires lcm)") - parser.add_argument("--plot", type=Path, help="save a chart, e.g. examples/benchmark.png (requires matplotlib)") - args = parser.parse_args() +def positive_seconds(value): + number = float(value) + if not 0 < number < float("inf"): + raise argparse.ArgumentTypeError("must be finite and greater than zero") + return number - with ExitStack() as cleanup: - results = run(args, cleanup) - if args.plot: - plot_results(results, args.plot) + +def zenoh_options(size, tuned): + if not tuned: + return {} + # Low-latency transport cannot fragment a 64 KiB payload (maximum frame: 65535 bytes). + return {"transport/unicast/qos/enabled": False, "transport/unicast/lowlatency": size <= 1024} -def zenoh_backend(cleanup): - directory = cleanup.enter_context(tempfile.TemporaryDirectory(prefix="msgq_zenoh_", dir="/tmp")) - endpoint = f"unixsock-stream/{directory}/socket" - - def config(listen, connect): - result = zenoh.Config() - result.insert_json5("listen/endpoints", repr(listen)) - result.insert_json5("connect/endpoints", repr(connect)) - result.insert_json5("scouting/multicast/enabled", "false") - result.insert_json5("scouting/gossip/enabled", "false") - return result - - receiver = cleanup.enter_context(zenoh.open(config([endpoint], []))) - messages = Queue() - subscriber = receiver.declare_subscriber("msgq/benchmark", lambda sample: messages.put(sample.payload.to_bytes())) - cleanup.callback(subscriber.undeclare) - sender = cleanup.enter_context(zenoh.open(config([], [endpoint]))) - publisher = sender.declare_publisher("msgq/benchmark") - cleanup.callback(publisher.undeclare) - ready = Event() - listener = publisher.declare_matching_listener(lambda status: ready.set() if status.matching else None) - cleanup.callback(listener.undeclare) - if publisher.matching_status.matching: - ready.set() - if not ready.wait(5): - raise RuntimeError("Zenoh subscriber did not become ready") - return "zenoh IPC", publisher.put, partial(messages.get, timeout=1) - - -def lcm_backend(cleanup): - # TTL zero confines multicast traffic to this host. - bus = lcm.LCM("udpm://239.255.76.67:7667?ttl=0") - channel = f"MSGQ_BENCHMARK_{uuid.uuid4().hex}" - messages = deque() # codespell:ignore deque - subscriber = bus.subscribe(channel, lambda channel, data: messages.append(data)) - cleanup.callback(bus.unsubscribe, subscriber) - - def receive(): - if bus.handle_timeout(1000) == 0: - raise RuntimeError("LCM receive timed out; check host multicast support") - return messages.popleft() - - return "LCM UDP", partial(bus.publish, channel), receive - - -def run(args, cleanup): - print(f"Python {platform.python_version()} | {platform.platform()}") - endpoint = f"msgq_benchmark_{uuid.uuid4().hex}" - publisher = msgq.pub_sock(endpoint) - subscriber = msgq.sub_sock(endpoint, timeout=1000) - backends = [("msgq", publisher.send, subscriber.receive)] - - if args.zmq: - # Keep Unix socket paths short enough for macOS as well as Linux. - directory = cleanup.enter_context(tempfile.TemporaryDirectory(prefix="msgq_bench_", dir="/tmp")) +def setup_backend(name, role, directory, prefix, barrier, pipe, cleanup, size, zenoh_tuned): + outgoing, incoming = ("request", "reply") if role == "sender" else ("reply", "request") + if name == "msgq": + os.environ["OPENPILOT_PREFIX"] = prefix + publisher = msgq.pub_sock(outgoing) + # Creating a publisher resets its queue, so both must exist before subscribing. + barrier.wait(10) + subscriber = msgq.sub_sock(incoming) + return publisher.send, subscriber.receive + if name == "pyzmq IPC": context = cleanup.enter_context(zmq.Context()) - zmq_publisher = context.socket(zmq.XPUB) - cleanup.callback(zmq_publisher.close, linger=0) - zmq_subscriber = context.socket(zmq.SUB) - cleanup.callback(zmq_subscriber.close, linger=0) - zmq_publisher.setsockopt(zmq.RCVTIMEO, 5000) - zmq_subscriber.setsockopt(zmq.RCVTIMEO, 1000) - zmq_subscriber.setsockopt(zmq.SUBSCRIBE, b"") - zmq_endpoint = f"ipc://{directory}/socket" - zmq_publisher.bind(zmq_endpoint) - zmq_subscriber.connect(zmq_endpoint) - # XPUB lets us wait for the subscription instead of guessing a startup delay. - if zmq_publisher.recv() != b"\x01": + publisher = context.socket(zmq.XPUB) + subscriber = context.socket(zmq.SUB) + cleanup.callback(publisher.close, linger=0) + cleanup.callback(subscriber.close, linger=0) + publisher.setsockopt(zmq.RCVTIMEO, 5000) + subscriber.setsockopt(zmq.RCVTIMEO, 5000) + subscriber.setsockopt(zmq.SUBSCRIBE, b"") + publisher.bind(f"ipc://{directory}/{outgoing}") + subscriber.connect(f"ipc://{directory}/{incoming}") + if publisher.recv() != b"\x01": raise RuntimeError("Unexpected ZeroMQ subscription") - backends.append(("pyzmq IPC", zmq_publisher.send, zmq_subscriber.recv)) - print(f"pyzmq {zmq.__version__} | libzmq {zmq.zmq_version()} | XPUB/SUB, copying bytes") - - if args.pipe: - pipe_reader, pipe_writer = multiprocessing.Pipe(duplex=True) - cleanup.enter_context(pipe_reader) - cleanup.enter_context(pipe_writer) - # On Linux/macOS, a duplex Pipe uses a Unix socket pair. Make room for - # a full 64 KiB message before the same-process receiver gets to run. - with socket.socket(fileno=os.dup(pipe_writer.fileno())) as pipe_socket: - pipe_socket.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 256 * 1024) - # Fail instead of hanging if the OS cannot buffer the entire message. - os.set_blocking(pipe_writer.fileno(), False) - backends.append(("Pipe bytes", pipe_writer.send_bytes, pipe_reader.recv_bytes)) - print("Pipe: send_bytes/recv_bytes, duplex Unix socket pair, requested send buffer 256 KiB") + return publisher.send, subscriber.recv + if name == "Pipe bytes": + cleanup.enter_context(pipe) + return pipe.send_bytes, pipe.recv_bytes + if name == "zenoh IPC": + endpoint = f"unixsock-stream/{directory}/zenoh" + config = zenoh.Config() + config.insert_json5("listen/endpoints", repr([endpoint] if role == "sender" else [])) + config.insert_json5("connect/endpoints", repr([] if role == "sender" else [endpoint])) + config.insert_json5("scouting/multicast/enabled", "false") + config.insert_json5("scouting/gossip/enabled", "false") + for key, value in zenoh_options(size, zenoh_tuned).items(): + config.insert_json5(key, json.dumps(value)) + session = cleanup.enter_context(zenoh.open(config)) + zenoh_subscriber = session.declare_subscriber(incoming) + cleanup.callback(zenoh_subscriber.undeclare) + publisher = session.declare_publisher(outgoing) + cleanup.callback(publisher.undeclare) + ready = Event() + listener = publisher.declare_matching_listener(lambda status: ready.set() if status.matching else None) + cleanup.callback(listener.undeclare) + if publisher.matching_status.matching: + ready.set() + if not ready.wait(10): + raise RuntimeError("Zenoh subscriber did not become ready") + return publisher.put, lambda: zenoh_subscriber.recv().payload.to_bytes() + if name == "LCM UDP": + bus = lcm.LCM("udpm://239.255.76.67:7667?ttl=0") + messages = deque() # codespell:ignore deque + token = Path(directory).name + subscriber = bus.subscribe(token + incoming, lambda channel, data: messages.append(data)) + cleanup.callback(bus.unsubscribe, subscriber) - if args.zenoh: - backends.append(zenoh_backend(cleanup)) - print(f"Zenoh {version('eclipse-zenoh')}: two sessions over a Unix socket, bytes via a Python callback queue") - if args.lcm: - backends.append(lcm_backend(cleanup)) - print(f"LCM {version('lcm')}: UDP multicast, TTL 0, raw bytes via a Python callback") - - print(f"{args.iterations:,} messages × {args.repeat} runs per size; median results, 100 warm-up messages") - print("Same-process send + receive, one message in flight, including Python overhead.") - print("MSGQ reads already-available data; its empty-queue wait path is not measured.") - print("Not cross-process latency or maximum streaming throughput.\n") - print(f"{'Backend':<12} {'Bytes':>10} {'Messages/s':>14} {'MiB/s':>12} {'µs/message':>14}") - print("-" * 66) + def receive(): + while not messages: + if bus.handle_timeout(5000) == 0: + raise TimeoutError("LCM receive timed out; check host multicast support") + return messages.popleft() + + return partial(bus.publish, token + outgoing), receive + raise ValueError(name) + + +def payload(sequence, padding): + return sequence.to_bytes(8, "little") + padding + + +def sender(send, receive, size, args): + padding = b"x" * (size - 8) + sequence = 0 + + def exchange(): + nonlocal sequence + message = payload(sequence, padding) + send(message) + reply = receive() + if reply != message: + raise RuntimeError(f"Invalid reply at sequence {sequence}: {None if reply is None else (len(reply), reply[:8])}") + sequence += 1 + + start = time.perf_counter() + while sequence < 100 or time.perf_counter() - start < 0.1: + exchange() + send(b"BEGIN") + if receive() != b"BEGIN": + raise RuntimeError("Invalid measurement handshake") + warm_up_count = sequence + cpu_start = time.process_time() + start = time.perf_counter() + while True: + for _ in range(64): + exchange() + elapsed = time.perf_counter() - start + count = sequence - warm_up_count + if count >= args.iterations and elapsed >= args.seconds: + break + cpu = time.process_time() - cpu_start + # Completion is outside timing; no retransmissions or silent loss tolerance. + send(b"END") + if receive() != b"END": + raise RuntimeError("Invalid completion handshake") + return {"round_trips": count, "seconds": elapsed, "cpu_seconds": cpu, "warm_up_round_trips": warm_up_count} + + +def echo(send, receive, size): + padding = b"x" * (size - 8) + sequence = 0 + measured_start = None + while True: + message = receive() + if message == b"BEGIN" and measured_start is None: + measured_start = sequence + send(message) + cpu_start = time.process_time() + elif message == b"END" and measured_start is not None: + cpu = time.process_time() - cpu_start + send(message) + return {"round_trips": sequence - measured_start, "cpu_seconds": cpu} + else: + if message != payload(sequence, padding): + raise RuntimeError(f"Invalid request at sequence {sequence}: {None if message is None else (len(message), message[:8])}") + sequence += 1 + send(message) + +def peer(name, role, directory, prefix, barrier, pipe, control, size, args): + try: + with ExitStack() as cleanup: + send, receive = setup_backend(name, role, directory, prefix, barrier, pipe, cleanup, size, args.zenoh_tuned) + barrier.wait(10) + result = sender(send, receive, size, args) if role == "sender" else echo(send, receive, size) + control.send(("ok", result)) + except BaseException as error: + control.send(("error", f"{name} {role}: {type(error).__name__}: {error}")) + finally: + pipe.close() + control.close() + + +def measure(name, size, args): + context = multiprocessing.get_context("spawn") + shared_root = "/tmp" if platform.system() == "Darwin" else "/dev/shm" + with tempfile.TemporaryDirectory(prefix="mq_", dir="/tmp") as directory, \ + tempfile.TemporaryDirectory(prefix="msgq_", dir=shared_root) as shared: + # An owned prefix isolates and removes MSGQ files without touching existing queues. + prefix = Path(shared).name.removeprefix("msgq_") + barrier = context.Barrier(2) + pipes = context.Pipe() + processes, controls = [], [] + deadline = time.monotonic() + args.timeout + try: + for role, pipe in zip(("sender", "echo"), pipes, strict=True): + parent, child = context.Pipe(duplex=False) + controls.append(parent) + process = context.Process(target=peer, args=(name, role, directory, prefix, barrier, pipe, child, size, args)) + process.start() + processes.append(process) + child.close() + for pipe in pipes: + pipe.close() + results = {} + while len(results) < 2: + if time.monotonic() >= deadline: + raise TimeoutError(f"{name}: trial exceeded {args.timeout}s") + for index, control in enumerate(controls): + if index in results: + continue + if control.poll(0.05): + try: + status, result = control.recv() + except EOFError as error: + raise RuntimeError(f"{name}: peer {index} closed its result pipe unexpectedly") from error + if status != "ok": + raise RuntimeError(result) + results[index] = result + elif processes[index].exitcode is not None: + raise RuntimeError(f"{name}: peer exited without results ({processes[index].exitcode})") + for process in processes: + process.join(max(0, deadline - time.monotonic())) + if process.exitcode != 0: + raise RuntimeError(f"{name}: peer failed to exit cleanly") + result = results[0] + if result["round_trips"] != results[1]["round_trips"]: + raise RuntimeError(f"{name}: peers disagree on verified message count") + result.update(backend=name, bytes=size, receiver_cpu_seconds=results[1]["cpu_seconds"]) + if name == "zenoh IPC": + result["zenoh_overrides"] = zenoh_options(size, args.zenoh_tuned) + return result + finally: + for process in processes: + if process.is_alive(): + process.terminate() + for process in processes: + process.join(2) + if process.is_alive(): + process.kill() + process.join() + for connection in (*controls, *pipes): + connection.close() + + +def metadata(): + root = Path(__file__).resolve().parents[1] + def git(*arguments): + try: + result = subprocess.run(["git", "-C", str(root), *arguments], capture_output=True, text=True, check=False) + return result.stdout.strip() if result.returncode == 0 else None + except OSError: + return None + + cpu = platform.processor() + if Path("/proc/cpuinfo").exists(): + cpu = next((line.split(":", 1)[1].strip() for line in Path("/proc/cpuinfo").read_text().splitlines() + if line.startswith("model name")), cpu) + sources = sorted(path for path in (root / "msgq").rglob("*") if path.suffix in {".py", ".pyx", ".pxd", ".cc", ".h"}) + digest = hashlib.sha256() + for path in sources: + digest.update(str(path.relative_to(root)).encode() + b"\0" + path.read_bytes()) + import msgq.ipc_pyx + binary = Path(msgq.ipc_pyx.__file__) + return {"utc": time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()), "platform": platform.platform(), + "python": platform.python_version(), "cpu": cpu, "cpu_count": os.cpu_count(), + "affinity": sorted(os.sched_getaffinity(0)) if hasattr(os, "sched_getaffinity") else None, + "versions": {name: version(name) for name in ("msgq-ipc", "pyzmq", "eclipse-zenoh", "lcm", "matplotlib")}, + "libzmq": zmq.zmq_version(), "msgq_binary_sha256": hashlib.sha256(binary.read_bytes()).hexdigest(), + "msgq_prealloc": os.environ.get("MSGQ_PREALLOC"), "cereal_fake": os.environ.get("CEREAL_FAKE"), + "git_revision": git("rev-parse", "HEAD"), "git_dirty": git("status", "--porcelain"), + "script_sha256": hashlib.sha256(Path(__file__).read_bytes()).hexdigest(), "msgq_source_sha256": digest.hexdigest()} + + +def save_report(report, path): + if path: + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(json.dumps(report, indent=2) + "\n") + + +def main(): + parser = argparse.ArgumentParser(description="Verified cross-process ping-pong; includes Python and payload validation overhead.") + parser.add_argument("--iterations", type=positive_int, default=1000, help="minimum round trips per sample (default: %(default)s)") + parser.add_argument("--seconds", type=positive_seconds, default=2, help="minimum seconds per sample (default: %(default)s)") + parser.add_argument("--repeat", type=positive_int, default=5, help="samples per backend and size (default: %(default)s)") + parser.add_argument("--timeout", type=positive_seconds, default=60, help="whole-trial timeout in seconds (default: %(default)s)") + parser.add_argument("--seed", type=int, default=0, help="shuffle seed (default: %(default)s)") + for flag in ("zmq", "pipe", "zenoh", "lcm"): + parser.add_argument(f"--{flag}", action=argparse.BooleanOptionalAction, default=True, help=f"benchmark {flag}") + parser.add_argument("--zenoh-tuned", action=argparse.BooleanOptionalAction, default=True, + help="tune Zenoh for latency; use normal transport for 64 KiB (default: %(default)s)") + parser.add_argument("--plot", type=Path, help="save a 1 KiB chart") + parser.add_argument("--json", type=Path, help="save raw samples and environment metadata") + args = parser.parse_args() + if "CEREAL_FAKE" in os.environ: + parser.error("Unset CEREAL_FAKE to benchmark the real MSGQ backend") + names = [name for name, enabled in zip(BACKENDS, (True, args.zmq, args.pipe, args.zenoh, args.lcm), strict=True) if enabled] + report = {"environment": metadata(), "settings": {key: str(value) if isinstance(value, Path) else value for key, value in vars(args).items()}, + "method": "Two spawned processes, one request/reply at a time, blocking receives, full payload/sequence verification in both peers. " + + "Delivered messages/sec = 2 * verified round trips / elapsed seconds; not maximum streaming throughput. " + + "One publisher/subscriber per direction; includes Python allocation and validation. CPU is diagnostic.", + "transports": {name: BACKENDS[name] for name in names}, "samples": []} + if args.zenoh: + report["transports"]["zenoh IPC"] += ( + "; QoS off, low-latency for 64 B/1 KiB, standard transport for 64 KiB" if args.zenoh_tuned else "; default transport settings") + print(report["method"], flush=True) + for name, transport in report["transports"].items(): + print(f"{name}: {transport}", flush=True) + randomizer = random.Random(args.seed) + for repeat in range(args.repeat): + jobs = [(name, size) for name in names for size in (64, 1024, 65536)] + randomizer.shuffle(jobs) + for name, size in jobs: + try: + sample = measure(name, size, args) + except Exception as error: + report["failure"] = {"backend": name, "bytes": size, "repeat": repeat, "error": str(error)} + save_report(report, args.json) + raise + sample["repeat"] = repeat + report["samples"].append(sample) + save_report(report, args.json) + print(f"{name:<12} {size:>6} bytes: {sample['round_trips'] / sample['seconds'] * 2:>12,.0f} delivered messages/sec", flush=True) results = [] - for size in (64, 1024, 65536): - payload = b"x" * size - for name, send, receive in backends: - for _ in range(100): - send(payload) - if receive() != payload: - raise RuntimeError(f"{name}: warm-up message was lost or corrupted") - - durations = [] - for _ in range(args.repeat): - start = time.perf_counter() - for _ in range(args.iterations): - send(payload) - received = receive() - if received is None: - raise RuntimeError(f"{name}: receive timed out") - durations.append(time.perf_counter() - start) - if received != payload: - raise RuntimeError(f"{name}: received message was corrupted") - - seconds_per_message = statistics.median(durations) / args.iterations - messages_per_second = 1 / seconds_per_message - mib_per_second = messages_per_second * size / 1024**2 - results.append((name, size, messages_per_second)) - print(f"{name:<12} {size:>10,} {messages_per_second:>14,.0f} {mib_per_second:>12,.1f} {seconds_per_message * 1e6:>14.2f}", flush=True) - return results + for name in names: + for size in (64, 1024, 65536): + rates = [2 * sample["round_trips"] / sample["seconds"] for sample in report["samples"] if sample["backend"] == name and sample["bytes"] == size] + results.append((name, size, statistics.median(rates))) + report["medians"] = [{"backend": name, "bytes": size, "messages_per_second": rate} for name, size, rate in results] + save_report(report, args.json) + if args.plot: + plot_results(results, args.plot) def plot_results(results, path): @@ -201,7 +367,7 @@ def plot_results(results, path): ticks = MaxNLocator(nbins=4).tick_values(0, maximum) ax.set_xticks([tick for tick in ticks if 0 <= tick < maximum]) ax.xaxis.set_major_formatter(EngFormatter(sep="")) - ax.set_xlabel("Messages/sec — higher is better", fontsize=14, labelpad=8, color="#172b3a") + ax.set_xlabel("Delivered messages/sec — higher is better", fontsize=14, labelpad=8, color="#172b3a") ax.tick_params(length=0, pad=6, labelsize=11, colors="#425b6c") ax.set_axisbelow(True) ax.grid(axis="x", color="#b7b7b7", linewidth=1.5) diff --git a/examples/publisher.py b/examples/publisher.py index a0fbdf9ad..ae3bcd01d 100644 --- a/examples/publisher.py +++ b/examples/publisher.py @@ -5,6 +5,7 @@ publisher = msgq.pub_sock("msgq_example") +print("Ctrl-C to exit") try: while True: message = "Hello from MSGQ!" diff --git a/examples/subscriber.py b/examples/subscriber.py index d84725215..4d48c4822 100644 --- a/examples/subscriber.py +++ b/examples/subscriber.py @@ -3,6 +3,7 @@ subscriber = msgq.sub_sock("msgq_example", timeout=1000) +print("Ctrl-C to exit") try: while True: message = subscriber.receive() From 347e800a4420eff7944c245dedefc05cb02fb5b2 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sun, 6 Sep 2026 12:28:02 -0700 Subject: [PATCH 14/17] lil more --- README.md | 39 ++------------------------------------- examples/benchmark.png | Bin 54996 -> 52692 bytes examples/benchmark.py | 2 +- 3 files changed, 3 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index 7a411fb8b..b0f6bb57e 100644 --- a/README.md +++ b/README.md @@ -24,45 +24,10 @@ MSGQ lets programs on the same machine exchange messages. A publisher sends mess MSGQ is a generic high performance IPC pub sub system with a single publisher and multiple subscribers. It uses a ring buffer in shared memory to efficiently read and write data. Each read requires a copy. Writing can be done without a copy, as long as the size of the data is known in advance. This library also provides a spoofed implementation that can be used for deterministic testing, and visionipc, an IPC system specifically for large contiguous buffers (like images/video).

- Verified 1 KiB cross-process ping-pong: delivered messages per second, counting requests and replies.
- 1 KiB cross-process ping-pong on x86 Linux; counts requests + replies; Zenoh tuned. + 1 KiB cross-process ping-pong benchmark
+ 1 KiB cross-process ping-pong on x86 Linux. Benchmark script.

-
-Benchmark details and reproduction - -Two spawned processes exchange one request and reply at a time with blocking receives. -Both verify every sequence number and full payload. Each round trip counts as two delivered messages; -timing includes Python allocation and verification. This measures ping-pong performance, not maximum -streaming throughput or fan-out capacity. - -The chart shows the median of five shuffled samples, each lasting at least 2 seconds and 1,000 round trips, -after at least 100 warm-up exchanges and 0.1 seconds. Tests ran in Ubuntu 24.04 on a Linux VM with four AMD EPYC vCPUs. -MSGQ uses shared memory with its default blocking receive; elapsed time includes fallback polling stalls. -pyzmq and Zenoh use Unix sockets, LCM uses host-local UDP multicast, -and `multiprocessing.Pipe` uses raw bytes without pickling. -Zenoh disables QoS prioritization and uses its low-latency transport for 64-byte and 1 KiB messages. -It uses standard transport for 64 KiB because low-latency mode cannot fragment large messages. -Native blocking receive and the default shared-memory settings are retained. -Use `--no-zenoh-tuned` to compare the original Zenoh defaults. -The five 1 KiB samples varied as follows; all samples, including stalls, are retained. - -| Backend | Median messages/sec | Sample range | -| --- | ---: | ---: | -| MSGQ | 362k | 333–372k | -| pyzmq | 114k | 106–118k | -| multiprocessing.Pipe | 232k | 229–232k | -| Zenoh | 86k | 85–88k | -| LCM | 174k | 172–174k | - -See [raw samples and environment](examples/benchmark-results.json) and the [benchmark script](examples/benchmark.py). - -```sh -uv run examples/benchmark.py --json examples/benchmark-results.json --plot examples/benchmark.png -``` - -
- ## Quickstart ```sh diff --git a/examples/benchmark.png b/examples/benchmark.png index c4609d5d4c8e673669a3f19b21e34fe9c104ae53..ace029a818c43c195bd0bb2f178e819a88a729ed 100644 GIT binary patch delta 17357 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 WOpY1Y{Ix>fY^=TQC(ZpeM0lGvc9=dEdackA0O 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 R#IvInW!0V+K6@GX-vC`>C?fy> delta 19679 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 W_NE3h6%#?)VI58qPCPvBoA4*gsv_6` diff --git a/examples/benchmark.py b/examples/benchmark.py index 0e18dd6c4..afa1498cd 100644 --- a/examples/benchmark.py +++ b/examples/benchmark.py @@ -367,7 +367,7 @@ def plot_results(results, path): ticks = MaxNLocator(nbins=4).tick_values(0, maximum) ax.set_xticks([tick for tick in ticks if 0 <= tick < maximum]) ax.xaxis.set_major_formatter(EngFormatter(sep="")) - ax.set_xlabel("Delivered messages/sec — higher is better", fontsize=14, labelpad=8, color="#172b3a") + ax.set_xlabel("messages/sec — higher is better", fontsize=14, labelpad=8, color="#172b3a") ax.tick_params(length=0, pad=6, labelsize=11, colors="#425b6c") ax.set_axisbelow(True) ax.grid(axis="x", color="#b7b7b7", linewidth=1.5) From e84ecf6f920c6f7bb0648edcea23cbaa1236794a Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sun, 6 Sep 2026 12:29:40 -0700 Subject: [PATCH 15/17] link to wikipedia --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b0f6bb57e..4181420dc 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@

MSGQ

-

High-performance pub/sub messaging, made simple.
For Python, C, and C++.

+

High-performance pub/sub messaging, made simple.
For Python, C, and C++.

Quickstart From c07c53f3cdea3174823bdb36bbcc5cd889aee792 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sun, 6 Sep 2026 12:34:22 -0700 Subject: [PATCH 16/17] cleanup script --- examples/benchmark.py | 163 +++++++++--------------------------------- 1 file changed, 35 insertions(+), 128 deletions(-) diff --git a/examples/benchmark.py b/examples/benchmark.py index afa1498cd..808fd2450 100644 --- a/examples/benchmark.py +++ b/examples/benchmark.py @@ -10,18 +10,15 @@ import os import lcm import zmq -import json import msgq import time import zenoh import random import argparse -import hashlib import platform import tempfile import matplotlib import statistics -import subprocess import multiprocessing from pathlib import Path @@ -29,38 +26,18 @@ from collections import deque # codespell:ignore deque from functools import partial from contextlib import ExitStack -from importlib.metadata import version matplotlib.use("Agg") import matplotlib.pyplot as plt -BACKENDS = {"msgq": "shared memory, default blocking receive", "pyzmq IPC": "XPUB/SUB, Unix socket", - "Pipe bytes": "multiprocessing.Pipe, duplex, raw bytes", "zenoh IPC": "Unix stream, native FIFO receiver", - "LCM UDP": "UDP multicast, TTL 0"} +BACKENDS = ("msgq", "pyzmq IPC", "Pipe bytes", "zenoh IPC", "LCM UDP") +ROUNDS = 1000 +SECONDS = 2 +REPEATS = 5 +TIMEOUT = 60 -def positive_int(value): - number = int(value) - if number <= 0: - raise argparse.ArgumentTypeError("must be greater than zero") - return number - - -def positive_seconds(value): - number = float(value) - if not 0 < number < float("inf"): - raise argparse.ArgumentTypeError("must be finite and greater than zero") - return number - - -def zenoh_options(size, tuned): - if not tuned: - return {} - # Low-latency transport cannot fragment a 64 KiB payload (maximum frame: 65535 bytes). - return {"transport/unicast/qos/enabled": False, "transport/unicast/lowlatency": size <= 1024} - - -def setup_backend(name, role, directory, prefix, barrier, pipe, cleanup, size, zenoh_tuned): +def setup_backend(name, role, directory, prefix, barrier, pipe, cleanup, size): outgoing, incoming = ("request", "reply") if role == "sender" else ("reply", "request") if name == "msgq": os.environ["OPENPILOT_PREFIX"] = prefix @@ -93,8 +70,9 @@ def setup_backend(name, role, directory, prefix, barrier, pipe, cleanup, size, z config.insert_json5("connect/endpoints", repr([] if role == "sender" else [endpoint])) config.insert_json5("scouting/multicast/enabled", "false") config.insert_json5("scouting/gossip/enabled", "false") - for key, value in zenoh_options(size, zenoh_tuned).items(): - config.insert_json5(key, json.dumps(value)) + config.insert_json5("transport/unicast/qos/enabled", "false") + # Low-latency transport cannot fragment a 64 KiB payload. + config.insert_json5("transport/unicast/lowlatency", str(size <= 1024).lower()) session = cleanup.enter_context(zenoh.open(config)) zenoh_subscriber = session.declare_subscriber(incoming) cleanup.callback(zenoh_subscriber.undeclare) @@ -129,7 +107,7 @@ def payload(sequence, padding): return sequence.to_bytes(8, "little") + padding -def sender(send, receive, size, args): +def sender(send, receive, size): padding = b"x" * (size - 8) sequence = 0 @@ -149,21 +127,19 @@ def exchange(): if receive() != b"BEGIN": raise RuntimeError("Invalid measurement handshake") warm_up_count = sequence - cpu_start = time.process_time() start = time.perf_counter() while True: for _ in range(64): exchange() elapsed = time.perf_counter() - start count = sequence - warm_up_count - if count >= args.iterations and elapsed >= args.seconds: + if count >= ROUNDS and elapsed >= SECONDS: break - cpu = time.process_time() - cpu_start - # Completion is outside timing; no retransmissions or silent loss tolerance. + # Stop timing before the completion handshake. send(b"END") if receive() != b"END": raise RuntimeError("Invalid completion handshake") - return {"round_trips": count, "seconds": elapsed, "cpu_seconds": cpu, "warm_up_round_trips": warm_up_count} + return {"round_trips": count, "seconds": elapsed} def echo(send, receive, size): @@ -175,11 +151,9 @@ def echo(send, receive, size): if message == b"BEGIN" and measured_start is None: measured_start = sequence send(message) - cpu_start = time.process_time() elif message == b"END" and measured_start is not None: - cpu = time.process_time() - cpu_start send(message) - return {"round_trips": sequence - measured_start, "cpu_seconds": cpu} + return {"round_trips": sequence - measured_start} else: if message != payload(sequence, padding): raise RuntimeError(f"Invalid request at sequence {sequence}: {None if message is None else (len(message), message[:8])}") @@ -187,12 +161,12 @@ def echo(send, receive, size): send(message) -def peer(name, role, directory, prefix, barrier, pipe, control, size, args): +def peer(name, role, directory, prefix, barrier, pipe, control, size): try: with ExitStack() as cleanup: - send, receive = setup_backend(name, role, directory, prefix, barrier, pipe, cleanup, size, args.zenoh_tuned) + send, receive = setup_backend(name, role, directory, prefix, barrier, pipe, cleanup, size) barrier.wait(10) - result = sender(send, receive, size, args) if role == "sender" else echo(send, receive, size) + result = sender(send, receive, size) if role == "sender" else echo(send, receive, size) control.send(("ok", result)) except BaseException as error: control.send(("error", f"{name} {role}: {type(error).__name__}: {error}")) @@ -201,7 +175,7 @@ def peer(name, role, directory, prefix, barrier, pipe, control, size, args): control.close() -def measure(name, size, args): +def measure(name, size): context = multiprocessing.get_context("spawn") shared_root = "/tmp" if platform.system() == "Darwin" else "/dev/shm" with tempfile.TemporaryDirectory(prefix="mq_", dir="/tmp") as directory, \ @@ -211,12 +185,12 @@ def measure(name, size, args): barrier = context.Barrier(2) pipes = context.Pipe() processes, controls = [], [] - deadline = time.monotonic() + args.timeout + deadline = time.monotonic() + TIMEOUT try: for role, pipe in zip(("sender", "echo"), pipes, strict=True): parent, child = context.Pipe(duplex=False) controls.append(parent) - process = context.Process(target=peer, args=(name, role, directory, prefix, barrier, pipe, child, size, args)) + process = context.Process(target=peer, args=(name, role, directory, prefix, barrier, pipe, child, size)) process.start() processes.append(process) child.close() @@ -225,7 +199,7 @@ def measure(name, size, args): results = {} while len(results) < 2: if time.monotonic() >= deadline: - raise TimeoutError(f"{name}: trial exceeded {args.timeout}s") + raise TimeoutError(f"{name}: trial exceeded {TIMEOUT}s") for index, control in enumerate(controls): if index in results: continue @@ -246,9 +220,6 @@ def measure(name, size, args): result = results[0] if result["round_trips"] != results[1]["round_trips"]: raise RuntimeError(f"{name}: peers disagree on verified message count") - result.update(backend=name, bytes=size, receiver_cpu_seconds=results[1]["cpu_seconds"]) - if name == "zenoh IPC": - result["zenoh_overrides"] = zenoh_options(size, args.zenoh_tuned) return result finally: for process in processes: @@ -263,91 +234,27 @@ def measure(name, size, args): connection.close() -def metadata(): - root = Path(__file__).resolve().parents[1] - def git(*arguments): - try: - result = subprocess.run(["git", "-C", str(root), *arguments], capture_output=True, text=True, check=False) - return result.stdout.strip() if result.returncode == 0 else None - except OSError: - return None - - cpu = platform.processor() - if Path("/proc/cpuinfo").exists(): - cpu = next((line.split(":", 1)[1].strip() for line in Path("/proc/cpuinfo").read_text().splitlines() - if line.startswith("model name")), cpu) - sources = sorted(path for path in (root / "msgq").rglob("*") if path.suffix in {".py", ".pyx", ".pxd", ".cc", ".h"}) - digest = hashlib.sha256() - for path in sources: - digest.update(str(path.relative_to(root)).encode() + b"\0" + path.read_bytes()) - import msgq.ipc_pyx - binary = Path(msgq.ipc_pyx.__file__) - return {"utc": time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()), "platform": platform.platform(), - "python": platform.python_version(), "cpu": cpu, "cpu_count": os.cpu_count(), - "affinity": sorted(os.sched_getaffinity(0)) if hasattr(os, "sched_getaffinity") else None, - "versions": {name: version(name) for name in ("msgq-ipc", "pyzmq", "eclipse-zenoh", "lcm", "matplotlib")}, - "libzmq": zmq.zmq_version(), "msgq_binary_sha256": hashlib.sha256(binary.read_bytes()).hexdigest(), - "msgq_prealloc": os.environ.get("MSGQ_PREALLOC"), "cereal_fake": os.environ.get("CEREAL_FAKE"), - "git_revision": git("rev-parse", "HEAD"), "git_dirty": git("status", "--porcelain"), - "script_sha256": hashlib.sha256(Path(__file__).read_bytes()).hexdigest(), "msgq_source_sha256": digest.hexdigest()} - - -def save_report(report, path): - if path: - path.parent.mkdir(parents=True, exist_ok=True) - path.write_text(json.dumps(report, indent=2) + "\n") - - def main(): - parser = argparse.ArgumentParser(description="Verified cross-process ping-pong; includes Python and payload validation overhead.") - parser.add_argument("--iterations", type=positive_int, default=1000, help="minimum round trips per sample (default: %(default)s)") - parser.add_argument("--seconds", type=positive_seconds, default=2, help="minimum seconds per sample (default: %(default)s)") - parser.add_argument("--repeat", type=positive_int, default=5, help="samples per backend and size (default: %(default)s)") - parser.add_argument("--timeout", type=positive_seconds, default=60, help="whole-trial timeout in seconds (default: %(default)s)") - parser.add_argument("--seed", type=int, default=0, help="shuffle seed (default: %(default)s)") - for flag in ("zmq", "pipe", "zenoh", "lcm"): - parser.add_argument(f"--{flag}", action=argparse.BooleanOptionalAction, default=True, help=f"benchmark {flag}") - parser.add_argument("--zenoh-tuned", action=argparse.BooleanOptionalAction, default=True, - help="tune Zenoh for latency; use normal transport for 64 KiB (default: %(default)s)") + parser = argparse.ArgumentParser(description="Cross-process pub/sub ping-pong benchmark.") parser.add_argument("--plot", type=Path, help="save a 1 KiB chart") - parser.add_argument("--json", type=Path, help="save raw samples and environment metadata") args = parser.parse_args() if "CEREAL_FAKE" in os.environ: parser.error("Unset CEREAL_FAKE to benchmark the real MSGQ backend") - names = [name for name, enabled in zip(BACKENDS, (True, args.zmq, args.pipe, args.zenoh, args.lcm), strict=True) if enabled] - report = {"environment": metadata(), "settings": {key: str(value) if isinstance(value, Path) else value for key, value in vars(args).items()}, - "method": "Two spawned processes, one request/reply at a time, blocking receives, full payload/sequence verification in both peers. " + - "Delivered messages/sec = 2 * verified round trips / elapsed seconds; not maximum streaming throughput. " + - "One publisher/subscriber per direction; includes Python allocation and validation. CPU is diagnostic.", - "transports": {name: BACKENDS[name] for name in names}, "samples": []} - if args.zenoh: - report["transports"]["zenoh IPC"] += ( - "; QoS off, low-latency for 64 B/1 KiB, standard transport for 64 KiB" if args.zenoh_tuned else "; default transport settings") - print(report["method"], flush=True) - for name, transport in report["transports"].items(): - print(f"{name}: {transport}", flush=True) - randomizer = random.Random(args.seed) - for repeat in range(args.repeat): - jobs = [(name, size) for name in names for size in (64, 1024, 65536)] + print("Cross-process ping-pong; messages/sec counts requests and replies.", flush=True) + samples = {(name, size): [] for name in BACKENDS for size in (64, 1024, 65536)} + randomizer = random.Random(0) + for _ in range(REPEATS): + jobs = list(samples) randomizer.shuffle(jobs) for name, size in jobs: - try: - sample = measure(name, size, args) - except Exception as error: - report["failure"] = {"backend": name, "bytes": size, "repeat": repeat, "error": str(error)} - save_report(report, args.json) - raise - sample["repeat"] = repeat - report["samples"].append(sample) - save_report(report, args.json) - print(f"{name:<12} {size:>6} bytes: {sample['round_trips'] / sample['seconds'] * 2:>12,.0f} delivered messages/sec", flush=True) - results = [] - for name in names: - for size in (64, 1024, 65536): - rates = [2 * sample["round_trips"] / sample["seconds"] for sample in report["samples"] if sample["backend"] == name and sample["bytes"] == size] - results.append((name, size, statistics.median(rates))) - report["medians"] = [{"backend": name, "bytes": size, "messages_per_second": rate} for name, size, rate in results] - save_report(report, args.json) + sample = measure(name, size) + rate = 2 * sample["round_trips"] / sample["seconds"] + samples[name, size].append(rate) + print(f"{name:<12} {size:>6} bytes: {rate:>12,.0f} messages/sec", flush=True) + results = [(name, size, statistics.median(rates)) for (name, size), rates in samples.items()] + print("\nMedians:") + for name, size, rate in results: + print(f"{name:<12} {size:>6} bytes: {rate:>12,.0f} messages/sec") if args.plot: plot_results(results, args.plot) From 0b0dee33ba6ec95d77a63dba9319bba7935365d0 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sun, 6 Sep 2026 12:38:12 -0700 Subject: [PATCH 17/17] dont check in --- README.md | 2 +- examples/benchmark.png | Bin 52692 -> 0 bytes 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 examples/benchmark.png diff --git a/README.md b/README.md index 4181420dc..b5e0a163c 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ MSGQ lets programs on the same machine exchange messages. A publisher sends mess MSGQ is a generic high performance IPC pub sub system with a single publisher and multiple subscribers. It uses a ring buffer in shared memory to efficiently read and write data. Each read requires a copy. Writing can be done without a copy, as long as the size of the data is known in advance. This library also provides a spoofed implementation that can be used for deterministic testing, and visionipc, an IPC system specifically for large contiguous buffers (like images/video).

- 1 KiB cross-process ping-pong benchmark
+ 1 KiB cross-process ping-pong benchmark
1 KiB cross-process ping-pong on x86 Linux. Benchmark script.

diff --git a/examples/benchmark.png b/examples/benchmark.png deleted file mode 100644 index ace029a818c43c195bd0bb2f178e819a88a729ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52692 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