Interactive map of Linux kernel
makelinux.net
makelinux.net
The Linux kernel has more device drivers embedded in the core than I anticipated. I'm guessing most are used for bootstrapping/fallback (e.g. loading the "actual" drivers)? Such as ext4, ipw2100, ac97, i8042, etc.
Just to be clear, I'd imagine most of the above are common enough to have on almost all but the most niche Linux distributions. My question relates around having them this high up in the source tree, rather than why they're useful/what they do.
https://www.linux.com/blog/interactive-map-linux-kernel (2009)
All drivers are in-tree.
Architecturally integrated into everyone's "this is part of the kernel and not a random printer driver" mental model
It's no surprise they're paying massive technical debt over it. Work that would take a few hours in a well-structured system does take months on Linux.
Isn't surprising either that Dragonfly BSD's outperforming Linux in network throughput, despite its small number of developers.
They went for a components as concurrent lockless system servers approach [1] instead of a complex mess of fine-grained locks like Linux (and FreeBSD, following them) did.
Honestly I never even made it out of the init code. I asked to be taken off the project immediately.
The larger a codebase grows, the less tractable it becomes. Refactorings are harder, more expensive and riskier. Also, more developers means more attack surface for inconsistencies and crappy code of someone unmotivated.
Also Linux TCP stack is lockless since 4.4.
Do you have a citation for this claim?
http://lists.dragonflybsd.org/pipermail/commits/2017-Septemb...
Edit: Just saw your answer https://leaf.dragonflybsd.org/~sephe/perf_cmp.pdf and there linux has a higher latency, but the performance throughput is not that different from dragonflybsd. (in fact at forwarding linux wins). But thx for the numbers will follow up on that later.
Same throughput, better latency, a dragonfly win.
Probably the same reasoning as usual (Linux likes to spend tens of milliseconds non-preemptable every now and again).
This is a pretty meaningless statement. Network throughput on what? Low latency connections? High latency? Jumbo frames? What if you're using DPDK? How about vs. XDP? What is it tuned for?
If you mean that if you just install Dragonfly BSD and some random popular Linux distribution that you might see better performance out of the box on some arbitrary benchmarks, yeah, I can believe it. If you mean that you're going to get better performance in Dragonfly BSD than Linux when it comes to all scenarios with network throughput, this is silly, especially when you can take advantage of things like DPDK, XDP, af_packet v4, etc. If network performance is your biggest concern in 2018, you're caring more about that sort of tech and being on something that supports it than you are about how things perform out of the box.
(Also, Linux has had a lockless TCP stack since 2016)
this map is very useful
Link then goes 404.
> As a noob observing..Many of them seem to have names nothing like what their actual purpose is
Having worked a bit with low level kernel stuff (porting a unix OS to a new platform), I understand his observation. Even after working with the kernel for a while, many names don't really make sense.
Mandatory quote of Phil Karlton:
> There are only two hard things in Computer Science: cache invalidation and naming things.
BH means Buffer Head. The meaning and usage of Buffer Head has changed a lot across Linux versions. It's the basic unit of IO operations, but nowadays most users would use a bio for most of what you would have used a buffer head in the past. When you're working on filesystems you'll have to use BHs to talk to the hard drive though.
Linux FS infrastructure and Ext2 share a lot of names. For instance, ext2 and linux both have superblocks, inodes, blocks, etc. They are... logically the same, but at the same time they're very different - one lives purely on the disk, the other provides functions to the kernel. This makes conversation very complicated, when talking about the superblock, you have to mention which superblock you're talking about, because that's not always obvious from context.
> There are only two hard things in Computer Science: cache invalidation, naming things, and off-by-one errors.
Since simoooo's comment was vouched for by other users, I've moved your reply to be a child of that one.
> There are only two hard things in Computer Science: cache invalidation, off-by-one errors and naming things.
Hacker News paydirt.