July 3, 2018

I was lucky enough to obtain a grant from the FreeBSD Foundation to attend BSDCan 2018  in Ottawa, Canada.  Various employers have sponsored my trips to previous BSDCan conferences over the past five years, but since that was not possible this year, I am grateful to the Foundation for allowing me to continue my attendance streak. 

BSDCan is a highlight of my summers: the ability to have face-to-face conversations with fellow developers and contributors is invaluable and always helps refresh my enthusiasm for FreeBSD.  While in a perfect world we would all be able to communicate effectively over the Internet, it’s often noted that locking a group of developers together in a room can be a very efficient way to make progress on projects that otherwise get strung out over time, and to me this is one of the principal functions of BSD conferences.  In my case I was able to fix some kgdb bugs that had been hindering me for months; get some opinions on the design of a feature I’ve been working on for FreeBSD 12.0; hear about some ongoing usage of code that I’ve worked on; and do some pair-debugging of an issue that has been affecting another developer.

As is tradition, on Tuesday night I dropped off my things at the university residence where I was staying, and headed straight to the Royal Oak.  This year it didn’t seem quite as packed with BSD developers, but I did meet several long-time colleagues and get a chance to catch up.  In particular, I chatted with Justin Hibbits and got to hear about the bring-up of FreeBSD on POWER9, a new CPU family released by IBM.  Justin was able to acquire a workstation based upon this CPU, which is a great motivator for getting FreeBSD into shape on that platform.  POWER9 also has some promise in the server market, so it’s important for FreeBSD to be a viable OS choice there.

Wednesday morning saw the beginning of the two-day FreeBSD developer summit, which precedes the conference proper.  Gordon Tetlow led the summit and did an excellent job organizing things and keeping to the schedule.  The first presentation was by Deb Goodkin of the FreeBSD Foundation, who gave an overview of the Foundation’s role and activities. While I’m already pretty familiar with the Foundation, it’s always interesting to hear about new initiatives undertaken by the project. Deb also took the step of using a FreeBSD virtual machine to deliver the presentation, admitting that she had always used Windows for that purpose in the past.  While it was yet another sign of how developer-centric FreeBSD is that this was noteworthy, it was nonetheless encouraging to see a non-developer come to grips with our OS.  (And of course, the presentation went without a hitch!)  After Deb’s presentation, present members of the FreeBSD core team discussed the work they had done over the past two years, as well as open tasks that would be handed over to the new core team upon completion of the ongoing election.  Finally, Marius Strobl rounded off the day’s presentations by discussing the state and responsibilities of FreeBSD’s release engineering team. 

One side discussion of interest to me was around the notion of tightening integration with our Bugzilla instance; at moment we do not have any good means to mark a given bug as blocking a release, making it easy for bugs to slip into releases and thus lowering our overall quality.  With FreeBSD 12.0 upon us, I plan to help with the triage and fixes for known regressions before the release process begins.  In the evening I hung out with a few developers in the hacker lounge and tried to work out why kgdb (a modified version of GDB which can debug the FreeBSD kernel) was failing when I tried to debug a certain crash dump.  Fortunately, John Baldwin, the kgdb maintainer, was around and together we identified a pair of bugs.  Embarrassingly, one of my problems was the result of user error, but fixes for the other problem have been committed to the kgdb sources.

On Thursday, the presentations at the developer summit continued.  In his role as the current FreeBSD security officer, Gordon gave an update on FreeBSD’s security team, known as secteam.  He described several initiatives taking place which will help improve secteam’s responsiveness to reports of vulnerabilities.

After a break, the rest of the morning was devoted to plans for features in upcoming FreeBSD releases.  This is one of my favorite discussion topics and typically takes the form of have/need/want, where developers collectively list features that they’ve developed and intend to upstream (have), features that they are missing (need), and nice-to-have features (want).  This year, instead of the usual format, we listed features that are intended to ship in FreeBSD 12.0.  The compiled list ended up being quite ambitious given how close we are to the beginning of the release cycle, but many individual developers (including myself) have signed up to deliver work.  I’m hopeful that most, if not all of it, will make it into the release.  After lunch, I attended a discussion led by Matt Ahrens and Alexander Motin on OpenZFS.  Of particular interest to me were some observations made regarding the relative quantity and quality of contributions made by different “camps” of OpenZFS users (illumos, FreeBSD and ZoL), and their respective track records of upstreaming enhancements to the OpenZFS project. In part due to the high pace of changes in ZoL, the definition of “upstream” for ZFS has become murky, and of late ZFS changes have been ported directly from ZoL.  Alexander discussed some known problems with ZFS on FreeBSD that have been discovered through performance testing.  While I’m not familiar with ZFS internals, Alexander noted that ZFS’ write path has poor SMP scalability on FreeBSD owing to some limitations in a certain kernel API called taskqueue(9).  I would like to explore this problem further and perhaps integrate a relatively new alternative interface which should perform better.  In the evening I was back in the hacker lounge, where Ryan Libby and I worked together on debugging a kernel assertion failure which was discovered in the POWER9 bring-up work. The issue is somewhat subtle and was revealed by the POWER architecture’s aggressive re-ordering of memory operations.  While the bug has not been fixed at the time of writing, I expect that it will be resolved shortly.

Friday and Saturday were, of course, taken up by BSDCan talks.  Friday’s keynote was by Benno Rice, who provided some history of UNIX boot systems as a precursor to some discussion of systemd and the difficulties presented by a user and developer community that actively resist change.  The rest of the morning was consumed by talks and passed by quickly. First was Colin Percival’s detailed examination of where the FreeBSD kernel spends time during boot, together with an overview of some infrastructure he added to track boot times. He also provided a list of improvements that have been made since he started taking measurements, and some areas we can further improve.  Colin’s existing work in this area has already brought about substantial reductions in boot time; amusingly, one of the remaining large delays comes from the keyboard driver, which contains a workaround for old PS/2 keyboards.  While there seems to be general agreement that the workaround is probably no longer needed on most systems, the lingering uncertainty around this prevents us from removing the workaround.  This is, sadly, a fairly typical example of an OS maintenance burden, and underscores the need to carefully document hardware bug workarounds.  After this talk, I got to see some rather novel demonstrations of system tracing using dwatch, a new utility by Devin Teske, which aims to provide a user-friendly interface to DTrace.  After lunch, I attended talks on netdump, a protocol for transmitting kernel dumps over a network after the system has panicked, and on a VPC implementation for FreeBSD.  After the talks ended, I headed yet again to the hacker lounge and had some fruitful discussions on early microcode loading (one of my features for FreeBSD 12.0). These led me to reconsider some aspects of my approach and saved me a lot of time.  Finally, I continued my debugging session from Wednesday with help from a couple of other developers. 

Saturday’s talks included a very thorough account by Li-Wen Hsu of his work in organizing a BSD conference in Taipei last year.  As one of the attendees, I had felt that the conference had gone quite smoothly and was taken aback by the number of details and pitfalls that Li-Wen enumerated during his talk. This was followed by an excellent talk by Baptiste Daroussin on the difficulties one encounters when deploying FreeBSD in new environments. Baptiste offered criticisms of a number of aspects of FreeBSD, some of which hit close to home as they involved portions of the system that I’ve worked on.

At the conclusion of the talks, we all gathered in the main lecture hall, where Dan led a traditional and quite lively auction for charity.  I managed to snag a Pine64 board and will be getting FreeBSD installed on it the first chance I get.  At the end of the auction, we all headed to ByWard for dinner, concluding yet another BSDCan.

-Contributed by Mark Johnston