Gee, been a long time since I added a diary entry here. Such is life I suppose. My last entry noted that I was starting at BSDi/WC in the following week. Since then things have changed slightly since BSDi's software side was acquired by WindRiver after a somewhat bumpy ride, and today I type this entry while people run around packing up the last of their things in preparation for the move to WRS's Alameda facility tomorrow. Most of the engineering group from the Concord office has already moved, but a few of us held out until tomorrow's move. Personally, I wanted to keep my 2 minute reverse commute for as long as possible.
As far as my work in FreeBSD, it has changed rather dramatically in the past year or so. Last year I was a documentation committer sneaking into the coding side of the tree by way of the x86 bootstrap code and scheduled to work on the ia64 bootstrap. A few weeks after I arrived at Concord, most of the engineering project left for the big SMP meeting to talk about FreeBSD's SMP next generation project to multithread our kernel. I didn't attend the meeting, read the summary e-mail on the list with little interest, and didn't bother to read any of the slides posted.
About three months later, I was stuck working on a relatively boring contract job when Greg Lehey wandered into the BSD coding IRC channel asking for help with some problems he was having getting interrupt threads stable on a UP x86 kernel. Once I finally got the contract job done (somewhat time-crunched due to working on the SMP stuff every once in a while) I turned to the SMPng project full time and ported the new ithreads to SMP x86 and to the alpha. Since then I have been working on the SMPng project full time in various areas of the kernel. Rest assured that I am not doing this alone however (thank goodness). I suppose one's diary can give a false exaggeration of one's own accomplishments relative to other people's. Anyways, several things have changed in the FreeBSD kernel since the SMP project have changed, and several more changes are slated to come. However, there is the "small" roadblock of 5.0 release scheduled for late November. Couple this with the fact that despite all the progress that has been made, the kernel is still about 95+% under the Giant lock, and it seems that 5.0 is scheduled for a performance nightmare. While people seem to accept that 5.0 will suck, they really want 5.1 to not suck quite so badly, and for 5.2 to be both stable and at least as decent performancewise as 4.x. While I can agree that these are reasonable requests from our customers point of view, I am afraid that there is just not enough manpower and time to get there. However, those release dates are still quite a ways off, and we might be able to pull it off yet.
For those curious about the current work on SMPng, I'm presently working on making the kernel fully preemptive. That is, we will preempt to a process in setrunqueue if it is a higher priority process. This is rather different from the standard behavior of the Unix kernel, but this is the direction most (if not all) successful multithreaded Unix kernels have gone. It also greatly simplifies some pieces of code with respect to synchronization primitives and removes several opportunities for programmer error.
As far as non-code work, I'm planning on giving a paper at BSDCon that serves as a tutorial/guide on how to do data locking to help educate the developerbase about the new world order in the FreeBSD kernel. I will also probably use this paper to flesh out the Locking Notes chapter in the FreeBSD Developer's Handbook. Also, I'm planning on giving a talk about the Witness lock order verifier at the Usenix ATC in 2002. I may attempt to port it to userland as a wrapper around pthreads, but I'm not sure about that yet.