{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "lowlat.ms",
  "description": "Measurement-driven systems performance, for people who read the disassembly.",
  "home_page_url": "https://lowlat.ms/",
  "feed_url": "https://lowlat.ms/feed.json",
  "language": "en",
  "authors": [
    {
      "name": "Jonathan",
      "url": "https://lowlat.ms/about"
    }
  ],
  "items": [
    {
      "id": "https://lowlat.ms/posts/cache-line-visualizer",
      "url": "https://lowlat.ms/posts/cache-line-visualizer",
      "title": "A cache-line visualizer",
      "content_text": "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": "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.",
      "date_published": "2026-04-11T00:00:00.000Z",
      "date_modified": "2026-04-11T00:00:00.000Z",
      "tags": [
        "cache",
        "false-sharing",
        "visualization",
        "interactive",
        "mechanical-sympathy"
      ],
      "authors": [
        {
          "name": "Jonathan"
        }
      ]
    },
    {
      "id": "https://lowlat.ms/posts/io-uring-vs-epoll-vs-blocking-read",
      "url": "https://lowlat.ms/posts/io-uring-vs-epoll-vs-blocking-read",
      "title": "io_uring vs epoll vs blocking read on Linux 6.18 LTS — a fair benchmark",
      "content_text": "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": "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?",
      "date_published": "2026-04-11T00:00:00.000Z",
      "date_modified": "2026-04-11T00:00:00.000Z",
      "tags": [
        "io_uring",
        "epoll",
        "linux",
        "benchmark",
        "networking",
        "syscalls"
      ],
      "authors": [
        {
          "name": "Jonathan"
        }
      ]
    },
    {
      "id": "https://lowlat.ms/posts/hnsw-cache-pressure",
      "url": "https://lowlat.ms/posts/hnsw-cache-pressure",
      "title": "What HNSW actually does to your cache",
      "content_text": "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": "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?",
      "date_published": "2026-04-11T00:00:00.000Z",
      "date_modified": "2026-04-11T00:00:00.000Z",
      "tags": [
        "hnsw",
        "vector-search",
        "cache",
        "perf-c2c",
        "rag",
        "benchmark"
      ],
      "authors": [
        {
          "name": "Jonathan"
        }
      ]
    }
  ]
}