0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-12-22 09:41:54 +00:00
Commit Graph

5095 Commits

Author SHA1 Message Date
Maria Matejka
9e88fc5b6b Netindex: allow u32 -> netindex without locking 2024-06-12 09:23:50 +02:00
Maria Matejka
dbe246a4bd Proto: fix reimporter crash on shutdown
Channel transition to CS_STOP forgot to postpone the reimporter event,
thus reimport could theoretically run too late and cause trouble.
2024-06-12 09:23:50 +02:00
Maria Matejka
d78448dd7c BGP: Dropping the netindex experiment, prefix hash is faster 2024-06-12 09:23:50 +02:00
Maria Matejka
7c59ef3faa RCU Unwinder can now retry without yielding 2024-06-12 09:23:50 +02:00
Maria Matejka
4104d668d9 Read-write spinlocks 2024-06-12 09:23:50 +02:00
Maria Matejka
8f4a784e14 Netindex is now net-type specific
Combining all network types in one netindex was just a waste of memory
and too much complexity for no reason.
2024-06-05 17:47:32 +02:00
Maria Matejka
6ffab25f01 IO loop: fixed unassigned count 2024-06-04 22:20:18 +02:00
Maria Matejka
a19d0de42f Table: Freeing routes deferred to save rcu synchronization 2024-06-04 22:20:18 +02:00
Maria Matejka
d617801c31 Route attributes now use the common lockfree usecount
Also route attributes are not freed immediately anymore.
2024-06-04 22:20:18 +02:00
Maria Matejka
98fee17456 Hash: dropped relics of hash iterators 2024-06-04 22:20:18 +02:00
Maria Matejka
b033561045 Route attribute hash replaced with the generic one 2024-06-04 22:20:18 +02:00
Maria Matejka
423eaf3438 Softened warning about too much time spent in loop
Now the warning needs at least 10 ms after the scheduled end time
to ever complain.

TODO: make this configurable
2024-06-04 22:20:18 +02:00
Maria Matejka
5d6c4ff35a BGP: Freeing prefixes deferred to save rcu synchronization 2024-06-04 22:20:18 +02:00
Maria Matejka
d4ea561917 Common parts of the ROA updater moved into the table
Channel is now just subscribing to yet another journal announcing
digested tries from the ROA table.

Creating tries in every channel on-the-fly was too slow to handle
and it ate obnoxious amounts of memory. Instead, the tries are
constructed directly in the table and the channels are notified
with the completed tries.

The delayed export-release mechanism is used to keep the tries allocated
until routes get reloaded.
2024-06-04 10:11:36 +02:00
Maria Matejka
b287c13f21 Task deferrer: kinda more dumb-resistant macro
Originally, this mechanism required to check whether there's enough time to work
and then to send an event. This macro combines all the logic and goes more straightforwardly
to the _end_ of the export processing loop.

One should note that there were two cases where the export processing loop
was deferred at the _beginning_, which led to ignoring some routes on
reimports. This wasn't easily noticeable in the tests until the one-task
limit got a ceiling on 300 ms to keep reasonable latency.
2024-06-04 10:11:36 +02:00
Maria Matejka
2705c385c0 Never allow more than 300 ms per loop 2024-06-04 10:11:36 +02:00
Maria Matejka
7a169e46a8 BGP: export table stores routes, reloads and shows in CLI.
In future, this and rtable's data structures should be probably merged
but it isn't a good idea to do now. The used data structure is similar
to rtable -- an array of pointers to linked lists.

Feed is lockless, as with all tables.

Full export (receiving updates) is not supported yet but we don't have
any method how to use it anyway. Gonna implement it later.
2024-06-04 10:11:36 +02:00
Maria Matejka
f8e3ea9402 BGP: Prefix table uses a pointer array instead of hash 2024-06-04 10:11:36 +02:00
Maria Matejka
dc416d2de3 RCU: Rewritten to be more straightforward 2024-06-04 10:11:36 +02:00
Maria Matejka
7c41d860af Unit test for RCU 2024-06-04 10:11:36 +02:00
Maria Matejka
34acf22fc7 Netindex: consistency checks and deletion of whole hash 2024-06-04 10:11:36 +02:00
Maria Matejka
31d5ffa4a9 If debugging, store a malloc circular log for easier debugging 2024-06-04 10:11:36 +02:00
Maria Matejka
ce1a8be9af Hostentry: made src ea_list atomic to help with consistency 2024-06-04 10:11:36 +02:00
Maria Matejka
a2ddd3d443 Slab: can be deleted as a single object 2024-06-04 10:11:36 +02:00
Maria Matejka
9490ed2bc5 Export: Next feed step-up is now internal
There is no much reason to do anything else than the netindex technique.
2024-06-04 10:11:36 +02:00
Maria Matejka
abcdde1b38 BGP: Simpler hashing in export table
We need a hashing simple enough to allow for feeding by netindex.
2024-06-04 10:11:36 +02:00
Maria Matejka
d01a7c2bda BGP: Export uses common attribute cache
There is no real need for storing bucket attributes locally and we may
save some memory by caching the attributes in one central place.

If this becomes a contention problem, we should reduce the lock load
of the central attribute cache.
2024-06-04 10:11:36 +02:00
Maria Matejka
73afffc464 BGP: pending TX prefixes link netindex instead of copying net_addr
This helps with memory consumption, allows for removal of multiple
slab/mblock ifs and prepares for easier feeds.
2024-06-04 10:11:36 +02:00
Maria Matejka
6f59a414b1 BGP: refactored pending TX back into channel 2024-06-04 10:11:36 +02:00
Maria Matejka
10bb1c1e9d Real almost-lockless feeds and more pull-like exports
Introducing a new omnipotent internal API to just pass route updates
from whatever point wherever we want.

From now on, all the exports should be processed by RT_WALK_EXPORTS
macro, and you can also issue a separate feed-only request to just get a
feed and finish.

The exporters can now also stop and the readers must expect that to
happen and recover. Main tables don't stop, though.
2024-06-04 10:11:36 +02:00
Maria Matejka
ee7afdabc7 BGP: explicitly sending route refresh from CLI 2024-05-29 17:09:50 +02:00
Maria Matejka
e17824f5e5 Protocol filter reload is now done by 'reload filters'
This prepares for the separate 'reload bgp' command triggering BGP Route Refresh
2024-05-29 10:39:01 +02:00
Maria Matejka
492c416c0a Static: Fixed undefined nexthop padding problems 2024-05-25 19:37:26 +02:00
Maria Matejka
03731bf356 Netindex: fixed resolving net by index 2024-05-25 19:37:16 +02:00
Maria Matejka
1d1338c4f5 RIP partial reload never worked properly, running full reload always 2024-05-25 19:37:16 +02:00
Maria Matejka
4581ecd8de Dropping obsolete protocol Perf
We have now better methods how to measure overall performance
and this obsolete protocol has basically rotten away. If anybody
needs its features, feel free to revive it in future.
2024-05-25 19:37:16 +02:00
Maria Matejka
030044b2f6 OSPF partial reload never worked properly, running full reload always 2024-05-25 19:37:16 +02:00
Maria Matejka
b5f803ce4a Simplified temporary resources
Also TMP_SAVED now uses the CLEANUP hook to allow for breaks and returns
2024-05-25 19:37:16 +02:00
Maria Matejka
76ca53e4f8 SKIP_BACK_DECLARE: easier embedded-to-parent typecasting 2024-05-25 19:37:16 +02:00
Maria Matejka
f6ad42777d Lockless feed of a single net 2024-05-25 19:37:16 +02:00
Maria Matejka
091130e84b Using ea_lookup_tmp() for temporarily keeping attribute references
To avoid needs for keeping local temporary references for attributes,
now one can use ea_lookup_tmp() to ensure that the attributes are
valid and stored until the task ends. After that, the attributes are
automatically unref'd and also deallocated if needed.
2024-05-25 19:37:16 +02:00
Maria Matejka
29cd2c0170 Refactored the deferring framework into a separate structure 2024-05-22 11:34:34 +02:00
Maria Matejka
2b38a833cd Avoiding RCU synchronization deadlock when locking in critical section
Explicitly marking domains eligible for RCU synchronization. It's then
forbidden to lock these domains in RCU critical section to avoid
possible deadlock.
2024-05-22 11:34:34 +02:00
Maria Matejka
6fb467a54c RCU Unwinder refactored from route table to a separate structure 2024-05-22 11:34:34 +02:00
Maria Matejka
eaf187b57b Table feeds are now lockless
This commit makes the route chains in the tables atomic. This allows not
only standard exports but also feeds and bulk exports to be processed
without ever locking the table.

Design note: the overall data structures are quite brittle. We're using
RCU read-locks to keep track about readers, and we're indicating ongoing
work on the data structures by prepending a REF_OBSOLETE sentinel node
to make every reader go waiting.

All the operations are intended to stay inside nest/rt-table.c and it
may be even best to further refactor the code to hide the routing table
internal structure inside there. Nobody shall definitely write any
routines manipulating live routes in tables from outside.
2024-05-22 11:34:34 +02:00
Maria Matejka
be902fc55c Fixed flush condition when stale cycle valid/set indicators wrap around 2024-05-22 11:34:34 +02:00
Maria Matejka
a716e7ea79 Kernel: replaced synchronous prune by a refeed 2024-05-22 11:34:34 +02:00
Maria Matejka
182a97f5e6 Lockless hostentry resolution
Now the hostentry doesn't need to lock table, instead it tracks the
hostentry version and retries if the hostentry changed while updating.
2024-05-22 11:34:34 +02:00
Maria Matejka
83a409abd2 Cached route attributes now have explicitly marked layers
Also the rta_* functions renamed to ea_* functions
2024-05-22 11:34:34 +02:00
Maria Matejka
77659b1994 Netindex: Dropping tmp handle mechanism in favor of deferred lfuc_unlock 2024-05-22 11:34:34 +02:00