2024 to 2026 WebAssembly 런타임 벤치마크, Wasmer 선두와 wide_arithmetic의 암호 연산 효과
- Wasmer가 측정한 런타임 중 가장 빠르며, WAVM, WAMR, Wasmtime도 근소한 차이로 뒤따른다는 결과
- WAVM은 이식성 높은 기본 WebAssembly 코드에서도 가장 좋은 최적화 결과를 내며, wide_arithmetic 명령 지원은 암호 연산 성능을 크게 높임
- libsodium 커밋
8e3be861벤치마크를 2024년, 2025년, 2026년 런타임에 실행하고, 네이티브 x86-64 대비 감속도의 기하평균으로 비교함 - 측정값은 AMD Ryzen AI 9 HX 470에서 CPU 부스트를 끄고 최대 2GHz로 제한한 환경의 결과이며, 각 테스트는 ITERATIONS=3으로 실행돼 짧은 테스트에는 잡음과 양자화가 있음
- WAMR 2.1.0은 Zig가 생성한 모듈을 AOT 컴파일할 때
invalid WASM stack data type오류가 나 집계에서 제외됐고, WAVM은 과거 비교 가능한 릴리스가 없어 2026년 nightly만 포함됨
Hacker News opinions
메모리 사용량도 봤으면 좋겠음. 기본 사용량과 인스턴스 1개, 50개를 돌릴 때 비용이 궁금하고, 네이티브보다 50% 느린 정도면 난 꽤 받아들일 만하다고 봄.
여기 Node가 유난히 느린 건 최적화를 강제하지 않았기 때문일 수도 있음. Node는 OSR이 없어서 벤치마크 스크립트가 최적화 티어로 올라갈 기회가 없고, node --no-liftoff로 돌리면 이 문제를 피할 수 있음.
WASM 런타임을 보려면 int8 내적과 각도, 코사인 거리도 좋은 마이크로벤치마크임. NumKong은 AVX2/Haswell과 AVX2-VNNI/Alder Lake 구현이 있어서 코드 생성기가 어디서 성능을 놓치는지 보기 좋고, Wasmtime/Cranelift용 PR도 좀 시작했었음.
샌드박스 상태로 네이티브에 가까워지는 건 좋지만, 샌드박스 안에 런타임 전체와 GC, 표준 라이브러리까지 넣는 경우는 이 벤치마크 가정에 들어가지 않음.
예전에 Wasmer 면접을 준비할 때 리눅스 커널 확장으로 실행해서 1만 배 빨라졌다는 얘기를 들었음. WASM이 플러그인 용도만이 아니라 운영체제가 .exe처럼 두 번째 바이너리 형식으로 받아들이면 크로스플랫폼 바이너리가 될 텐데 싶음.
Wasure 쪽에 더 포괄적인 벤치마크가 있는데 결과가 꽤 다름. libsodium은 기억상 수치 연산 비중이 아주 큰 워크로드임.
그 표의 숫자가 높은 게 좋은 건지 나쁜 건지, 완전 네이티브 C와 무엇을 비교하는지, 옵션이 뭔지 바로 알기 어려웠음. 접힌 상세 설명 아래쪽을 봐야 높은 값이 좋다는 걸 알 수 있더라.
WAVM이 Rust 쪽에서 어떤 상태인지 궁금함. ARM MTE나 RISC-V CHERI도 아직 지원하지 않고, wasmtime-mte도 벤치마크에 넣어볼 만함.
내 wasm2go가 wazero와 비교해 어디쯤일지 궁금함. 직접 시험해봐야겠음.
wasm2go는 정말 좋은 프로젝트라고 봄. 나는 이걸 써서 MicroPython용 네이티브 Go 런타임을 만들고 있음.