Greek to me

Xin Li pointed out a race condition in FreeBSD that exists in DragonFly too. Matt Dillon, on further inspection, found a deeper problem. I’m pasting his description here because he’s speaking another language – I don’t even recognize the acronyms he’s using.

Alan Cox responded with a link to the CMU Mach algorithm on this page as an example of a correct implementation.
Continue reading “Greek to me”

Threading thread

There’s been a slight conversation about threading, where Jeroen Ruigrok van der Werven mentioned he would want hybrid, or M:N threading. Miguel Mendez chimed in that 1:1 threading, while not as spiffy, is easier to implement and Sten Spans posted a link to this PDF describing 1:1 threading in Linux. (I assume – haven’t read it yet) Matt Dillon brought up a larger issue: asynchronous syscall messaging support is needed before any of this thread work can be done.

More mount

Joerg Sonnenberger committed a change to mount that allows you to specify mounting options when doing ‘mount -a. Chris Pressey put it together from FreeBSD code.

Token epiphany

Matt Dillon was answering a question from Bosko Milekic that caused him to have a realization on how to improve token-handling in both single and multiple CPU situations, with apparently significant performance benefits. I’m pasting his post to .kernel here:

“Not entirely. First, please note that the current token implementation does not work very well… it’s a mess to use because cpu #B can steal away cpu #A’s token by sending cpu #A an IPI message requesting the token. This means cpu #A has to be in a critical section to ‘protect’ the token, and must re-acquire the token (in case it was lost) after it blocks.

After thinking about this quite a bit I have come up with a solution that, in a moment of enlightment, would make our tokens operate like self-contained little RCU implementations (superior to Linux’s implementation, in fact!).

I intend to fix our tokens by not allowing an IPI to steal a token until the owning cpu has gone through a thread switch, or by explicit release. This means that, once fixed, our token implementation will allow us to abstract RCU-like operations, which I think is very important. It is not what I originally intended tokens to be but it is turning out to be what they should be.

The nice thing about the revamp I intend to do on the token code is that the RCU abstraction will wind up being a lot better then Linux’s RCU abstraction, because it will be compartmentalized. Only cpus competing for the same token are effected rather then all cpus in the system. We would not have the serialization problem that Linux has.”

Roll call for roles

Hiten Pandya asked that anyone (committers or not) working on a task for DragonFly mail him the following data:

“(1) Name
(2) Owner (name and email address) — can be multiple
(3) Current status (work-in-progress, suspended, done)
(4) Description of the Task (300 chars is good!)
(5) Priority (if any) (If any)”

Send it to with a subject of [TODO ITEM]. Will this show up online? I don’t know.

Beaver Challenge

Wouter Clarie posted about the OSU Beaver Lab Challenge, where the OSU Lab wants to benchmark a number of operating systems (Linux and BSD flavors) against each other, with teams for each operating system to tweak as needed. There’s no DragonFly team at this point, though it may not be useful to ‘compete’ before an inital release.