Перейти к содержанию

JIT-компиляция за 5 мкс: copy-and-patch для баз данных

8.0/10

Статья на сайте malisper.me описывает технику copy-and-patch JIT-компиляции, которая генерирует машинный код примерно за 5 микросекунд и предлагается как быстрая альтернатива JIT на основе LLVM для исполнения запросов в базах данных. Вместо полного оптимизирующего компилятора подход использует заранее подготовленные шаблоны ассемблерного кода с подстановкой конкретных значений, что радикально снижает задержку генерации кода. Это важно, поскольку LLVM-ориентированные JIT, в том числе в PostgreSQL, тратят заметное время на компиляцию, из-за чего JIT может быть невыгоден для коротких запросов. Однако отказ от LLVM означает потерю его оптимизаций, поэтому сгенерированный код может быть менее эффективным, хотя и создаётся значительно быстрее. Материал адресован разработчикам систем баз данных и инженерам производительности.

Контекст

Копирование и вставка (copy-and-patch) — это простая техника JIT-компиляции, которая сопоставляет заранее подготовленные шаблоны машинного кода с частями AST или потока байт-кода и сразу выдаёт соответствующий код, что позволяет генерировать код за микросекунды. Такой подход противопоставляется более тяжёлым JIT-компиляторам на основе LLVM, которые дают лучшую оптимизацию, но требуют заметного времени на компиляцию, что критично для систем, компилирующих запросы во время выполнения, например для СУБД и WebAssembly-виртуальных машин. В частности, в PostgreSQL LLVM-ориентированный JIT долго генерирует код, поэтому copy-and-patch рассматривается как быстрая альтернатива для таких сценариев.

Влияние

Для разработчиков движков запросов и систем баз данных подход снижает задержку JIT-компиляции до единиц микросекунд, делая JIT практичным для коротких запросов, где LLVM-компиляция была бы слишком дорогой; при этом нужно учитывать, что copy-and-patch не даёт оптимизаций LLVM.

Обсуждение

В обсуждении проводят параллель с постом 2024 года о новом JIT-компиляторе для PostgreSQL и отмечают, что LLVM-основанные JIT, включая Postgres, долго генерируют код. Часть комментаторов считает, что это не «настоящий» JIT, а шаблонная подстановка в ассемблерные заготовки без оптимизаций LLVM; другие упоминают альтернативы вроде Common Lisp и рекомендуют статьи Расска Кокса по реализации regex.

Источники

Покрытие источниками

Проверяются выбранные ключевые утверждения, а не истинность всей статьи целиком.

  1. Только данные автора или производителя

    JIT-компиляция за 5 мкс: copy-and-patch для баз данных

    • malisper.me · подтверждает · заинтересованная сторона
    • ar5iv.labs.arxiv.org · контекст · компетентная запись
  2. Только данные автора или производителя

    Статья на сайте malisper.me описывает технику copy-and-patch JIT-компиляции, которая генерирует машинный код примерно за 5 микросекунд и предлагается как быстрая альтернатива JIT на основе LLVM для исполнения запросов в базах данных.

    • malisper.me · подтверждает · первоисточник
  3. Не подходит для фактологической проверки

    В частности, в PostgreSQL LLVM-ориентированный JIT долго генерирует код, поэтому copy-and-patch рассматривается как быстрая альтернатива для таких сценариев.