Contributed by Paul 'WEiRD' de Weerd on from the route me up before you go-go dept.
Travelling to the hackathon was a bit of an adventure this year. The software troubles with the 737 MAX caused frequent scheduling changes. At Montreal airport I ran into tb@ and naddy@ but all of us were on different airplanes to Ottawa. When I finally arrived a different crew of people were waiting for me and my luggage. It is pretty clear that this is a general hackathon if you run into developers everywhere along the way. The last todo item after a long travel day was beer and food at the local pub where all the others were.
My plan for this hackathon was to look into two things. First of all bgpd(8), thanks to funding by RIPE NCC and various European Internet exchange points I'm able to work full time on bgpd. After releasing the portable OpenBGPD version I changed my focus back on performance and started to profile bgpd. One thing that I found was that the deletion of communities was inefficient and it looked like one third of the run time was spent just doing that. So I started of rewriting and refactoring everything around communities. The main goal was to make insertions and deletions done by the filters much faster. My plan was to move the community attributes from the optional aspath attributes and into their own data structure. This allows to bypass the attribute data store which was not designed to have frequent modifications.
The other thing I planned to spend some time on was clang on sparc64. With the help of kettenis@ we got clang to build and work, also the kernel built with clang worked after fixing another bug in clang but what about the rest? It was time to look into regress tests and look for clang specific failures. It turns out that doing comparisons is rather easy when setting REGRESS_LOG while running the regress tests. The output file logs the state of each regress test and so it should be possible to run it on a gcc system and on a clang system and compare the two files. This was a nice background task to run. Before getting to that there was the lacking support of sysupgrade and bsd.upgrade on sparc64. Hacking bootloader code can not be that hard, can it? Looking at the change made by florian@ to the generic bootloader I applied the same idea to the sparc64 bootloader and voila it worked. That was easier than expected :)
So it was time to upgrade the two sparc64 systems at home and run make regress. After a few runs it became clear that there are two new failures in libm but at the same time some other test failures disappeared. The libm failures are in the long double functions lgammal(3) and lroundl(3). Guess something is not quite right with 128bit floating point support.
In the mean time a commit by beck@ to the buffer cache reminded me of the problem people including myself encountered lately. The network stack runs out of memory and even though it should the buffer cache did not back off. After a chat with Bob looking at the pagedaemon which should be responsible for this it became obvious that on non waiting memory allocation (M_DONTWAIT for mbufs) the pagedaemon failed to do its job. kettenis@ joined the club and lucky me they figured out a way to correctly signal the pagedaemon. This is one of the great things about hackathons you bring up an issue and a few hours later people have a fix for you to test.
Back at the bgpd table I got benno@ to look at, test and OK some of my outstanding bgpd diffs. Also the work on the community rewrite made progress. By the end of the hackathon the rewrite was done and the results look promising. Filtering no longer take a third of the run time. The functions moved down in the call graph and the system feels a lot snappier. While doing that I found the next problem zone to look into -- nexthop_update() and the long list traversal at the end calling prefix_updateall().
While not hacking there were many great discussion over food and beer about various topics including the next steps of unlocking the kernel with mpi@, talking about bfd with phessler@ and having a good time. Thanks to the organizers and the OpenBSD foundation to make this possible.
Thank you Claudio for your report!
(Comments are closed)