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.
Источники
Покрытие источниками¶
Проверяются выбранные ключевые утверждения, а не истинность всей статьи целиком.
-
Только данные автора или производителя
JIT-компиляция за 5 мкс: copy-and-patch для баз данных
- malisper.me · подтверждает · заинтересованная сторона
- ar5iv.labs.arxiv.org · контекст · компетентная запись
-
Только данные автора или производителя
Статья на сайте malisper.me описывает технику copy-and-patch JIT-компиляции, которая генерирует машинный код примерно за 5 микросекунд и предлагается как быстрая альтернатива JIT на основе LLVM для исполнения запросов в базах данных.
- malisper.me · подтверждает · первоисточник
-
Не подходит для фактологической проверки
В частности, в PostgreSQL LLVM-ориентированный JIT долго генерирует код, поэтому copy-and-patch рассматривается как быстрая альтернатива для таких сценариев.