<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>lowlat.ms</title>
  <subtitle>Measurement-driven systems performance, for people who read the disassembly.</subtitle>
  <link href="https://lowlat.ms/atom.xml" rel="self" />
  <link href="https://lowlat.ms/" />
  <id>https://lowlat.ms/</id>
  <updated>2026-04-11T00:00:00.000Z</updated>
  <generator uri="https://astro.build" version="5">Astro</generator>
  <entry>
    <title>A cache-line visualizer</title>
    <link href="https://lowlat.ms/posts/cache-line-visualizer" />
    <id>https://lowlat.ms/posts/cache-line-visualizer</id>
    <updated>2026-04-11T00:00:00.000Z</updated>
    <published>2026-04-11T00:00:00.000Z</published>
    <author><name>Jonathan</name></author>
    <summary>An interactive that lets you feel cache-line behavior: array-of-structs vs struct-of-arrays, false sharing in action, 64-byte alignment, the padding trick — the visceral version of things every systems engineer has memorized.</summary>
  </entry>
  <entry>
    <title>io_uring vs epoll vs blocking read on Linux 6.18 LTS — a fair benchmark</title>
    <link href="https://lowlat.ms/posts/io-uring-vs-epoll-vs-blocking-read" />
    <id>https://lowlat.ms/posts/io-uring-vs-epoll-vs-blocking-read</id>
    <updated>2026-04-11T00:00:00.000Z</updated>
    <published>2026-04-11T00:00:00.000Z</published>
    <author><name>Jonathan</name></author>
    <summary>At what request rate, batch size, and connection count does io_uring beat epoll for a real network read workload on Linux 6.18 LTS — and does it hold across kernels, NUMA topologies, and SQPOLL modes?</summary>
  </entry>
  <entry>
    <title>What HNSW actually does to your cache</title>
    <link href="https://lowlat.ms/posts/hnsw-cache-pressure" />
    <id>https://lowlat.ms/posts/hnsw-cache-pressure</id>
    <updated>2026-04-11T00:00:00.000Z</updated>
    <published>2026-04-11T00:00:00.000Z</published>
    <author><name>Jonathan</name></author>
    <summary>When you serve queries against an HNSW index that exceeds your buffer cache, where does the cache pressure actually fall? Which levels miss, how often, and which graph traversal patterns are pathological?</summary>
  </entry>
</feed>
