KVM host in a few lines of code
Trying to figure out how KVM-based virtual machine hosts work by implementing one from scratch.
Achieving 100Gbps intrusion prevention on a single server
Achieving 100 Gbps intrusion prevention on a single server, Zhao et al., OSDI’20 Papers-we-love is hosting a mini-event this Wednesday (18th) where I’ll be leading a panel discussion including one …
Building a WireGuard jail with FreeBSD's standard tools
Recently, I had an opportunity to build a WireGuard jail on a FreeBSD 12.1 host. As it was really quick and easy to setup and it has been working completely fine for a month, I’d like to share my experience with anyone interested in this topic. I would like to use WireGuard app on my Android phone to access my home…
ARM Mac: Why I'm Worried About Virtualization
It's late 2020 and you just got a brand-new Mac with Apple's own ARM processors. Exciting! But what will development be like?
Untangling microservices, or balancing complexity in distributed systems
The microservices honeymoon period is over. Uber is refactoring thousands of microservices into a more manageable solution [1]; Kelsey Hightower is predicting monoliths are the future [2]; and even Sam Newman is declaring that microservices should never be the default choice, but rather a last resort [3]. What’s going…
Initial Impressions of WSL 2
Soon the Windows May 2020 Update (20H1) will be released upon the world. This update will contain some nice UI improvements, but most relevant to me it allows Web Developers on Windows to upgrade to WSL 2. This is a significant milestone in the #davegoeswindows saga and it’s worth posting about what it means going…
The Cost of JavaScript Frameworks
Tim Kadlec writes about performance, product management, and the web.
Why does musl make my Rust code so slow?
Software engineer specializing in query engines and distributed systems
Reflections on Software Performance
At this point in my career, I’ve worked on at least three projects where performance was a defining characteristic: Livegrep, Taktician, and Sorbet (I discussed sorbet in particular last time, and livegrep in an earlier post). I’ve also done a lot of other performance work on the tools I use, some of which ended up on…
Notes on Paxos
These are my notes after learning the Paxos algorithm. The primary goal here is to sharpen my own understanding of the algorithm, but maybe someone will find this explanation of Paxos useful! This post assumes fluency with mathematical notation.
In Praise of ZFS on Linux's ZED 'ZFS Event Daemon'
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…
An Introduction to Lock-Free Programming (2012)
Lock-free programming is a challenge, not just because of the complexity of the task itself, but because of how difficult it can be to penetrate the subject in the first place. I …
Which is better on Android: divide by 2 or shift by 1?
I've been porting the AndroidX collection library to Kotlin multiplatform to experiment with binary compatibility, performance, tooling, and the different memory models. Some of the data structures in the library use array-based binary trees to store elements. The Java code has a lot of shifts to replace power-of-two…
A Concurrency Cost Hierarchy
Concurrent operations can be grouped relatively neatly into categories based on their cost
Zip Files: History, Explanation and Implementation
I have been curious about data compression and the Zip file format in particular for a long time. At some point I decided to address that by learning how it works and writing my own Zip program. The implementation turned into an exciting programming exercise; there is great pleasure to be had from creating a well…
Time on Unix
An article covering everything you need to know about time on Unix. Time, a word that is entangled in everything in our lives, something we're intimately familiar with. Keeping track of it is important for many activities we do.
SeL4 Design Principles
seL4 has been our team’s greatest achievement, but it didn’t fall out of the sky: it was the result of 15 years of research, and has evolved further for the past 10 years. From the begi…
JITs are un-ergonomic
I lift my LAMP beside the github door. Keep ancient Fortran your storied numeric libs cries she. Give me your interpreted, your slow, the wretched refuse of your (insert pun for ‘teeming shore’).
LDM: My Favorite ARM Instruction
LDM—or load multiple —is my favorite assembly instruction of the ARM instruction set. Here’s why.
Unix Wars (2000)
Unix Wars