Top all-time · #2692
Unixism
Personal blog · unixism.net · on HN as shusssystemsprogramming
Unixism is a personal blog at unixism.net about systems and programming. Since 2019, 28 different Hacker News readers have linked it 49 times, most often “Lord of the io_uring: io_uring tutorial, examples and reference”. It is still writing: the last post was on 2026-10-15, and you can follow it by feed.
Too few sampled comments (16) to say how often HN recommends it.?
Why HN links it
HN readers link Unixism for its io_uring tutorials ('Lord of the io_uring') and articles on building small servers and high-performance Linux I/O.
Summarised by Claude from a sample of 16 HN comments that link here. Each comment is marked recommending, critical or neutral (citing without judging); how this works.
Of consoles and blinking cursors
Most-linked posts?
- Lord of the io_uring: io_uring tutorial, examples and reference6 people · 6 mentions · first linked 2020-05-10
- Show HN: ZeroHTTPd: A web server to teach Linux performance, with benchmarks5 people · 6 mentions · first linked 2019-05-30
- /loti/tutorial/sq_poll.html3 people · 4 mentions · first linked 2020-05-10
- Lord of the Io_uring (2020)3 people · 3 mentions · first linked 2022-05-18
- Io_uring By Example: cat, cp and a web server with io_uring2 people · 3 mentions · first linked 2020-04-05
- What kind of traffic does Hacker News generate? See my Google Analytics data2 people · 3 mentions · first linked 2020-05-17
- How AWS Firecracker works: A deep dive (2019)2 people · 2 mentions · first linked 2019-10-15
- What Is Io_uring?2 people · 2 mentions · first linked 2020-10-20
What Hacker News says?
I only read about io_uring without yet having a chance of actually using it so take this with a grain of salt: I read that io_uring has two modes, one where you signal via a system call and another that uses memory mapped polling. https://unixism.net/loti/tutorial/sq_poll.html states: > Reducing the number of system calls is a major aim for io_uring. To this end, io_uring lets you submit I/O requests without you hav…
Comment linking /loti/tutorial/sq_poll.html
on “How io_uring and eBPF Will Revolutionize Programming in Linux”Submitted Show HN: ZeroHTTPd: A web server to teach Linux performance, with benchmarks as a story · 472 points
HN discussionFor anyone wanting to learn more about how to create a small server with io_uring: https://unixism.net/2020/04/io-uring-by-example-article-seri...
Comment linking /2020/04/io-uring-by-example-article-series/
on “Io_uring, kTLS and Rust for zero syscall HTTPS server”Submitted Lord of the io_uring: io_uring tutorial, examples and reference as a story · 267 points
HN discussion> Speed is the only reason CGI doesn't fly. It is indeed very very slow; mostly because it is not possible to pre-fork your CGI scripts (environment variables get set from the request, so each cgi program will have different values in the environment). But, if you could pass HTTP data via some way other than environment variables, you could pre-fork the binaries and have acceptable speed[1]. [1] Pre-forking makes a…
Comment linking /2019/04/linux-applications-performance-introduction/
on “Cloudflare Pages: Best server tech since CGI-bin?”Submitted A Manager’s Guide to Kubernetes Adoption as a story · 205 points
HN discussionAck! I was just about to write a blog post on this idea! Good minds think alike, I guess. But as a sibling comment says, this is essentially what io_uring is. Read Lord of the io_uring [1] if you want to know more. Polling mode is the key. [1]: https://unixism.net/loti/index.html
Comment linking /loti/index.html
on “Fusion – A hobby OS implemented in Nim”Submitted Gocker: Docker implemented in 1.3k lines of Go as a story · 186 points
HN discussionThis is such a great point. Never thought how async I/O could be a problem this way. In the SQ polling example, I used BPF to "prove" that the process does not make system calls: https://unixism.net/loti/tutorial/sq_poll.html Could be a good idea to use BPF to expose what io_uring is doing. Just a wild thought.
Comment linking /loti/tutorial/sq_poll.html
on “Lord of the io_uring: io_uring tutorial, examples and reference”Submitted Io_uring By Example: cat, cp and a web server with io_uring as a story · 185 points
HN discussionThe raw io_uring interface, once you ignore the boilerplate initialization code, is actually a super-simple interface to use. liburing is itself only a very thin wrapper on top of io_uring. I feel that if you ever used io_uring, after a while you'll end up with a bunch of convenience functions. liburing looks more like a collection of those functions to me today. One place where a slightly high-level interface is pr…
Comment linking /loti/tutorial/sq_poll.html
on “Lord of the io_uring: io_uring tutorial, examples and reference”Submitted Lord of the Io_uring (2020) as a story · 173 points
HN discussionepoll might not be, but poll is (depending on how one would interpret 'classic'). Anyhow, I wrongly assumed the difference mattered in respect of whether one could use io_uring in combination with epoll(). It turns out, one can [1] or [2]. [1] https://stackoverflow.com/questions/70132802/waiting-for-epo... [2] https://unixism.net/loti/tutorial/register_eventfd.html
Comment linking /loti/tutorial/register_eventfd.html
on “Linux: What Can You Epoll?”Submitted Linux Pressure Stall Information (PSI) by Example as a story · 132 points
HN discussion> Interesting CGI content linked on there. > >I've been reading about / hacking on CGI recently, and it's been kinda fun! > >Question: One thing I keep reading is how inefficient it is to start a new process for each incoming connection. Could someone explain to me why that's such a bottleneck? I imagine it being an issue back when CGI was used everywhere, people moving away from CGI, and forgetting about it. But ha…
Comment linking /2019/04/linux-applications-performance-part-vii-epoll-servers/
on “BCHS: OpenBSD, C, httpd and SQLite web stack”Submitted Show HN: Sparkler – A KVM-Based Virtual Machine Manager as a story · 108 points
HN discussionI've been super curious to see what was at stake here! This sounds better than I'd dared to hope for. I kind of thought this was just gonna be some kind of deferred texture loading thing, help with streaming assets. If it actually allows inter-warp sequencing, it sounds like it might possibly solve the chief complains supreme GUI master Raph Levien recently had in I want a good parallel computer , which so that even…
Comment linking /loti/tutorial/link_liburing.html
on “RDNA 4's “Out-of-Order” Memory Accesses”Submitted Lord of the Io_uring (2020) as a story · 44 points
HN discussionGood article. However, it would be interesting to compare these two things against better system calls. > the data referred to by these pointers must be copied into the kernel Modern OS kernels avoid that when they can. The article is about Linux, modern ones have io_uring: https://unixism.net/loti/what_is_io_uring.html In short, that thing allows to setup these pointers in advance, and make the memory visible to bo…
Comment linking /loti/what_is_io_uring.html
on “Why mmap is faster than system calls (2019)”Submitted Linux Applications Performance: Introduction (2019) as a story · 37 points
HN discussionDepends on your usage patterns. On 8GB I gave it (ZRAM) between 512MB to 768MB RAM, and later on just using whatever values for the relevant sysctls AntiX was using(or their scripts created dynamically during setup/startup) at the time. It isn't just vm.swappiness , there are others, and they changed, or got removed, and replaced by others, over the years. And all of them sort of interwoven , influencing each other…
Comment linking /2019/08/linux-pressure-stall-information-psi-by-example
on “Firefox-patch-bin, librewolf-fix-bin AUR packages contain malware”Submitted How AWS Firecracker works: A deep dive (2019) as a story · 12 points
HN discussionhttps://unixism.net/loti/
Comment linking /loti/
on “How to handle people dismissing io_uring as insecure? (2024)”Submitted A Manager’s Guide to Kubernetes Adoption as a story · 9 points
HN discussion> That's not all, though, right? Unless you're using the dubious kernel-driven polling thread, which I gather is uncommon, you _also_ have to make a submit system call of some kind after you've finished appending stuff to your submit queue. Otherwise, how would the kernel know you'd done it? Correct, the "check for new entries" system call is called io_uring_enter() . (0) > Some system calls are not especially async…
Comment linking /loti/ref-iouring/io_uring_enter.html
on “What Is Io_uring?”Submitted Showdown of 7 network server architectures (iterative to epoll) on Linux as a story · 8 points
HN discussion> The security credentials of an io_uring are established at creation time. Well, the security credentials of a file descriptor are established at ```open()``` time. Is this really so different? Running through the list of io_uring opcodes, only two of them work on ```char*``` paths: IORING_OP_OPENAT and IORING_OP_OPENAT2, which were added to io_uring after it was introduced. All the rest operate solely upon already…
Comment linking /loti/ref-iouring/io_uring_enter.html
on “Tokio-Uring Design Proposal”Submitted Io_uring by Example as a story · 5 points
HN discussionWith image-rich content, 5mbps will be visibly sluggish with only one visitor and even a few people you know poking it at the same time well have a bad experience. Judging by https://unixism.net/2020/05/what-kind-of-traffic-does-hacker... and https://news.ycombinator.com/item?id=30481230 , surviving a couple loads per second up to 25 will get you through many slashdottings, and with a solid symmetrical home connecti…
Comment linking /2020/05/what-kind-of-traffic-does-hacker-news-generate/
on “I discovered caching CDNs were throttling my everyday browsing”Submitted Io_uring by Example as a story · 4 points
HN discussion