Deep Dive
What a Container Actually Isolates, and the Thing It Does Not
The namespaces hide the view and the cgroups cap the usage, and the kernel is shared, so the isolation is a boundary of visibility rather than a wall…
Longer pieces on how a piece of infrastructure actually works, from the syscall or the byte upward.
Deep Dive
The namespaces hide the view and the cgroups cap the usage, and the kernel is shared, so the isolation is a boundary of visibility rather than a wall…
Deep Dive
The browser was happy and the phone was not, because the desktop had cached the intermediate and the mobile client had to build the chain from exactly what…
Deep Dive
The index was built and the query still scanned the table, because the predicate wrapped the column in a function, and the wrapped column is not the value…
Deep Dive
The pool was raised to two hundred to fix the timeouts, and the database got slower, because the connections were the contention rather than the cure, and…
Deep Dive
A new connection starts with a congestion window of about ten packets and doubles it per round trip, so the first response is gated by the ramp rather than…
Deep Dive
The first request paid for DNS, the TCP connect and a full TLS 1.2 negotiation before a single byte of the response arrived, and the round trips were the…
Deep Dive
The response times split into a fast cluster and a slow cluster, and the mean landed in the empty space between them, describing a latency that no request…
Deep Dive
Node's DNS and file system work share a threadpool of four threads by default, and one slow file read queues every lookup behind it, so the event loop is…
Deep Dive
A dropped segment is not retried immediately. The retransmission timer backs off exponentially, so one loss adds a stall measured in round trips squared…
Shopify
INP replaced FID and it is much harder to pass. A variant selector that felt fine on a laptop was failing badly on the phones customers actually use.
Shopify
Shopify deprecated include for a reason that is about scope, not syntax. The performance difference is real and the migration breaks things in a predictable…
Deep Dive
Five successive changes to a Rust cache entry took it from 953 bytes to 420 across 250 billion entries, and made lookups 19 percent faster rather than slower.