The Lava Layer Anti-Pattern
TL:DR Successive, well intentioned, changes to architecture and technology throughout the lifetime of an application can lead to a fragmente...
IPv6 privacy addresses crashed the MIT CSAIL network
A few hours ago, I sent the following “dear colleagues” email (lightly edited to remove some private details) to all my users at work: This has been a very trying week. For those of you…
LibreSSL's PRNG is Unsafe on Linux
The first version of LibreSSL portable, 2.0.0, was released a few days ago (followed soon after by 2.0.1 ). Despite the 2.0.x version numbers, these are only preview releases and shouldn't be used in production yet, but have been released to solicit testing and feedback. After testing and examining the codebase, my…
Debian is switching back to GLIBC
Five years ago Debian and most derivatives switched from the standard GNU C Library (GLIBC) to the Embedded GLIBC (EGLIBC). Debian is now about to...
Will It Optimize? (2010)
See how well you know (or can anticipate) gcc's optimizer. For each question, the left box contains some code, while the right box contains code that purports to do the same thing, but that illustrates a particular optimization. Will gcc apply that optimization? Put another way, will the code on the left be as fast as…
TCP is harder than it looks
It's easy to write a TCP stack that works with most traffic. It's harder to write one that interoperates properly with every strange or buggy device that's out there.
Call me maybe: etcd and Consul
In the previous post, we discovered the potential for data loss in RabbitMQ clusters . In this oft-requested installation of the Jepsen series, we’ll look at etcd : a new contender in the CP coordination service arena. We’ll also discuss Consul ’s findings with Jepsen.
History of Apache Storm and Lessons Learned
Apache Storm recently became a top-level project , marking a huge milestone for the project and fo...
Broken by design: systemd
Recently the topic of systemd has come up quite a bit in various communities in which I'm involved, including the musl IRC channel and on the Busybox mailing list .
Avoiding systemd isn't hard
The former contents of this blog post have been removed.
Low-level is easy
My previous entry has the amazingly interesting title "Blogging is hard". Gee, what a wuss, says the occasional passer-by. Gotta fix my image, fast. Think, think, think! OK, here's what I'm going to tell you: low-level programming is easy. Compared to higher-level programming, that is. I'm serious.
The Performance Cost of Integer Overflow Checking
How much overhead should we expect from enabling integer overflow checks? Using a compiler flag or built-in intrinsics, we should be able to do the check with a conditional branch that branches based on the overflow flag that add and sub set. Code that looks like
Why curl defaults to stdout
(Recap: I founded the curl project, I am still the lead developer and maintainer) When asking curl to get a URL it'll send the output to stdout by default. You can of course easily change this behavior with options or just using your shell's redirect feature, but without any option it'll spew it out to … Continue…
How misaligning data can increase performance 12x by reducing cache misses
Here's the graph of a toy benchmark 1 of page-aligned vs. mis-aligned accesses; it shows a ratio of performance between the two at different working set sizes. If this benchmark seems contrived, it actually comes from a real world example of the disastrous performance implications of using nice power of 2 alignment…
Let's Write Some x86-64
…"‘Our speech interposes itself between apprehension and truth like a dusty pane or warped mirror. The tongue of Eden was like a flawless glass; a light of total understanding streamed through it. Thus Babel was a second Fall.’ And Isaac the Blind, an early Kabbalist, said that, to quote Gershom Scholem’s translation…