피드로 돌아가기
Quickly detecting JSON Escapes with SWAR
Dev.toDev.to
Backend

AssemblyScript 기반 JSON 직렬화기가 SWAR 기법으로 8바이트 블록 단위의 이스케이프 문자 감지를 구현하여 Wasm 환경에서 최대 6355MB/s 처리량을 달성했다

Quickly detecting JSON Escapes with SWAR

JairusSW2026년 4월 1일7advanced

Context

JSON 문자열 직렬화 시 따옴표, 백슬래시, 제어문자, 비ASCII 문자를 개별적으로 검사하는 순진한 루프가 핫패스에서 문자당 1개의 분기를 발생시킨다.

Technical Solution

  • UTF-16 문자 4개(8바이트)를 하나의 u64 레지스터에 패킹하고 저바이트와 고바이트를 분리하여 동시 검사한다.
  • 저바이트 검사: 뺄셈과 XOR 연산을 통해 따옴표, 백슬래시, 제어문자 범위 위반 신호를 생성하고 마스킹한다.
  • 고바이트 검사: 각 UTF-16 라인의 고바이트가 0이 아닌 경우를 감지하여 순수 ASCII 경로 이탈 여부를 판별한다.
  • Safe 변이: 추가적인 고바이트 증명 로직을 포함하여 위양성(false positive)을 최소화한다.
  • Unsafe 변이: 고바이트 증명을 건너뛰고 후속 슬로우 경로에 위양성 처리를 위임하여 핫패스 부담을 줄인다.

Impact

Wasm 환경에서 Plain ASCII 텍스트 처리 시 safe 대비 unsafe가 26% 높은 처리량(5030→6355MB/s)을 보였다. Native C 컴파일 시에도 동일한 경향이 확인되었다.

Key Takeaway

일반적인 ASCII 데이터는 비싼 연산을 회피하고 블록 단위로 흥미로운 대상 유무만 확인하는 설계가 핫패스 성능을 크게 향상시킨다.


AssemblyScript로 작성된 JSON 직렬화기에서 UTF-16 데이터에 SWAR 패턴 매칭을 u64 레지스터 연산 기반으로 적용 시 비ASCII 위주 워크로드에서 핫패스 분기 비용을 제거하면서 최대 26% 처리량 향상을 달성한다

원문 읽기