Google의 증분 파일 시스템
Google은 완전한 번들이 로드되기 전에 바이너리를 실행할 수 있는 새로운 종류의 파일 시스템을 개발하고 있습니다. Android 앱 개발을 예로 들면 현재 전체 바이너리가 디버깅을 위해 에뮬레이터나 실제 테스트 장치로 전송될 때까지 기다려야 합니다. 증분 파일 시스템은 전체 패키지가 전송되기 전에 바이너리 실행을 허용함으로써 이 지연을 극적으로 단축합니다. 이것은 엄청나게 복잡하게 들리지만 이것이 바로 Android 12 이상에서 기본 기능이 될 가능성이 가장 높은 기능을 더 잘 이해하기 위해 여전히 살펴볼 수 있습니다.
"incfs"라는 가상 파일 시스템
첫 번째 반복에서 Play 스토어에서 로드된 APK 및 AAB 전용으로 사용되는 Google의 가상 파일 시스템 솔루션은 실제 파일 시스템 위에 있는 레이어입니다. 아키텍처를 더 잘 설명하기 위해 Google에서 기술 토론을 위해 만든 슬라이드를 사용하고 있습니다. 이 페이지 끝에 있는 부록에서 링크를 찾을 수 있습니다.
주제로 돌아가서 Google의 Incremental File System은 생성된 엔티티가 실제 파일 시스템의 파일을 직접 참조하는 캐시로 생각할 수 있습니다. 코드 자체는 커널 모듈로 운영 체제에 깊이 내장되어 있습니다. 이는 전체 아키텍처에서 낮은 수준의 배치로 인해 논리적으로 보입니다.
가상 파일 시스템의 장점
이러한 가상 FS의 장점은 실제 파일 시스템의 한계에 구속되지 않는다는 것입니다. 여기서 프로그램의 읽기 및 후속 실행은 일반적으로 첫 번째 바이트에서 마지막 바이트까지 전체 번들을 사용할 수 있는 경우에만 발생할 수 있습니다. "증분 파일 시스템"을 사용하면 이 제한이 기술적으로 해결됩니다. 그러나 이러한 강력한 기능에는 고려해야 할 복잡한 측면이 많이 있습니다.
Google 엔지니어의 말을 들어보면 쓰기 작업을 올바르게 처리하는 것이 큰 과제입니다. 가상 파일 시스템은 읽기 보류와 관련하여 자체 상태를 가지고 있지만 여전히 로드된 파일의 데이터 무결성을 유지해야 합니다.
이 문제는 "incfs"에서 사용자 정의 색인을 생성하여 해결됩니다. 각 실제 파일은 원본 파일의 이름이 변경된 경우에도 가상 파일 시스템의 엔터티와 직접적으로 연관됩니다.
"ioctl"이라는 또 다른 약어
이 약어는 "입력/출력 제어"를 나타내며 Google의 증분 파일 시스템에서 이러한 색인 파일을 생성합니다. "ioctl"은 운영 체제에서 유래했으며 이에 대한 기술적 설명은 이 기사의 범위를 벗어납니다. 더 읽고 싶다면 부록에도 링크가 있습니다.
또한 매우 흥미롭습니다. "incfs"에는 로깅 메커니즘이 내장되어 있습니다. 이 기능은 추가 향상을 위해 구현의 실제 성능을 결정하는 데 사용됩니다.
실용적인 사용법
이 기능의 시작은 일부 Google 엔지니어가 Linux 커널에 대한 변경 사항을 커밋하기 시작한 2019년 5월이었습니다. 거기에 배치하면 AOSP도 Linux 커널을 기반으로 구축되기 때문에 Android의 오픈 소스 부분이자 이 운영 체제의 기본 기반인 AOSP(Android 오픈 소스 프로젝트)에서 간단히 사용할 수 있습니다.
FUSE 또는 OverlayFS와 같이 파일 시스템을 향상시키는 유사한 접근 방식이 이미 만들어졌기 때문에 Linux 기여자들은 그다지 만족하지 않았습니다. 그러나 Google의 관점에서 볼 때 이러한 구현은 저가형 Android 기기에서 거의 성능을 발휘하지 못했습니다. 이것은 증분 파일 시스템의 개발로 이어졌습니다.
첫 번째 반복의 경우 Android 12부터 Play 스토어에서 다운로드한 게임에 사용되어 실제로 게임을 실행하는 데 걸리는 시간을 단축합니다. 이 정말 훌륭한 기능은 증분 파일 시스템을 전제로 하지만 Google에 따르면 개발자가 변경하지 않고 해당 게임을 조기에 시작하는 방법을 결정하기 위해 Android에 내장된 일부 논리도 있습니다.