피드로 돌아가기
Dev.toInfrastructure
원문 읽기
20만 라인 C 코드를 3만 라인 Rust로 대체한 Secure Hypervisor 구현기
Two Hypervisors, One SoC: Replacing Hafnium with 30K Lines of Rust
AI 요약
Context
Google의 reference SPMC인 Hafnium은 20만 라인 이상의 C 언어로 작성되어 복잡도가 높음. 보안 파티션 관리와 다중 하이퍼바이저 공존 환경에서 메모리 안전성 및 상태 관리의 어려움 존재.
Technical Solution
no_stdRust를 사용하여 런타임과 할당자 없이 3만 라인 규모의 경량 SPMC 설계- S-EL2 단계에서 Stage-1 identity map을 활성화하고 Normal world DRAM을 NS=1로 표시하여 올바른 메모리 에일리어스 접근 보장
- TF-A의 SPMD와 협력하여 CPU별 독립 스택(3 x 32KB) 할당 및 FFA_SECONDARY_EP_REGISTER 기반의 멀티코어 이벤트 루프 구현
- L1 캐시 불일치로 인한 데이터 오염 방지를 위해 DSB SY 배리어 적용 및 교차 세계 버퍼 데이터를 로컬 스택으로 복사하는 전략 채택
- Rust의
enum을 활용한 상태 머신 설계로 Reset, Idle, Running 등 Secure Partition의 생명주기 전이 과정에서 컴파일 타임 타입 안정성 확보 - FF-A v1.1 프로토콜을 통해 Linux(NS-EL1) → pKVM(NS-EL2) → TF-A(EL3) → SPMC(S-EL2)로 이어지는 4단계 권한 레벨 통신 경로 구축
Impact
- 소스 코드 규모: 20만 라인(C) → 약 3만 라인(Rust/Assembly)으로 대폭 축소
- 바이너리 크기: Release 빌드 기준 230KB
- 테스트 통과율: BL33 통합 테스트 20/20, pKVM E2E 테스트 35/35 전원 통과
- 개발 기간: 1인 개발 기준 약 10주 소요
Key Takeaway
엄격한 타입 시스템과 상태 머신 설계를 통해 복잡한 저수준 권한 전이 로직의 런타임 오류를 컴파일 타임으로 전이시켜 시스템 신뢰성을 극대화함.
실천 포인트
임베디드/커널 레벨의 복잡한 상태 전이 구현 시 Rust의 Enum과 Pattern Matching을 도입하여 불완전한 상태 전이 케이스를 원천 차단할 것