diff options
author | Olivier Cochard <olivier@FreeBSD.org> | 2025-01-09 22:58:36 +0100 |
---|---|---|
committer | Olivier Cochard <olivier@FreeBSD.org> | 2025-01-09 23:07:38 +0100 |
commit | 4516e09a236bb31d6e852eadfb05f9576e4db7da (patch) | |
tree | 5c2d947f22448c924040427c8613edf8d6bda02e /net/bird3/files/patch-05-mainloop-dropped-old-socket | |
parent | math/gp2c: upgrade to 0.0.14 (diff) |
net/bird3: Add new branch 3.x (multithreaded)
Warning: Consider version 3.0.0 to be unstable.
PR: 283403
Sponsored by: Netflix
Diffstat (limited to 'net/bird3/files/patch-05-mainloop-dropped-old-socket')
-rw-r--r-- | net/bird3/files/patch-05-mainloop-dropped-old-socket | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/net/bird3/files/patch-05-mainloop-dropped-old-socket b/net/bird3/files/patch-05-mainloop-dropped-old-socket new file mode 100644 index 000000000000..eea4d1d26af2 --- /dev/null +++ b/net/bird3/files/patch-05-mainloop-dropped-old-socket @@ -0,0 +1,86 @@ +From 3d1f19e335f55c8cfa3cb7ca9d7b88ca03173d8e Mon Sep 17 00:00:00 2001 +From: Maria Matejka <mq@ucw.cz> +Date: Sun, 22 Dec 2024 21:32:28 +0100 +Subject: [PATCH] Mainloop: Dropped old socket prioritization magic + +This is now done in worker threads and the mainloop needs to do other things, +most notably kernel and CLI, with less overhead of repeatedly checking poll. +--- + sysdep/unix/io-loop.c | 2 +- + sysdep/unix/io.c | 21 +++++++-------------- + 2 files changed, 8 insertions(+), 15 deletions(-) + +diff --git a/sysdep/unix/io-loop.c b/sysdep/unix/io-loop.c +index f69189e06..a72c69a03 100644 +--- sysdep/unix/io-loop.c ++++ sysdep/unix/io-loop.c +@@ -1403,7 +1403,7 @@ bool task_still_in_limit(void) + { + static u64 main_counter = 0; + if (this_birdloop == &main_birdloop) +- return (++main_counter % 2048); /* This is a hack because of no accounting in mainloop */ ++ return (++main_counter % 512); /* This is a hack because of no accounting in mainloop */ + else + return ns_now() < account_last + this_thread->max_loop_time_ns; + } +diff --git a/sysdep/unix/io.c b/sysdep/unix/io.c +index f9785c074..51395e1e9 100644 +--- sysdep/unix/io.c ++++ sysdep/unix/io.c +@@ -53,14 +53,15 @@ + + /* Maximum number of calls of tx handler for one socket in one + * poll iteration. Should be small enough to not monopolize CPU by +- * one protocol instance. ++ * one protocol instance. But as most of the problems are now offloaded ++ * to worker threads, too low values may actually bring problems with ++ * latency. + */ +-#define MAX_STEPS 4 ++#define MAX_STEPS 2048 + + /* Maximum number of calls of rx handler for all sockets in one poll +- iteration. RX callbacks are often much more costly so we limit +- this to gen small latencies */ +-#define MAX_RX_STEPS 4 ++ iteration. RX callbacks are often a little bit more costly. */ ++#define MAX_RX_STEPS 512 + + + /* +@@ -2581,8 +2582,6 @@ io_init(void) + srandom((uint) (now ^ (now >> 32))); + } + +-static int short_loops = 0; +-#define SHORT_LOOP_MAX 10 + #define WORK_EVENTS_MAX 10 + + sock *stored_sock; +@@ -2670,10 +2669,9 @@ io_loop(void) + { + if (pfd.pfd.data[0].revents & POLLIN) + { +- /* IO loop reload requested */ ++ /* Somebody sent an event to mainloop */ + pipe_drain(&main_birdloop.thread->wakeup); + atomic_fetch_and_explicit(&main_birdloop.thread_transition, ~LTT_PING, memory_order_acq_rel); +- continue; + } + + times_update(); +@@ -2719,11 +2717,6 @@ io_loop(void) + main_birdloop.sock_active = sk_next(s); + } + +- short_loops++; +- if (events && (short_loops < SHORT_LOOP_MAX)) +- continue; +- short_loops = 0; +- + int count = 0; + main_birdloop.sock_active = stored_sock; + if (main_birdloop.sock_active == NULL) +-- +GitLab + |