Topics /
Systems & Performance
The most popular blog posts about systems & performance on Hacker News. 4,389 posts.
Optimization story: Switching from GMP to gcc's __int128 reduced run time by 95%
A flash of intuition while trying to find a way to lend brian d foy a hand in his search for excellent numbers helped me reduce run time by 95 percent.
Columnar Storage Is Normalization
Something I didn't understand for a while is that the process of turning row-oriented data into column-oriented data isn't a totally bespoke, foreign concept...
Measuring Latency in Linux (2014)
How to accurately measure latency on Linux
TLA+ Modeling Tips
Model minimalistically Start from a tiny core, and always keep a working model as you extend. Your default should be omission. Add a compone...
Way too many ways to wait on a child process with a timeout
I often need to launch a program in the terminal in a retry loop. Maybe because it's flaky, or because it tries to contact a remote service that is not available. A few scenarios:
Tips for installing Windows 98 in QEMU/UTM
Windows 98 runs surprisingly well in QEMU via UTM SE, but it requires some care in setting it up. It’s a great way to run old 90s Windows and DOS software on your iPad (and Mac too, though you have… Continue reading →
AMD Based FreeBSD Desktop Reloaded
My previous AMD Based FreeBSD Desktop is still up and running – it will now be my kids computer … so I needed a new one … but not a bigger one :) I spent way too much time finding…
Linux Internals: How /proc/self/mem writes to unwritable memory (2021)
Introduction An obscure quirk of the /proc/*/mem pseudofile is its “punch through” semantics. Writes performed through this file will succeed even if the destination virtual memory is marked unwritable. In fact, this behavior is intentional and actively used by projects such as the Julia JIT compiler and rr debugger…
High-performance, exactly-once, failure-oblivious distributed programming (2018)
This is one post in a series about programming models and languages for distributed computing that I’m writing as part of my history of distributed programming techniques.Relevant ReadingTrill: A h...
RISC-V is getting MSIs
Message signaled interrupts or MSIs describe a way to signal an interrupt without a dedicated interrupt request pin (IRQ). One of the most prevalent uses for MSIs is the PCI bus, and the PCI specification defines the MSI and MSI-X standards. The potential benefits may include: (1) reduced number of direct wires from…
Zigzag Decoding with AVX-512
I’ve been working on speeding up AVX-512 vertex decoding in meshoptimizer recently; in the process I stumbled upon two optimizations that I did not end up using but I thought they might be fun to write about! The optimizations that actually made it in require some higher level background / explanations that will have…
Scamp – a homebrew 16-bit CPU
I have reached a good milestone on the SCAMP hardware: it can now execute code! It runs all the way through the test program correctly.
AI errno(2) values
errno(2) values for the AI age
Linux Toolbox
Your Linux Toolbox: a box set of my free zines
Hypervisor in 1k Lines
Write your first hypervisor from scratch, in 1K LoC.
Stream VByte: breaking new speed records for integer compression
In many information systems, we work with arrays of integers. For example, maybe you need to keep track of which records in a database contain a given value. This sort of mapping can be expressed as an array of integers. These arrays can end up taking up a large fraction of your memory or disk … Continue reading…
LLVM Internals: The Bitcode Format
I’ve done a couple of posts on LLVM itself, mostly on things you can do with LLVM or how LLVM represents particular program features.
MacOS Extensions Pack for the Apple Network Server v1.0
By now regular readers of this blog are quite familiar with my affection for the 1996 Apple Network Server , Apple's Unix-through-and-thro...
Fork() without exec() is dangerous in large programs (2016)
The UNIX fork() system call seems like an elegant way to process tasks in parallel. It creates a copy of the current process, allowing tasks to read the same memory, without needing fine-grained synchronization. Unfortunately, you need to use it extremely carefully in large programs because fork in a multi-threaded…
Why Not ZFS (2021)
ZFS is a hybrid filesystem and volume manager system that is quite popular recently but has some important and unexpected problems.
This isn’t the way to speed up Rust compile times
Xe Iaso's personal website.
Why did Apple's Copland fail when so many 90s OS succeed, dominate world today
(Adapted from a Quora answer .) OS/2 1.x was a clean-sweep, largely legacy-free OS with only limited backwards compatibility with DOS. OS/2 2.x and later used VMs to do the hard stuff of DOS emulation, because they ran on a chip with hardware-assisted DOS VMs: the 80386s Virtual86 mode.…
Feasibility of low-level GPU access on the Web
This is a follow up to Defining the Web platform post from a year ago. It doesn’t try to answer questions but instead attempts to figure out what are the rig...
XMODEM in 2022
Let's start at the beginning: it all started with me trying to boot a system which receives its initial ramdisk over XMODEM.
On the future of free long term support for Linux distributions
You're probably reading this page because you've attempted to access some part of my blog (Wandering Thoughts) or CSpace , the wiki thing it's part of. Unfortunately you're using a browser version that my anti-crawler precautions consider suspicious, most often because it's too old (most often this applies to versions…
Transcoding Latin 1 strings to UTF-8 strings at 12 GB/s using AVX-512
Though most strings online today follow the Unicode standard (e.g., using UTF-8), the Latin 1 standard is still in widespread inside some systems (such as browsers) as JavaScript strings are often stored as either Latin 1, UTF-8 or UTF-16 internally. Latin 1 captures the first 256 characters from the Unicode standard…