SpiderMonkey의 인라인 캐싱: 단순한 캐싱을 넘어서

2025-09-14

이 글에서는 SpiderMonkey JavaScript 엔진의 인라인 캐싱(IC) 구현에 대해 자세히 설명합니다. 기존 캐싱과 달리 SpiderMonkey의 IC는 자기 수정 코드 기술입니다. 호출 사이트에 일련의 스텁을 삽입하여 입력 유형에 따라 효율적인 실행 경로를 동적으로 선택합니다. 첫 번째 호출은 대체 경로를 실행하고 결과에 따라 해당 스텁을 생성합니다. 동일한 유형의 후속 호출은 캐시에 적중하여 효율성이 크게 향상됩니다. 이 글에서는 JavaScript 덧셈을 예로 들어 IC의 작동 방식을 설명하고 SpiderMonkey의 최신 CacheIR 아키텍처에 대해서도 언급합니다. CacheIR은 서로 다른 컴파일러 간에 IC를 공유할 수 있도록 IC의 세부 정보를 추상화합니다.

더 보기

eBPF를 사용한 Firefox 메모리 할당 추적

2025-05-31

작성자는 eBPF(확장 버클리 패킷 필터)를 사용하여 Firefox의 JavaScript 엔진인 SpiderMonkey에서 메모리 할당을 추적했습니다. 초기 목표는 메모리 관리 최적화를 위해 자주 생성되는 Rooted 객체의 소스 코드 위치를 파악하는 것이었습니다. bpftrace 도구와 사용자 프로브(uprobe)를 사용하여 작성자는 `registerWithRootLists` 함수를 성공적으로 추적하고 ustack 함수를 사용하여 호출 스택 정보를 얻었습니다. 최종적으로 작성자는 보고서를 생성하고 여러 버그 보고서를 제출했습니다. 이를 통해 메모리 할당이 최적화되었고 `registerWithRootLists`에 대한 수천만 번의 호출이 감소되었습니다.

더 보기
개발