제품 소식

Android 성능 향상: 커널용 AutoFDO 소개

4분 읽기
Yabin Cui
소프트웨어 엔지니어

Google은 Android LLVM 도구 모음팀입니다. Google의 최우선 과제 중 하나는 LLVM 생태계의 최적화 기술을 통해 Android 성능을 개선하는 것입니다. Google은 Android를 더 빠르고 원활하며 효율적으로 만드는 방법을 끊임없이 찾고 있습니다. Google의 최적화 작업은 대부분 사용자 공간에서 이루어지지만 커널은 시스템의 핵심으로 남아 있습니다. 오늘은 Google이 사용자에게 상당한 성능 향상을 제공하기 위해 Android 커널에 자동 피드백 기반 최적화 (AutoFDO)를 도입하는 방법을 공유하게 되어 기쁩니다.

AutoFDO란 무엇인가요?

표준 소프트웨어 빌드 중에 컴파일러는 정적 코드 힌트를 기반으로 함수를 인라인할지 여부와 조건부의 어떤 분기가 선택될 가능성이 높은지 등 수천 개의 작은 결정을 내립니다.이러한 휴리스틱은 유용하지만 실제 휴대기기 사용 중에 코드 실행을 항상 정확하게 예측하지는 않습니다.

AutoFDO는 실제 실행 패턴을 사용하여 컴파일러를 안내함으로써 이 문제를 해결합니다. 이러한 패턴은 CPU의 분기 기록을 기록하여 캡처한 실제 사용 중에 코드가 취하는 가장 일반적인 명령어 실행 경로를 나타냅니다. 이 데이터는 플릿 기기에서 수집할 수 있지만 커널의 경우 가장 인기 있는 앱 100개 실행과 같은 대표적인 워크로드를 사용하여 실험실 환경에서 합성합니다. 샘플링 프로파일러를 사용하여 이 데이터를 캡처하고 코드의 '핫'(자주 사용됨) 부분과 '콜드' 부분을 식별합니다.이러한 프로필로 커널을 다시 빌드하면 컴파일러는 실제 Android 워크로드에 맞게 훨씬 더 스마트한 최적화 결정을 내릴 수 있습니다.

이 최적화의 영향을 이해하려면 다음 주요 사실을 고려하세요.

  • Android에서 커널은 CPU 시간의 약 40% 를 차지합니다.
  • Google은 이미 AutoFDO를 사용하여 사용자 공간에서 네이티브 실행 파일과 라이브러리를 최적화하고 있으며 콜드 앱 실행 개선은 약 4%, 부팅 시간 단축은 1% 를 달성했습니다.

실제 성능 향상

Google은 제어된 실험실 환경의 프로필을 활용하여 주요 Android 측정항목에서 놀라운 개선을 확인했습니다. 이러한 프로필은 앱 크롤링 및 실행을 사용하여 수집되었으며 6.1, 6.6, 6.12 커널의 Pixel 기기에서 측정되었습니다.

가장 눈에 띄는 개선사항은 아래에 나와 있습니다. 이러한 커널 버전의 AutoFDO 프로필에 관한 자세한 내용은 android16-6.12android15-6.6 커널의 각 Android 커널 저장소에서 확인할 수 있습니다.

boosting_2.png

이러한 수치는 이론적인 수치가 아닙니다. 최종 사용자를 위한 더 빠른 인터페이스, 더 빠른 앱 전환, 배터리 수명 연장, 전반적으로 더 반응성이 뛰어난 기기로 이어집니다.

작동 방식: 파이프라인

Google의 배포 전략에는 프로필의 관련성을 유지하고 성능을 안정적으로 유지하기 위한 정교한 파이프라인이 포함됩니다.

boosting_3.png

1단계: 프로필 수집

Google은 내부 테스트 플릿을 사용하여 사용자 공간 바이너리를 프로파일링하지만 일반 커널 이미지 (GKI)의 경우 제어된 실험실 환경으로 전환했습니다. 프로파일링을 기기 출시 주기에서 분리하면 배포된 커널 버전과 관계없이 유연하고 즉각적인 업데이트가 가능합니다. 무엇보다도 테스트를 통해 이 실험실 기반 데이터가 실제 플릿의 데이터와 비슷한 성능 향상을 제공하는 것으로 확인되었습니다.

  • 도구 및 환경: 최신 커널 이미지로 테스트 기기를 플래시하고 simpleperf를 사용하여 명령어 실행 스트림을 캡처합니다. 이 프로세스는 분기 기록을 기록하는 하드웨어 기능을 사용하며 특히 Pixel 기기에서  ARM Embedded Trace Extension (ETE)ARM Trace Buffer Extension (TRBE)을 활용합니다.
  • 워크로드:  Android 앱 호환성 테스트 모음 (C-Suite)에서 가장 인기 있는 앱 100개를 사용하여 대표적인 워크로드를 구성합니다. 가장 정확한 데이터를 캡처하기 위해 다음 사항에 중점을 둡니다.
    • 앱 실행: 가장 눈에 띄는 사용자 지연에 맞게 최적화
    • AI 기반 앱 크롤링: 연속적이고 진화하는 사용자 상호작용 시뮬레이션
    • 시스템 전체 모니터링: 포그라운드 앱 활동뿐만 아니라 중요한 백그라운드 워크로드 및 프로세스 간 통신도 캡처
  • 유효성 검사: 이 합성 워크로드는 내부 플릿에서 수집한 실행 패턴과 85% 유사성 을 보여줍니다.
  • 타겟팅된 데이터: 이러한 테스트를 충분히 반복하여 가장 인기 있는 애플리케이션과의 실제 사용자 상호작용을 정확하게 나타내는 고품질 실행 패턴을 캡처합니다. 또한 이 확장 가능한 프레임워크를 사용하면 추가 워크로드와 벤치마크를 원활하게 통합하여 지원 범위를 넓힐 수 있습니다.

2단계: 프로필 처리

원시 추적 데이터를 후처리하여 정리되고 효과적이며 컴파일러에 사용할 수 있도록 합니다.

  • 집계: 여러 테스트 실행 및 기기의 데이터를 단일 시스템 뷰로 통합합니다.
  • 변환: 원시 추적을 AutoFDO 프로필 형식으로 변환하고 필요에 따라 원치 않는 기호를 필터링합니다.
  • 프로필 트리밍: 프로필을 트리밍하여 '콜드' 함수의 데이터를 삭제하고 표준 최적화를 사용할 수 있도록 합니다. 이렇게 하면 거의 사용되지 않는 코드의 회귀를 방지하고 바이너리 크기가 불필요하게 증가하는 것을 방지할 수 있습니다.

3단계: 프로필 테스트

배포 전에 프로필은 안정성 위험 없이 일관된 성능 향상을 제공하는지 확인하기 위해 엄격한 검증을 거칩니다.

  • 프로필 및 바이너리 분석: 새 프로필의 콘텐츠 (핫 함수, 샘플 수, 프로필 크기 포함)를 이전 버전과 엄격하게 비교합니다. 또한 프로필을 사용하여 새 커널 이미지를 빌드하고 바이너리를 분석하여 텍스트 섹션의 변경사항이 예상과 일치하는지 확인합니다.
  • 성능 검증: 새 커널 이미지에서 타겟팅된 벤치마크를 실행합니다. 이렇게 하면 이전 기준선에서 설정한 성능 개선사항이 유지되는지 확인할 수 있습니다.

지속적인 업데이트

코드는 시간이 지남에 따라 자연스럽게 '드리프트'되므로 정적 프로필은 결국 효과를 잃게 됩니다. 최고의 성능을 유지하기 위해 파이프라인을 지속적으로 실행하여 정기적인 업데이트를 추진합니다.

  • 정기적인 새로고침: 각 GKI 출시 전에 Android 커널 LTS 브랜치에서 프로필을 새로고침하여 모든 빌드에 최신 프로필 데이터가 포함되도록 합니다.
  • 향후 확장: 현재 이러한 업데이트를 android16-6.12android15-6.6 브랜치에 제공하고 있으며 향후 android17-6.18과 같은 최신 GKI 버전으로 지원을 확대할 예정입니다.

안정성 보장

프로필 기반 최적화와 관련하여 일반적인 질문은 안정성 위험을 도입하는지 여부입니다. AutoFDO는 소스 코드의 로직을 변경하는 대신 함수 인라인 및 코드 레이아웃과 같은 컴파일러 휴리스틱에 주로 영향을 미치므로 커널의 기능적 무결성을 유지합니다. 이 기술은 이미 수년 동안 Android 플랫폼 라이브러리, ChromeOS, Google 자체 서버 인프라의 표준 최적화로 사용되어 대규모로 입증되었습니다.

일관된 동작을 더욱 보장하기 위해 '기본적으로 보수적' 전략을 적용합니다. 고품질 프로필에 캡처되지 않은 함수는 표준 컴파일러 메서드를 사용하여 최적화됩니다. 이렇게 하면 커널의 '콜드' 또는 거의 실행되지 않는 부분이 표준 빌드에서와 똑같이 동작하여 성능 회귀 또는 코너 케이스의 예기치 않은 동작을 방지할 수 있습니다.

향후 계획

현재 android16-6.12android15-6.6 브랜치에 AutoFDO를 배포하고 있습니다. 이 초기 출시 외에도 기술을 더욱 개선할 수 있는 몇 가지 유망한 방법이 있습니다.

  • 지원 범위 확대: 현재 aarch64 지원 외에도 최신 GKI 커널 버전과 추가 빌드 타겟에 AutoFDO 프로필을 배포할 예정입니다.
  • GKI 모듈 최적화: 현재 Google의 최적화는 기본 커널 바이너리 (vmlinux)에 중점을 두고 있습니다. AutoFDO를 GKI 모듈로 확장하면 커널 하위 시스템의 더 많은 부분에 성능 이점을 가져올 수 있습니다.
  • 공급업체 모듈 지원: Google은 드라이버 개발 키트 (DDK)를 사용하여 빌드된 공급업체 모듈에 AutoFDO를 지원하는 데에도 관심이 있습니다. 빌드 시스템 (Kleaf) 및 프로파일링 도구 (simpleperf)에서 이미 지원이 제공되므로 공급업체는 이러한 동일한 최적화 기술을 특정 하드웨어 드라이버에 적용할 수 있습니다.
  • 더 넓은 프로필 지원 범위: 더 광범위한 중요한 사용자 여정 (CUJ)에서 프로필을 수집하여 최적화할 수 있습니다.

Android 커널에 AutoFDO를 도입함으로써 Google은 OS의 기본 토대가 사용자가 매일 기기를 사용하는 방식에 맞게 최적화되도록 보장합니다.

작성자:

계속 읽기