- 페이지는 운영 체제가 메모리를 관리하는 최소 단위
- 대부분의 CPU는 4 KB 페이지 크기를 지원하며, Android OS와 애플리케이션은 4 KB 페이지 크기에 최적화되어 있음
- ARM CPU는 16 KB 페이지 크기를 지원하며, Android가 이 크기를 사용할 때 성능이 5-10% 향상되고 메모리 사용량은 약 9% 증가함
- 전반적인 운영 체제 성능을 개선하고 기기 제조업체가 이러한 트레이드오프를 선택할 수 있도록 Android 15는 4 KB 또는 16 KB 페이지 크기로 실행 가능함
- 16 KB 페이지 크기를 지원하는 첫 Android 시스템은 몇몇 기기에서 개발자 옵션으로 제공될 예정임
16KB 페이지 크기에 대한 기술적 세부 사항
- 대부분의 CPU에는 메모리 관리 장치(MMU)라는 전용 하드웨어가 있어 프로그램이 사용 중인 주소를 메모리의 물리적 위치로 변환
- 이 변환은 페이지 크기 단위로 수행됨
- 프로그램이 더 많은 메모리가 필요할 때마다 운영 체제가 개입하여 "페이지 테이블" 항목을 채워야 하며, 해당 메모리 조각을 프로세스에 할당
- 페이지 크기가 4배 더 커지면 장부 기록 작업이 4배 줄어듬.
- 따라서 시스템은 비디오를 멋지게 보이게 하고, 게임을 잘 플레이하고, 앱을 매끄럽게 실행하는 데 더 많은 시간을 할애할 수 있으며, 낮은 수준의 운영 체제 문서 작업에는 더 적은 시간이 소요됨
- 페이지 크기는 Application Binary Interface (ABI)가 아님
- 즉, 애플리케이션이 페이지 크기에 구애받지 않도록 수정되면 동일한 애플리케이션 바이너리가 4KB와 16KB 디바이스 모두에서 실행될 수 있음
- Android 15에서는 다양한 페이지 크기에서 실행할 수 있도록 Android를 처음부터 리팩토링하여 페이지 크기에 구애받지 않도록 만듦
주요 OS 변경 사항
- Android 15 기반 장치:
- 컴파일 타임
PAGE_SIZE매크로가 런타임getpagesize(2)로 대체됨 - 모든 OS 바이너리는 16 KB 정렬됨 (서드 파티 애플리케이션/라이브러리는 16KB 정렬되지 않을 수 있음)
- 모든 OS 바이너리는 프로세스에 매핑된 모든 메모리 영역을 읽을 수 있도록 별도의 로드 가능한 세그먼트로 빌드되며, 일부 애플리케이션은 이에 의존함
- 여러 OS 구성 요소가 페이지 크기를 가정하지 않고 더 큰 페이지 크기에 대해 최적화되도록 재작성됨
- 컴파일 타임
파일 시스템
- 성능 좋은 작업을 위해서는 파일 시스템 블록 크기가 페이지 크기와 일치해야 함. EROFS 및 F2FS 파일 시스템과 UFS 스토리지 계층이 16KB 호환됨
- 4KB 시스템에서는 16KB 정렬을 위해 추가된 패딩으로 인해 ELF 실행 파일 크기가 증가하지만 여러 최적화를 통해 이 비용을 회피함
- Sparse 읽기 전용 파일 시스템은 16KB 정렬을 위한 추가 패딩에 대해 생성된 0 페이지가 디스크에 기록되지 않도록 함
- 읽기/쓰기 가능 파일 시스템은 0 페이지를 케이스별로 처리함
메모리 관리
- 리눅스 페이지 캐시가 수정되어 이러한 여분의 패딩 공간에 대해 미리 읽지 않도록 하여 불필요한 메모리 로드를 절약
- 이 페이지는 비어있는 패딩이며 프로그램은 절대 이를 읽지 않음. 정렬 목적으로만 프로그램의 사용 가능한 부분 사이에 있는 공간임
Linux 커널
- 리눅스 커널은 특정 페이지 크기에 깊이 연결되어 있으므로 커널을 빌드할 때 사용할 페이지 크기를 선택해야 하며, 운영 체제의 나머지 부분은 동일하게 유지됨
Android 애플리케이션
- 네이티브 코드 또는 의존성이 있는 모든 애플리케이션은 16KB 페이지 크기 디바이스와 호환되도록 다시 컴파일해야 함
- 대부분의 Android 애플리케이션 및 SDK 내의 네이티브 코드는 4KB 페이지 크기를 염두에 두고 빌드되었기 때문에 16KB로 다시 정렬하여 바이너리가 4KB 및 16KB 디바이스와 모두 호환되도록 해야 함
- 대부분의 애플리케이션 및 SDK에서 이는 2단계 프로세스임:
- 16KB 정렬로 네이티브 코드 재빌드
- 페이지 크기에 대한 하드코딩된 가정이 있는 경우 16KB 디바이스/에뮬레이터에서 테스트 및 수정
16 KB 장치 개발하기
- 현재 생산되는 Android 기기는 16 KB 페이지 크기를 지원하지 않음
- 이 문제를 해결하기 위해 파트너와 협력하여 기존 기기에서 개발자 옵션을 사용할 수 있도록 조치를 취하고 있
- 개발자 옵션으로 16 KB 페이지 크기 지원을 제공할 예정임
- Android Studio에서 16 KB 에뮬레이터 타겟을 사용할 수 있음
16 KB 개발자 옵션
- Android 15에서 16 KB와 4 KB 페이지 크기를 전환할 수 있는 개발자 옵션을 구현함
- Pixel 8 및 Pixel 8 Pro에서 사용 가능하며, 추가 장치에서도 지원 예정임
- 개발자 옵션을 사용하려면 장치를 초기화하고 부트로더를 언락해야 함
x86_64 데스크탑에서 16 KB
- x86_64 에뮬레이터에서 16 KB 페이지 크기를 에뮬레이트할 수 있음
- Android Studio SDK 매니저에서 16 KB 페이지 에뮬레이터를 다운로드하고 실행할 수 있음
미래
- Android 15와 AOSP는 16 KB 페이지를 지원하며, 개발자 옵션으로 구현 가능함
- 애플리케이션 및 SDK 개발자가 이 옵션을 활용하여 더 성능 좋고 효율적인 Android 장치를 준비할 수 있기를 기대함
GN⁺의 의견
- 16KB 페이지 크기로의 전환은 Android 디바이스의 성능과 효율성을 향상시키기 위한 중요한 변화
- 더 큰 페이지 크기를 사용하면 메모리 관리 오버헤드가 감소하고 전반적인 시스템 성능이 향상될 수 있음
- 그러나 이 변화는 특히 네이티브 코드에 의존하는 앱 및 SDK에 대한 호환성 문제를 초래할 수도 있으므로 개발자는 16KB 페이지 크기를 염두에 두고 소프트웨어를 업데이트해야 함
- Google은 16KB 개발자 옵션 및 에뮬레이터 지원을 통해 이 전환을 테스트하고 준비할 수 있는 도구를 개발자에게 제공하고 있음
- 16KB 페이지는 현재 ARM 기반 Android 디바이스에만 적용되지만, 미래에는 다른 하드웨어 플랫폼으로 확장될 가능성이 있음
- 개발자는 앱과 SDK를 16KB 페이지 크기에 맞게 조정하는 것 외에도, 더 큰 페이지 크기가 메모리 사용량에 미치는 영향을 고려하고 필요한 경우 메모리 최적화를 수행해야 함
- 16KB 페이지로의 전환은 Android 생태계 전반에 걸친 협력이 필요한 중요한 노력이지만, 결국 사용자에게 더 나은 성능과 효율성을 제공할 것임