On 6/9/21 3:09 PM, Gaetan Rivet wrote: > Add a lockless multi-producer/single-consumer (MPSC), linked-list based, > intrusive, unbounded queue that does not require deferred memory > management. > > The queue is designed to improve the specific MPSC setup. A benchmark > accompanies the unit tests to measure the difference in this configuration. > A single reader thread polls the queue while N writers enqueue elements > as fast as possible. The mpsc-queue is compared against the regular ovs-list > as well as the guarded list. The latter usually offers a slight improvement > by batching the element removal, however the mpsc-queue is faster. > > The average is of each producer threads time: > > $ ./tests/ovstest test-mpsc-queue benchmark 3000000 1 > Benchmarking n=3000000 on 1 + 1 threads. > type\thread: Reader 1 Avg > mpsc-queue: 167 167 167 ms > list(spin): 89 80 80 ms > list(mutex): 745 745 745 ms > guarded list: 788 788 788 ms > > $ ./tests/ovstest test-mpsc-queue benchmark 3000000 2 > Benchmarking n=3000000 on 1 + 2 threads. > type\thread: Reader 1 2 Avg > mpsc-queue: 98 97 94 95 ms > list(spin): 185 171 173 172 ms > list(mutex): 203 199 203 201 ms > guarded list: 269 269 188 228 ms > > $ ./tests/ovstest test-mpsc-queue benchmark 3000000 3 > Benchmarking n=3000000 on 1 + 3 threads. > type\thread: Reader 1 2 3 Avg > mpsc-queue: 76 76 65 76 72 ms > list(spin): 246 110 240 238 196 ms > list(mutex): 542 541 541 539 540 ms > guarded list: 535 535 507 511 517 ms > > $ ./tests/ovstest test-mpsc-queue benchmark 3000000 4 > Benchmarking n=3000000 on 1 + 4 threads. > type\thread: Reader 1 2 3 4 Avg > mpsc-queue: 73 68 68 68 68 68 ms > list(spin): 294 275 279 277 282 278 ms > list(mutex): 346 309 287 345 302 310 ms > guarded list: 378 319 334 378 351 345 ms > > Signed-off-by: Gaetan Rivet <[email protected]> > Reviewed-by: Eli Britstein <[email protected]> > --- > lib/automake.mk | 2 + > lib/mpsc-queue.c | 251 +++++++++++++ > lib/mpsc-queue.h | 190 ++++++++++ > tests/automake.mk | 1 + > tests/library.at | 5 + > tests/test-mpsc-queue.c | 772 ++++++++++++++++++++++++++++++++++++++++ > 6 files changed, 1221 insertions(+) > create mode 100644 lib/mpsc-queue.c > create mode 100644 lib/mpsc-queue.h > create mode 100644 tests/test-mpsc-queue.c > Reviewed-by: Maxime Coquelin <[email protected]> Thanks, Maxime _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
