eBPF Explained: How Code Runs Inside the Linux Kernel, and Why Cilium Is Built on It

What eBPF actually is, why the verifier means it can't crash your kernel, hooks and maps in plain words, two runnable examples with bpftrace and libbpf, and how Cilium turns all of it into a CNI.

August 2026

Where Linux Meets Kubernetes: Six Mental Models for When top Isn't Enough

Processes and signals, namespaces and cgroups, memory, storage, networking, and identity: the mechanism behind each, the two or three ways it breaks under a pod, and the one check that confirms it. Written from on-call across 100+ production Kubernetes clusters.

September 2026

CPU Isn't a Thing, It's Time: Kubernetes Millicores Explained

What a Kubernetes CPU value actually measures: CPU-seconds per second on one logical CPU. How a 250m limit becomes cpu.max 25000 100000 and a 100 ms throttle window, why a request is a weight and not a cap, and why 1000m is a hyperthread, not a core.

November 2026

I deleted a huge file but the disk usage didn't go down.

Why rm on an open file frees nothing: a file is an inode, a name is only a link to it, and the blocks stay allocated until the link count is zero and every file descriptor is closed. Where df and du part ways, how to find the process holding the file, how to make it let go, and what the same problem looks like on a Kubernetes node.

November 2026

logrotate from Scratch: Rotate, Compress, Prune, Repeat

What logrotate actually does, what runs it and when, where its configuration and state live, how to write and test a rule for your own application, and the handful of sharp edges that stay hidden until it runs at a time you did not plan.

October 2026

Some Super Interesting Process Management Pointers

nice and renice set a CPU scheduling weight and nothing else: the OOM killer reads oom_score, not NI. Why a lower nice cannot lift a cgroup cpu.max quota and why -10 versus +10 is a weight ratio of about 87 to 1 rather than 20 steps, what each field of top's %Cpu(s) line means and why it is every logical CPU summed, and why 717 tasks with 4 running means 713 of them are asleep.

November 2026

Why Does Your Kubernetes Pod Always Take 30 Seconds to Die?

A pod that takes exactly 30 seconds to terminate is a pod that never heard SIGTERM. Why the kernel refuses to deliver a default-action signal to PID 1, why a shell-form CMD puts sh in that seat and your app behind it, how to check what PID 1 actually is in a running container, and the three fixes: exec form, a real signal handler, or tini.

November 2026

The GNOME Extensions That Made Ubuntu More Fun To Use

A few GNOME extensions that genuinely improved my Ubuntu desktop experience, from useful clipboard history to ridiculous window-burning animations.

June 2026

Grafana Showed My Node Was Out of Memory. It Wasn't.

Two Grafana dashboards, same node, same timestamp - one shows 62 GB used, other shows 10 GB. Both are correct. Here's the full story of how Linux memory actually works and which number you should actually be watching.

April 2026

Terminator Terminal: Every Shortcut and Feature You Need to Know

A complete cheat sheet for the Terminator terminal emulator covering all keyboard shortcuts, broadcast mode, layouts, plugins and launch options.

April 2026