Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Note on “Reforming Unix” #4

Open
alexshpilkin opened this issue Sep 22, 2024 · 0 comments
Open

Note on “Reforming Unix” #4

alexshpilkin opened this issue Sep 22, 2024 · 0 comments

Comments

@alexshpilkin
Copy link

One approach that can express weaker ordering constraints than fsync() and barriers is Featherstitch, where you more or less specify the partial order directly. Notably, the original paper implements soft updates on top of it. Unfortunately, it looks like avoiding the approximate heuristic used there is a nontrivial graph-theory problem.

I’m itching a bit to think of the partial order as promise pipelining. That is, even (e.g.) write() returns a promise (of a unit type?) that’s broken on error, and all I/O ops also accept such promises so failures propagate automatically. Now all you need to express a partial order is an all() operation that fails if any of its argument promises fail, and otherwise succeeds with the unit value. (The actual E language described on the linked website guarantees fail-stop FIFO semantics for messages sent to a single reference, whereas for I/O we essentially only want the dependency order. I’m not sure how I feel about this.)

Would also be interesting to know if throughput-oriented hardware that speaks command queues (GPUs, NVMe drives) exposes anything more advanced than barriers. I’ve never heard of anything like that, but then I’m not a hardware person.

Finally, the statement that file descriptors are good may require a bit of qualification—opaque unforgeable handles are good, but the wisdom of the dense small-integer namespace is questionable. (I seem to remember it being a bit of a problem for io_uring, even, though I don’t have the link.) The two alternatives are, of course, having the system or the user maintain a sparse one. The former option has the problem that well-known fd numbers in the fashion of stdin/stdout/stderr are no longer possible; the latter has the problem that the first thing a usable ABI needs is to introduce a shared namespace manager, thus essentially turning this option back into one of the others.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant