New
The latest blog posts to take off on Hacker News. 4,387 posts.
A minimum complete tutorial of Linux ext4 file system (2017)
This is a complete tutorial for understanding the basics of Linux ext4 file system.
Buggy animation in Atlassian Bitbucket is wasting half a CPU core at all times
I was running some benchmarks the other day. I usually have a lot of things running (Teams, Chrome, IDE, etc…) but I have to close everything to run some tight benchmarks. When I am done, one of th…
The Intel 386 processor die: the clock circuit
Processors are driven by a clock, which controls the timing of each step inside the chip. In this blog post, I'll examine the clock-generati...
XCurl
It is often said that Imitation is the Sincerest Form of Flattery. Also, remember libcrurl? That was the name of the thing Google once planned to do: reimplement the libcurl API on top of their Chrome networking library. Flattery or not, it never went anywhere. The other day I received an email asking me about ……
Rust std fs slower than Python? No, it's hardware
Achieving Data Freedom Through Open Source and Rust
Designing a SIMD Algorithm from Scratch
Another explainer on a fun, esoteric topic: optimizing code with SIMD (single instruction multiple data, also sometimes called vectorization ). Designing a good, fast, portable SIMD algorithm is not a simple matter and requires thinking a little bit like a circuit designer.
Evaluating M3 Pro CPU Cores: General Performance
Using assembly language test loops to understand the differences between M1 Pro and M3 Pro CPU cores casts new light on their differences.
Windows NT: Peeking into the Cradle
A review of "Showstopper!" by G. Pascal Zachary and my own reflections
Writing a Debugger from Scratch: Stacks
(New to this series? Consider starting from part 1) At the end of the last post, DbgRs could finally set breakpoints. That was the last really critical feature needed for controlling execution of a program. Now that it can stop on an arbitrary function or code location, the next step is to find more information about…
What has changed in CPU cores in M3 chips?
Little seems to have changed in CPU cores in M3 chips, if you read reviews. Dig a bit deeper and there are major changes, as explained here.
Setenv Is Not Thread Safe and C Doesn't Want to Fix It
You can't safely use the C setenv() or unsetenv() functions in a program that uses threads. Those functions modify global state, and can cause other threads calling getenv() to crash. This also causes crashes in other languages that use those C standard library functions, such as Go's os.Setenv ( Go issue ) and Rust's…
Operating on a minimal two-core Postgres instance: Query optimization insights
In an era where the costs for cloud services continue to soar, I want to outline how our data team has successfully managed to run the infrastructure of our energy trading company within the first year using only two PostgreSQL database instances - each equipped with just two CPU cores and four GB of RAM. Despite this…
Curl on 100 Operating Systems
In a recent pull-request for curl, I clarified to the contributor that their change would only be accepted and merged into curl's git code repository if they made sure that the change was done in a way so that it did not break (testing) for and on legacy platforms. In that thread, I could almost … Continue reading…
The Architecture of Serverless Data Systems
I recently blogged about why I believe the future of cloud data services is large-scale and multi-tenant, citing, among others, S3. “ Top tier SaaS services like S3 are able to deliver amazing simplicity, reliability, durability, scalability, and low price because their technologies are s
Reptar
We have a CPU mystery! We found a way to cause some processors to enter a glitch state where the normal rules don’t apply, but what does that mean…?
The Linux kernel has been accidentally hardcoded to a maximum of 8 cores
TL;DR This doesn’t mean that the scheduler can’t use more than 8 cores. The scheduler controls how to allocate tasks to available cores. How to schedule particular workloads efficiently…
Link-Time Optimisation (LTO)
I recently started exploring link-time optimisation (LTO), which I used to think was just a single boolean choice in the compilation and linking workflow, and perhaps it was like that a while ago… I’ve learned that these days, there are many different dimensions of LTO across compilers and linkers today and more…
Reverse engineering the Intel 386 processor's register cell
The groundbreaking Intel 386 processor (1985) was the first 32-bit processor in the x86 line. It has numerous internal registers: general-pu...
i386 Assembly Language trick for storing data in .text
Don’t want a big old bloated multi-kilobyte executable with a data segment, but you do need to store some data?
Go, Containers, and the Linux Scheduler
How to make the Go runtime play nicely with the Linux Scheduler
Speeding up a program for a 50 year old processor
In the previous year I wrote a program, running on Intel's first microprocessor - 4004, that computes the first 255 digits of π. So let's continue our journey with the successor - the Intel 4040.
Why Cities: Skylines 2 performs poorly
The teeth are not the only problem
Classes vs. structs in .NET: how not to teach about performance
It’s been a while since my last blog post, but I believe it’s better to post late than never, so here I am!
M3 Macs: there's more to performance than counting cores
A look at some of the factors determining the performance of new M3 chips compared to the M1 and M2 versions, and how not to compare them.