Yes.
HN user
DblPlusUngood
In some cases, yes (if there are other runnable threads on this CPU's queue).
A better example: a page fault for a non-present page.
Don't forget gltron!
You are absolutely right. They are used everywhere in the Linux, OpenBSD, and FreeBSD kernels, and likely many other kernels.
Replacing large linked lists with arrays is rarely an actual win. With an array, insertion and deletion become far more expensive, virtual memory is more likely to become fragmented or grow monotonically, and the cache misses avoided are almost certainly irrelevant to total performance.
I don't see how it could. Kernel data structures don't go on pagecache pages.
Kernel data structures could end up on a pagecache page: all it takes is a reference counting bug and the page could be reallocated in the kernel heap, which is directly mapped by user space. Keeping user-mapped pages and pagecache pages distinct makes this less likely.
I am otherwise not convinced that there is an actual problem with OpenBSD's coherency plan.
OpenBSD's choice is arguably reasonable, given their prioritization of security, since it reduces opportunities for user programs to corrupt kernel memory.
What is the problem with OpenBSD's plan for coherency? Why is the burden of explicitly calling msync(2) too much?
What coherence is lacking? OpenBSD supports msync(2), which is the only POSIX mechanism I know of for ensuring coherency between read(2) and shared file mappings. Otherwise relying on unspecified behavior sounds dangerous.
OpenSSH does have confirmation: use the '-c' switch to ssh-add.
Is recovery of a shared memory queue after one of the workers crashes even possible, in general? (what if the worker crashed before releasing a lock?)
Sounds like a fun project!
Isn't seL4's multicore support either unverified or limited (i.e. shared memory is forbidden)? Is your platform single-threaded then?
Yes. In theory, maybe it's useful to have more flexibility to trade-off durability for performance (smaller quorum size hopefully reduces deciding latency [unless your small quorum contains the straggler!]) for specific kinds of data in the same replica group.
In practice though, it seems easier just to run separate instances of Paxos.
Instead of an ad hominem, please clearly explain the main way that the example Go code is less safe than the C example code.
This is a great point. Jargon can be really intimidating and make the simplest statements impossible to understand for the unfamiliar. But is often trivial to learn with a little study.
A particularly tricky task with GNU make is automatically adding target dependencies on header files and handling updates to them (gcc's -M and -MMD switches). It would be great if the article explained those best practices, too.
How are GCs not compatible with bounded memory use? Though many GCs size allocation arenas proportionally to the live data, there is no fundamental reason why the allocation arenas couldn't be fixed-size (of course, they must be large enough for good performance, etc.).
Well, for one thing, zig apparently has no built-in memory allocator?
Turns out the x86 already has some bounds checking support; see chapter 17 in volume 1 of Intel's developer manuals and the BOUND and BND* instructions.
I love the BSDs and especially OpenBSD for their attention to manpages. It's the main reason why I don't use Linux anymore unless I have to.
I completely agree. The difference in the quality of manpages between OpenBSD and Linux alone is enough for me to prefer OpenBSD.
1. I wouldn't say we are skeptical of Rust, I'm sure it could be made to work well and we would love to see such a Rust kernel! I do wonder whether it would be harder to implement highly-concurrent data structures in Rust though, such as the directory cache.
2. GC performance would be basically unaffected by paging, since kernels don't page their own heaps out to disk and thus a kernel heap access would never have to wait for a disk IO. Or maybe you had something else in mind?
Hah, I am Cody and I'm not related to Dave Cutler (as far as I know!).
Concerning your first question, that experiment is not intended to measure the cost of GC, which can be made small by trading memory. The point of this experiment is to measure the unavoidable costs of the language.
Well that was fast! I'm an author of this paper and would be happy to answer questions.
Different Linux kernel config options, probably. Different options can drastically affect performance.
That's correct. The primary performance benefit of generational GC (in terms of throughput and maybe also latency) is that it can reclaim the memory (backing the young generation) without marking or otherwise processing the vast majority of the live data (contained in the old generation).
No, the size of the array doesn't need to be a power-of-2 if you use modulus to derive indices. But you need to deal with the overflow somehow. For instance:
0xffffffff % 7 = 3, but (0xffffffff + 1) % 7 = 0.
I guess the browser calls system(3) on the arbitrary URI instead of directly exec'ing /usr/bin/nnrurlshow? How amusing.
You are addressing criticisms of Stalin with a logical fallacy called "whataboutism".
I don't understand you.
Is your answer to my question: "Modern UNIX OSes cannot take advantage of said ideas because they are POSIX compatible."?
"...while lots of different, great ideas about computing and networks have been developed in the last 30 years."
What we really need are OSes that take the ideas from human-computer interaction from Xerox PARC and Viewpoints Research Institute and take them further into mainstream, using safe languages in the process.
How are modern OSes prevented from using said ideas (which ideas exactly?) simply because they are a UNIX implementation?