CoW 메모리 포킹을 활용한 밀리초 미만 VM 샌드박스

새로운 VM을 부팅할 필요가 없다면 얼마나 빠르게 격리된 코드 샌드박스를 시작할 수 있을지 궁금했습니다. 그래서 실행마다 새로운 마이크로VM을 실행하는 대신, Python과 numpy가 이미 로드된 상태로 Firecracker를 한 번 부팅한 후 전체 VM 상태를 스냅샷으로 저장했습니다. 그 후 모든 실행은 스냅샷 메모리의 `MAP_PRIVATE` 매핑을 기반으로 하는 새로운 KVM VM을 생성하므로, Linux가 자동으로 copy-on-write 페이지를 제공합니다. 이는 각 샌드박스가 실제 VM 내에서 이미 실행 중인 Python 프로세스에서 시작하여 코드를 실행하고 종료한다는 의미입니다. 이들은 컨테이너가 아닌 실제 KVM VM입니다: 별도의 게스트 커널, 별도의 게스트 메모리, 별도의 페이지 테이블을 갖습니다. VM이 메모리에 쓰기를 수행하면 해당 페이지의 사본을 개인적으로 얻게 됩니다. 어려운 부분은 CoW 자체가 아니었습니다. 어려운 부분은 스냅샷된 VM을 올바르게 재개하는 것이었습니다. Rust, Apache 2.0.

  • SaaS
  • 오픈 소스
  • 웹 앱

AI 요약

ZeroBoot는 Python과 라이브러리가 로드된 사전 부팅된 Firecracker 마이크로VM을 스냅샷하여 밀리초 미만의 VM 샌드박스를 생성하는 시스템입니다. 각각의 새로운 실행은 쓰기 시 복사 메모리 매핑을 사용하여 이 스냅샷을 포크하여, 새로운 VM 부팅의 오버헤드 없이 완전한 KVM 격리를 제공합니다.

추천 대상

빠른 콜드 스타트가 필요한 서버리스/함수형 서비스 플랫폼, 신뢰할 수 없는 사용자 코드를 위한 고성능 코드 샌드박싱, 빠르고 격리된 Python 환경이 필요한 데이터 과학 또는 ML 워크로드

중요한 이유

사전 초기화된 스냅샷의 메모리 포킹을 통해 부팅 과정을 제거함으로써 완전한 하드웨어 수준의 격리와 함께 거의 즉각적인 VM 시작을 제공합니다.

주요 기능

  • 쓰기 시 복사 메모리 포킹을 사용하여 1밀리초 미만으로 VM 샌드박스 시작
  • Python과 numpy가 미리 로드된 상태로 Firecracker를 한 번 부팅한 후 전체 VM 상태 스냅샷 생성
  • 자동 CoW 페이지를 위해 스냅샷 메모리의 MAP_PRIVATE 매핑으로 지원되는 새로운 KVM VM 생성
  • 별도의 게스트 커널, 메모리 및 페이지 테이블을 갖춘 실제 KVM VM 격리 제공

사용 사례

  • 데이터 과학 플랫폼은 이를 사용하여 다양한 고객을 위해 수천 개의 격리된 Python 데이터 변환을 실행합니다. 각 사용자의 스크립트는 1밀리초 미만으로 시작하는 새로운 VM에서 실행되어 작업 간 완전한 격리를 보장하면서 numpy와 같은 라이브러리가 이미 로드된 예열된 환경의 성능을 유지합니다.
  • 서버리스 컴퓨팅 제공업체는 이 기술을 채택하여 함수 실행 환경을 생성합니다. 함수가 호출되면 런타임이 포함된 스냅샷에서 새로운 마이크로VM이 분기되어 콜드 스타트 지연 시간을 수백 밀리초에서 밀리초 미만으로 크게 줄여 지연 시간에 민감한 애플리케이션의 사용자 경험을 개선합니다.
  • 보안 연구 회사는 이러한 샌드박스를 사용하여 악성코드 분석을 위해 신뢰할 수 없는 코드 샘플을 안전하게 실행합니다. 각 샘플은 거의 즉시 시작되는 완전히 격리된 VM에서 실행되어 연구원들이 수천 가지 변종을 빠르게 테스트하면서 악성 활동을 분기된 환경 내에 격리할 수 있습니다.