A week with Satori, the experimental low-latency GC for .NET

So, about a week ago I made a post that talked about Satori, an exciting experimental garbage collector that showed pareto front advances of key metrics. Put another way, this GC seems to offer a new level of near minimal STW pause durations, minimal heap sizes and strong throughput performance in a number of synthetic benchmarks.

Initial benchmarking showed Satori as a shooting star of low latency with some modest give back on the throughput axis and great heap sizes, which seemed like a very attractive tradeoff for some classes of applications. But as more benchmarks have been run, we begin to see some of the places where Satori doesn’t shine as brightly. So, after a week of testing what have we learned so far? Read on below👇

A sub-millisecond GC for .NET?!

Be sure to checkout my follow up post: A week with Satori, the experimental low-latency GC for .NET


Howdy folks, I wanted to bring your attention to a Github discussion over in the .NET runtime where an experimental Garbage Collector called Satori has emerged that is producing very exciting numbers for those of us in the .NET performance crowd.

Quick Links:

-          The discussion thread

-          The comment introducing the new GC

-          Benchmarks, Benchmarks, Benchmarks

TL;DR / Results

Compared to the traditional Server GC in interactive mode, Satori offers improvements in synthetic benchmarks in several key metrics that range from impressive to down right shocking. How shocking?

-          50x improvement to Median Pause Time

-          >100x improvement to 99th percentile pause times

-          3x improvement to Heap Size

So yeah… it is really a stunning development.

I would encourage anyone interested in writing high-performance .NET code to try out Satori (instructions below) on your own workloads to see if it offers any benefits. This feedback can help the folks at Microsoft prioritize investment in this experiment.

👇 You can find instructions on how to get it at the end of this article 👇

So what is Model Based Testing anyway?

Howdy! This is another chapter in my series about software testing. You don't have to have read any of the previous installments to understand this article, but "An Introduction to Testing the Impossible" covers some similar concepts and tools.

Today we are going to cover another advanced testing technique called Model-Based Testing that can help us find exotic bugs very quickly without a lot of code. It can also go places that other testing strategies cannot such as testing systems for bugs that only occur after a magic sequence of operations.

8 levels of thinking about structs in C#

"What is the difference between a class and a struct in C#?". I like this as a lead-in interview question because most candidates can offer up a quick answer that can help them get some confidence rolling in case they are nervous (we are not generally looking to asses candidates for performance under duress 🙂). There is a spectrum of correct answers that can shed light on how the candidate thinks about this fundamental component of the .NET type system. I'm going to lay out some of the ways that I think about structs in .NET.

Getting started with Dafny: Your first formal proof

This post is a beginner's walk through of how to use Dafny to build formally verified software. It is written for at a junior or beginner developer level and should be approachable by anyone with a little experience in C#, Java, Javascript or other similar languages.

If you are not familiar with Formal Methods or the Dafny Verification Language see my previous article for an introduction.


You might remember from last time that I promised to walk through my formal proof of a basic communication protocol. That's not gonna happen. Instead we are going to do something simpler than that. Today we are going to walk through how to formally prove a basic Mutex, more commonly called a thread lock. If you are not experienced with multithreaded programming, don't worry, we are not going to get deep into that, it's just used as a toy example.