AI로 5μs 만에 JIT 컴파일하기

JIT Compiling Code in 5μs

AI로 5μs 만에 JIT 컴파일하기

JIT 컴파일은 성능을 크게 향상시킬 수 있지만, 전통적으로 어셈블리 지식이 필요해 어려운 기술로 여겨졌습니다. 저자는 AI의 도움으로 이 장벽을 낮췄고, 자신의 데이터베이스 pgrust에서 모든 SQL 쿼리를 JIT 컴파일할 수 있게 되었습니다. 이 글에서는 ARM64 어셈블리를 직접 생성하는 방식으로 5μs 만에 컴파일되는 JIT 컴파일러를 구축하는 방법을 설명합니다. 간단한 정규식 엔진을 예로 들어, copy-and-patch 기법을 사용해 스텐실을 만들고, 이를 조합해 실행 가능한 코드를 생성하는 과정을 자세히 다룹니다.

AI 덕분에 JIT 컴파일러 구현이 예상보다 훨씬 쉬웠고, 이는 pgrust가 빠른 이유 중 하나가 되었습니다.
  1. MaxBarraclough

    MaxBarraclough의 글이 생각나네요. 2024년 블로그 게시물 'Look ma, I wrote a new JIT compiler for PostgreSQL' [0] 말이죠. 두 글 모두 Postgres의 LLVM 기반 JIT [1]가 코드를 생성하는 데 시간이 걸린다는 점을 지적합니다.

    > JIT 컴파일러가 드물다는 것은 역사적으로 JIT 컴파일러를 구현하는 것이 가치가 있을 만큼 충분히 어렵다는 것을 의미한다고 생각합니다.

    그것은 처음부터 JIT를 작성하는 경우에만 해당됩니다. JIT가 드문 것은 아닙니다. 단지 LLVM(및 기타 프레임워크)이 자주 사용될 뿐입니다. 모든 주요 인터프리터에는 JIT 컴파일러가 있습니다. PCRE2에도 JIT 컴파일러가 있습니다. LLVM보다 훨씬 빠른 코드 생성을 제공하는 JIT 프레임워크가 있습니다: Cranelift, GNU Lightning, Mir 등이요. 커스텀 copy-and-patch JIT보다 코드 생성이 더 빠를 수 있을지는 의문이지만, LLVM보다는 훨씬 빠를 것입니다.

    [0] https://www.pinaraf.info/2024/03/look-ma-i-wrote-a-new-jit-c... , 논의: https://news.ycombinator.com/item?id=39742916

    [1] https://www.postgresql.org/docs/current/jit-reason.html

  2. agnishom

    Russ Cox의 정규 표현식 엔진 구현에 관한 글을 추천합니다: https://swtch.com/~rsc/regexp/

    매우 관련이 깊습니다.

  3. catlifeonmars

    약간 메타적일 수 있지만, 이 글은 읽기 pleasant했습니다. LLM을 사용하는 기사가 LLM이 쓴 것처럼 읽히지 않는 것은 신선했습니다.

    이 접근 방식을 사용하여 제가 실험 중인 JIT 방화벽용 스텐실을 생성할 수도 있겠네요.

    또한 eBPF 바이트코드를 즉석에서 생성하는 데에도 사용할 수 있을 것 같다는 생각이 듭니다.

  4. glum64

    음, Common Lisp에서는 JIT를 사용할 수 있을 뿐만 아니라 관리도 가능합니다. 프로그래머가 무엇을 컴파일할지, 무엇을 컴파일하지 않을지 결정할 수 있습니다.

    런타임 외에도 코드가 컴파일되거나 로드되어 실행될 때 JIT를 사용할 수 있습니다 (즉, 컴파일 또는 로딩 속도 향상을 염두에 두고 있나요? 문제없습니다. 그 속도 향상도 네이티브 머신 코드로 컴파일할 수 있고, 무한히 반복할 수 있습니다...).

  5. mgaunard

    이 접근 방식의 문제는 실제 JIT 컴파일이 아니라 기본적인 치환이 있는 어셈블리 템플릿에 불과하다는 것입니다.

    LLVM을 사용하지 않으면 LLVM이 수행하는 모든 최적화를 놓치게 됩니다.

  6. malisper

    저자입니다. 게시물이나 pgrust에 대해 질문이 있으면 알려주세요.

  7. glenjamin

    pgrust는 매우 흥미롭지만, 깊은 변경 사항으로 인해 업스트림에 반영할 수 있는 실행 가능한 경로가 없습니다. 최종 목표는 널리 채택될 만큼 견고해지는 것인가요?

  8. hamilyon2

    이것은 copy-and-patch 컴파일을 사용하여 이를 달성합니다.

이 날의 다른 글

2026-08-23