summaryrefslogtreecommitdiff
path: root/sysdep/unix/io-loop.c
AgeCommit message (Collapse)Author
2023-04-06Loop: keep running the same loop for some time if there is work to doMaria Matejka
2023-04-04Sockets: Unified API for main and other loopsMaria Matejka
Now sk_open() requires an explicit IO loop to open the socket in. Also specific functions for socket RX pause / resume are added to allow for BGP corking. And last but not least, socket reloop is now synchronous to resolve weird cases of the target loop stopping before actually picking up the relooped socket. Now the caller must ensure that both loops are locked while relooping, and this way all sockets always have their respective loop.
2023-04-04More efficient IO loop event execution to avoid long loopsMaria Matejka
If there are lots of loops in a single thread and only some of the loops are actually active, the other loops are now kept aside and not checked until they actually get some timers, events or active sockets. This should help with extreme loads like 100k tables and protocols. Also ping and loop pickup mechanism was allowing subtle race conditions. Now properly handling collisions between loop ping and pickup.
2023-01-19Decoupling loops from threads to allow fixed thread countMaria Matejka
On large configurations, too many threads would spawn with one thread per loop. Therefore, threads may now run multiple loops at once. The thread count is configurable and may be changed during run. All threads are spawned on startup. This change helps with memory bloating. BIRD filters need large temporary memory blocks to store their stack and also memory management keeps its hot page storage per-thread. Known bugs: * Thread autobalancing is not yet implemented. * Low latency loops are executed together with standard loops.
2022-10-05Poll errors must also drop a corefile. And we shouldn't run sockets when ↵Maria Matejka
sockets have changed
2022-10-05Fixed previously untested paths in RPKIMaria Matejka
2022-09-21Local page allocationMaria Matejka
2022-09-20Pipe kick-and-drain packed into a neat structure and functions.Maria Matejka
2022-09-18Loop flags: a simple idempotent event announcement mechanismMaria Matejka
2022-09-18Cancelling all timers when loop stopsMaria Matejka
2022-08-02Introducing basic RCU primitives for lock-less shared data structuresMaria Matejka
2022-07-28Moved the thread starting code to IO loop codeMaria Matejka
2022-07-18Merge commit '94eb0858' into thread-nextMaria Matejka
2021-11-22Converting the former BFD loop to a universal IO loop and protocol loop.Maria Matejka
There is a simple universal IO loop, taking care of events, timers and sockets. Primarily, one instance of a protocol should use exactly one IO loop to do all its work, as is now done in BFD. Contrary to previous versions, the loop is now launched and cleaned by the nest/proto.c code, allowing for a protocol to just request its own loop by setting the loop's lock order in config higher than the_bird. It is not supported nor checked if any protocol changed the requested lock order in reconfigure. No protocol should do it at all.
2021-11-22Moved BFD IO loop out of BFD as we want to use it as socket-io coroutineMaria Matejka