피드로 돌아가기
Building a KVM Virtual Machine in Rust: Memory Setup
Dev.toDev.to
Infrastructure

Rust와 KVM ioctl을 활용한 VM 메모리 구조 설계

Building a KVM Virtual Machine in Rust: Memory Setup

Stjepan2026년 6월 15일6advanced

Context

KVM의 내부 동작 원리를 이해하고 Rust 언어로 가상 머신을 직접 구현하려는 시도임. 기존 QEMU의 복잡한 추상화 계층 대신 Linux 커널 API에 직접 접근하여 최소 단위의 VM 런타임을 구축하는 것이 목표임.

Technical Solution

  • libc 크레이트 활용을 통한 Linux 커널 ioctl 바인딩 직접 구현 및 시스템 레벨 제어권 확보
  • /dev/kvm 장치 오픈 및 KVM_CREATE_VM 호출을 통한 VM 파일 디스크립터 생성
  • mmap 기반의 Host 메모리 할당을 통해 Guest VM이 사용할 물리 주소 공간 확보
  • bindgen을 이용한 C 헤더 파일의 kvm_userspace_memory_region 구조체 자동 생성 및 타입 안전성 확보
  • KVM_SET_USER_MEMORY_REGION 설정을 통해 Host의 가상 주소를 Guest의 물리 주소 0x0 지점에 매핑하는 메모리 백킹 구조 설계
  • QEMU의 PROT_NONE 예약 패턴을 생략한 단순화된 mmap 전략으로 프로토타입 개발 속도 최적화

- 시스템 API 호출 시 bindgen을 활용하여 C 구조체와 Rust 타입 간의 정밀한 매핑 검증 - KVM 기반 VM 설계 시 Host 메모리 할당과 Guest 물리 주소 매핑 간의 일치 여부 확인 - 커널 인터페이스 분석 시 strace를 통한 실제 시스템 콜 시퀀스와 인자 값의 정밀 대조

원문 읽기