State of development of the 3.0-alpha1 version
Maria Matejka
maria.matejka at nic.cz
Wed Sep 14 18:45:06 CEST 2022
Hello everybody!
After the holiday period is over, I'm returning to occasional reporting
of v3.0 development. This is NOT AN ANNOUNCEMENT, just a progress report.
If you haven't read my previous reports, my last report is here in the
archives:
http://trubka.network.cz/pipermail/bird-users/2022-July/016222.html
And now let's look at the progress. If you wanna see the commits, look
at the thread-next branch. No liability and no guarantee indeed, please
don't run that code on a production machine.
* There are some backported changes to v2 branches and they'll be
included in the next BIRD version, notably some changes in route
attribute storage. Their performance impact should be negligible and
there should be no changes in visible behavior, yet they'll make future
v2 features more likely to be smoothly merged into v3
* The nexthop resolving, flowspec revalidation and also roa-induced
autoreload procedures are now better fitting into the asynchronous
nature of table change announcements. This will allow easy
implementation of future improvements to reload only the affected
routes. Now we simply reload everything but the path to partial reloads
is open.
* There are still pending performance improvements on attribute storage,
yet they're to be done after BIRD based on thread-next branch is stable
running tables, BGP, RPKI and Pipes in their own threads.
* MRT is still insecure but finally quite high on the list.
* I spent most of the past 3 months on merging v2 branches and
pre-multithreading commits, trying to resolve all the problems. The goal
is now to keep pace with the v2 branch tip and actively resolve merging
conflicts by suggesting and choosing the right strategy of new feature
implementation in v2 branches to be compatible with asynchronicity and
locking.
* With some help of Santiago, I constructed a lockless event queue,
removing one of main problems in 3.0-alpha0 -- locking on event
manipulation. Now it's possible for multiple threads to safely enqueue
into the same queue without locking, and also to enqueue the same event
to the same queue (which is idempotent as it should be). I'll thoroughly
describe this data structure in a future blogpost.
* We also decided to add another locking layer between Table and
Protocol (see my blogpost[1]), called Service. In 3.0-alpha0, the table
auxiliary routines (next hop update, route pruning etc.) were executed
in an IO loop running on Table level; now it's moved to the Service
level, slightly reducing the time when table is locked for maintenance
and also fixing some previous problems.
* The Service layer will also host some MRT and BMP routines. If we
thought more about this formerly, we may have had also BFD on this
layer, yet I think it isn't necessary to move BFD there now.
* For now, I have BIRD in the state when the Pipes and Tables have their
own threads and I'm going to spend like a week or so resetting our
performance testing machinery, producing some data and hoping for good
BIRD stablility.
* After that, I'll continue merging 3.0-alpha0 to thread-next, hoping
that I get to RPKI and BGP threads in a meaningful time. In theory, this
merge should be smooth, supposing that I'll probably revert most of the
commits in 3.0-alpha0, having the issues already solved in thread-next
in a different way.
* I'm also trying to find some time to reset our issue tracker at
gitlab.nic.cz and fill it at least with issues regarding multithreading,
better also filling it with our almost infinite backlog. That should be
a tool not only for the development organization but also for everybody
else who is curious about how BIRD works inside. Let's test it and we'll
see the outcomes.
So here you are with the report. I hope it's complete. Feel free to ask
for clarification. I'd like also to produce some more blogposts,
hopefully during the next week.
Maria
[1]
https://en.blog.nic.cz/2022/02/09/bird-journey-to-threads-chapter-3-parallel-execution-and-message-passing/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2839 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://trubka.network.cz/pipermail/bird-users/attachments/20220914/e7ba195b/attachment.p7s>
More information about the Bird-users
mailing list