오늘 The Fast and the Curious 포스트에서는 Chrome이 모바일 기기에서 어떻게 동급 최고 수준의 Speedometer 점수를 달성하여, 안드로이드 사용자들에게 더 빠르고 부드러운 웹 경험을 제공하게 되었는지 살펴보겠습니다.
Chrome의 핵심은 언제나 '속도'였습니다. 페이지를 빠르게 로드하든, 복잡한 웹 앱을 매끄럽게 실행하든, 끊김 없는 브라우징 경험을 제공하든, 성능은 우리 브라우저의 심장과도 같습니다. 그리고 우리는 항상 Chrome을 더 빠르게 만들 수 있는 방법을 찾고 있습니다.
지난 2년 동안 우리는 안드로이드 기기를 위한 다양한 성능 개선 작업에 매진해 왔습니다. 그동안 이뤄낸 진전 중 일부를 여러분과 공유하게 되어 기쁩니다.
안드로이드에서의 Speedometer
Chrome의 성능을 추적하는 데 사용하는 핵심 지표 중 하나는 Speedometer 벤치마크입니다. 이 벤치마크는 다른 주요 웹 브라우저 엔진들과 협력하여 개발되었으며, HTML이나 CSS의 파싱/렌더링, 자바스크립트 실행을 포함하여 Chrome이 웹 페이지와의 상호작용을 얼마나 빨리 완료하는지 측정합니다.
Chrome M112 출시 이후, 우리는 안드로이드 기기에서 Speedometer 2.1 점수가 크게 상승하는 것을 확인했습니다[1]. 실제로 많은 기기에서 점수가 두 배 이상 올랐으며, 최신 Snapdragon® 8 Elite 모바일 플랫폼은 모바일 기기 Speedometer 성능의 새로운 기록을 세웠습니다! 이러한 엄청난 성과는 Chrome 및 안드로이드 팀뿐만 아니라 실리콘 및 SoC 파트너들의 노력 덕분입니다.
Chrome M112 이후, 많은 안드로이드 기기에서 Speedometer 2.1 점수가 두 배 이상 증가했습니다. [1]
어떻게 가능했나요?
이러한 개선은 다음과 같은 여러 변화를 통해 이루어졌습니다.
- 빌드 최적화: Chrome이 빌드되는 방식을 개선하여, 최신 프리미엄 안드로이드 기기와 SoC에 맞춰 최적화된 더 빠른 코드 실행이 가능해졌습니다.
- V8 및 Blink 개선: 자바스크립트 엔진(V8)과 렌더링 엔진(Blink)의 수많은 개선 사항이 성능을 더욱 끌어올렸습니다.
- 스케줄링, OS 및 SoC: 안드로이드 파트너들과 긴밀히 협력하여 Chrome이 운영체제 및 스레드 스케줄링과 상호작용하는 방식을 최적화함으로써 기기의 실리콘 성능을 최대한 활용하도록 했습니다.
이제 각 분야를 더 자세히 살펴보겠습니다.
빌드 최적화
안드로이드 기기 생태계는 매우 다양합니다. 보급형 스마트폰부터 최신 프리미엄 폰까지, Chrome은 모든 기기에서 원활하게 작동해야 합니다. 작년까지만 해도 우리는 이 모든 다양한 안드로이드 기기에 동일한 Chrome 빌드를 배포했습니다. 하지만 보급형 기기의 메모리와 디스크 용량 제한 때문에 Chrome은 바이너리 크기를 작게 유지하는 것을 우선시해야 했습니다. 그 결과, 바이너리 크기를 키우는 많은 현대적인 빌드 최적화 기법을 적용하기 어려웠습니다.
M113부터 Chrome은 구글 플레이 스토어를 통해 프리미엄 안드로이드 기기를 겨냥한 별도의 고성능 빌드를 배포할 수 있게 되었습니다. 다른 기기에는 여전히 바이너리 크기가 제한된 빌드를 제공하지만, 이 접근 방식을 통해 새로운 프리미엄 빌드에 다음과 같은 현대적인 최적화 기술들을 도입할 수 있었습니다.
- 32비트 Arm 대신 64비트 Arm을 타겟팅함으로써, 더 효율적인 Arm 명령어 세트 기능과 더 큰 64비트 연산을 활용할 수 있게 되었습니다.
- 대용량 디스크와 충분한 메모리를 갖춘 프리미엄 기기에서는 바이너리 크기의 중요성이 낮아졌으므로, 이제 C++ 코드를 크기 최적화(-Oz) 대신 속도 최적화 (-O2 / -O3)로 컴파일합니다.
- 또한, 컴파일러가 사용하는 인라이닝(inlining) 임계값을 조정하여 빈번하게 사용되는 코드('hot code')에 대해 모듈 내부 및 모듈 간 인라이닝을 더 많이 활성화했습니다. 동시에 다른 컴파일러 패스(MLGO)의 모델과 정책을 업데이트하여 드물게 사용되는 코드('cold code')의 인라이닝을 줄였습니다.
- 이제 빌드에 프로필 기반 최적화(PGO) 기술을 적용하여 빈번하게 사용되는 코드의 레이아웃과 최적화 수준을 더욱 향상시킵니다.
- 마지막으로, Chrome의 오더파일(orderfile) 생성을 새로운 64비트 빌드에 맞춰 조정하여 교차 함수 코드 순서를 개선했습니다. 또한 오더파일 생성에 사용되는 작업 부하에 업계 표준 브라우저 속도 벤치마크인 Speedometer 3를 포함했습니다.
이러한 빌드 최적화는 전체 Speedometer 점수 향상의 절반 이상을 차지합니다. 이 과정은 Arm과의 협력을 통해 더욱 원활하게 진행되었으며, Arm은 Chrome의 PGO 설정 및 인라이닝에서 비효율적인 부분을 식별하고 해결하는 등 귀중한 통찰력과 개선 사항을 제공해 주었습니다.
V8 및 Blink 개선
Chrome은 자바스크립트 및 웹 렌더링 엔진인 V8과 Blink의 성능을 지속적으로 개선하고 있습니다. 대부분의 최적화는 개별적으로는 영향이 작지만, 이러한 개선 사항들이 쌓여 나머지 Speedometer 점수 향상의 대부분을 견인했습니다. 주목할 만한 개선 사항은 다음과 같습니다.
- 이제 innerHTML 속성을 파싱하기 위해 최적화된 고속 경로 HTML 파서를 사용합니다.
- V8은 Ignition 인터프리터 바로 위 단계에서 비최적화 코드를 매우 빠르게 생성하는 초고속 베이스라인 컴파일러인 Sparkplug 컴파일러 계층을 출시했습니다. 이후 V8은 세미 최적화 코드를 생성하는 새로운 중간 단계 컴파일러인 Maglev도 출시했습니다. Maglev는 Sparkplug보다 코드를 생성하는 데 시간은 더 걸리지만, V8의 초고속 최적화 컴파일러 계층인 Turbofan보다는 훨씬 적은 시간이 소요됩니다. 종합적으로, 이 새로운 계층 구조를 통해 V8은 더욱 단계적으로 성능을 높일 수 있게 되었으며, 성능과 전력 소비를 모두 개선했습니다.
- 가비지 컬렉션이 발생하는 시점을 결정하는 휴리스틱을 조정하여, 렌더링 엔진이 유휴 상태일 때나 사용자가 페이지에서 벗어날 때를 타겟팅하도록 했습니다.
- V8과 파싱, 스타일, 레이아웃, 텍스트 렌더링 엔진 전반에 걸쳐 수많은 점진적인 최적화를 적용했습니다.
스케줄링 및 OS
최상의 성능을 구현하기 위해 안드로이드 파트너들은 운영체제의 스레드 스케줄링 및 주파수 스케일링 정책을 튜닝하고, 실리콘 자체의 성능을 개선하는 데 막대한 투자를 하고 있습니다.
우리는 Chrome과 Speedometer를 위한 튜닝을 개선하기 위해 파트너들과 긴밀히 협력했습니다. 특히 퀄컴(Qualcomm)과의 협력은 매우 고무적이었습니다. 최적화된 스케줄링 정책과 향상된 하드웨어 성능을 결합함으로써, 그들의 최신 Snapdragon 8 Elite 모바일 플랫폼은 이전 제품 대비 Speedometer 3.0에서 60-80%의 향상을 실현하여 업계 최고의 웹 성능을 달성했습니다. 이 협력을 통해 PGO 개선의 필요성과 V8에서의 기회와 같은 Chrome 코드의 중요한 병목 현상도 파악할 수 있었습니다.
Snapdragon 8 Gen 3(왼쪽)와 Snapdragon 8 Elite(오른쪽)에서의 Speedometer 3.0 비교, Chrome M131
이러한 개선이 왜 중요한가요?
더 높은 Speedometer 점수는 실제 사용자가 웹 콘텐츠와 상호작용할 때 페이지 로딩과 반응 속도가 빨라지는 것을 의미합니다. M112 시절, 픽셀 태블릿(Pixel Tablet)에서 구글 문서(Google Docs)를 로드하는 데 걸리는 시간은 지금보다 50% 이상 더 길었습니다. 이것이 바로 Speedometer 점수가 두 배로 늘어난 결과입니다!
픽셀 태블릿에서의 Chrome M112 vs. M129, 구글 문서 로딩 (프레임 수 비교)
[1] Speedometer 3는 M122 중에 출시되었으므로, 전체적인 그림을 제공하기 위해 Speedometer 2.1의 결과를 함께 제공합니다. 그래프에 표시된 측정값은 픽셀 태블릿에서 측정되었습니다.
게시자: Eric Seckler, Chrome 소프트웨어 엔지니어




