- 2023년 V8 엔진의 인상적인 개선 성과 요약
- 새로운 중간 단계 컴파일러 도입과 상위 단계 컴파일러, 런타임, 가비지 컬렉터의 개선을 통해 전반적인 속도 향상
- 자바스크립트와 WebAssembly에 대한 새로운 기능 추가 및 WebAssembly 가비지 컬렉션(WasmGC)으로 웹에 효율적으로 가비지 컬렉션 프로그래밍 언어를 가져옴
- 안전성 향상을 위해 샌드박싱 인프라 개선 및 V8에 제어 흐름 무결성(CFI) 도입
Maglev: 새로운 중간 단계 최적화 컴파일러
- 새로운 최적화 컴파일러 Maglev 도입, Sparkplug과 TurboFan 사이에서 작동
- Maglev는 Sparkplug보다 약 20배 느리게 코드를 생성하지만, TurboFan보다는 10~100배 빠르게 코드를 생성
- JetStream에서 8.2%, Speedometer에서 6%의 성능 향상 관찰
- Maglev의 빠른 컴파일 속도와 TurboFan에 대한 의존도 감소로 인한 에너지 절감 효과
Turboshaft: 상위 단계 최적화 컴파일러의 새로운 구조
- 상위 단계 최적화 컴파일러 TurboFan의 새로운 내부 구조 Turboshaft 도입
- 새로운 최적화 추가와 더 빠른 컴파일 가능
- Chrome 120부터 CPU-agnostic 백엔드 단계 모두 Turboshaft 사용, 이전보다 약 두 배 빠른 컴파일
더 빠른 HTML 파서
- HTML 파싱에 소요되는 시간 감소를 위해 Blink에 더 빠른 HTML 파서 추가
- Speedometer 점수에서 3.4% 증가
- WebKit 프로젝트가 이 변경 사항을 즉시 통합
더 빠른 DOM 할당
- DOM 측면에서의 투자와 최적화
- Oilpan 할당자에 페이지 풀 추가로 커널과의 왕복 비용 감소
- 압축 및 비압축 포인터 지원과 Blink에서 고빈도 필드의 압축 방지
- 자주 할당되는 클래스의 oilpanization으로 할당 작업 3배 가속화 및 DOM 중심 벤치마크 성능 향상
새로운 자바스크립트 기능
- 새로 표준화된 자바스크립트 기능 배포.
- resizable ArrayBuffers, ArrayBuffer transfer, String
isWellFormed
및 toWellFormed
, RegExp v
플래그, JSON.parse
with source, Array grouping, Promise.withResolvers
, Array.fromAsync
등 추가
- Iterator 도우미 기능은 웹 호환성 문제로 인해 일시적으로 철회 후 재배포 예정
- ES6+ 자바스크립트 코드의 성능 향상을 위한 일부 불필요한 임시 죽은 지역 검사 생략
WebAssembly 업데이트
- Wasm에 대한 새로운 기능과 성능 향상
- 멀티 메모리, 꼬리 호출, 완화된 SIMD 지원으로 성능 향상
- 메모리64 구현 완료 및 제안이 4단계에 도달하면 배포 예정
- 예외 처리 제안의 최신 업데이트 반영 및 이전 형식 지원
- JSPI 투자로 웹에서 더 큰 클래스의 애플리케이션 활성화
WebAssembly 가비지 컬렉션
- WasmGC 배포로 V8의 기존 가비지 컬렉터에 의해 관리되는 객체와 배열 할당 가능
- Java, Kotlin, Dart 등의 가비지 컬렉션 언어로 작성된 애플리케이션을 Wasm으로 컴파일할 때 자바스크립트로 컴파일하는 것보다 약 두 배 빠른 실행
보안
- 샌드박싱, 퍼징, CFI가 올해의 주요 보안 주제
- 샌드박싱 인프라 구축, 퍼징 인프라 투자 및 언어 커버리지 개선
- CFI 아키텍처 기반 마련 및 다양한 플랫폼에서 구현 가능
-
the_hole
주변 인기 있는 익스플로잇 기술 완화 및 V8CTF 형태의 새로운 익스플로잇 현상금 프로그램 시작
결론
- 작은 성능 향상 프로젝트들의 결합된 영향으로 상당한 성과
- 2023년 V8의 성능 향상을 보여주는 벤치마크 점수는 JetStream에서 14%, Speedometer에서 34% 성장
- V8은 이제 더 빠르고 안전하며, 빠르고 격렬한 웹으로의 여정은 이제 시작임
- V8 팀은 모두에게 빠르고 안전하며 멋진 웹 탐색 경험을 기원