한 줄 요약
리눅스 커널의 virtio 문서와 AWS 파이어크래커의 설계 문서를 묶은 1차 자료다. 반가상화 I/O가 실제로 어떻게 굴러가는지와, 마이크로VM이 VM과 컨테이너 사이를 어떻게 메우는지를 각각 원문으로 보여 준다.
핵심 내용 — virtio
- 정의. 서로 다른 종류의 드라이버와 장치가 통신하는 프로토콜을 정의한 공개 표준이다. 원래는 하이퍼바이저가 구현하는 반가상 장치의 표준으로 나왔지만, 규격을 지키는 장치라면 실물이든 에뮬레이트된 것이든 쓸 수 있다.
- virtqueue가 핵심이다. 게스트 안 드라이버와 하이퍼바이저 안 장치는 공유 메모리로 통신한다. 문서는 바로 이 점이 virtio 장치를 효율적으로 만든다고 못 박는다.
- 링 버퍼 구조. virtqueue는 버퍼 디스크립터의 링 버퍼다. 디스크립터
struct vring_desc는 16바이트이며 주소·길이·플래그·다음 인덱스를 담고,next로 사슬처럼 이어진다. - 버퍼의 주인은 게스트다. 디스크립터가 가리키는 버퍼는 모두 게스트가 할당하고, 호스트는 읽기나 쓰기 둘 중 하나로만 쓴다.
- 전송 방식은 장치와 직교한다. PCI·MMIO·CCW 가운데 무엇으로 노출할지는 장치 자체와 별개로 정해진다.
- 완료 통지. 장치가 버퍼를 다 쓰면 하이퍼바이저가 인터럽트를 걸고, 그것이 virtqueue에 등록된 콜백을 부른다.
핵심 내용 — 파이어크래커
- 무엇인가. 경량 마이크로VM을 띄우는 가상화 기술이다. 전통적 VM의 보안·워크로드 격리에 컨테이너의 속도·민첩성·자원 효율을 결합하는 것을 목표로 삼는다.
- 프로세스 하나에 마이크로VM 하나. 각 파이어크래커 프로세스는 마이크로VM을 정확히 하나만 품는다.
- 스레드 구성. API 스레드(제어 평면, VM의 빠른 경로에 절대 끼지 않음), VMM 스레드(머신 모델·최소 레거시 장치·MMDS·VirtIO Net/Block/Vsock 에뮬레이션), 그리고 게스트 코어마다 하나씩인 vCPU 스레드.
- vCPU 스레드는 KVM으로 만든다. 각 vCPU 스레드는
KVM_RUN메인 루프를 돈다 — 파이어크래커는 KVM 위에 올라탄 유저스페이스 VMM이다. - 샌드박싱 두 겹. 첫 겹은 KVM과 가상화 경계이고, 둘째 겹은 프로세스 수준 제약이다. seccomp 필터로 시스템 콜을 묶고, cgroups·네임스페이스로 자원을 가르며, jailer가 권한을 떨군 뒤 파이어크래커 바이너리로
exec()한다. - 위협 모델. 모든 vCPU 스레드는 시작된 순간부터 악성 코드를 실행 중이라고 간주한다. 신뢰 영역을 겹겹이 쌓아 가장 안 믿는 쪽(게스트 vCPU)에서 가장 믿는 쪽(호스트)으로 나아가게 설계한다.
주요 주장 / 데이터
- 생성 속도. 최소 리눅스 커널·싱글코어 CPU·128MiB RAM 구성에서 호스트 코어당 초당 마이크로VM 5개의 지속 변경률을 지원한다. 물리 코어 36개짜리 호스트라면 초당 180개를 만들 수 있다는 예를 든다.
- 규모의 상한. vCPU는 최대 32개까지 고르고, 호스트 CPU와 메모리를 오버서브스크립션할 수 있다. 동시에 돌릴 수 있는 마이크로VM 수는 하드웨어 자원만이 제한한다.
- 레이트 리미터. 토큰 버킷 두 개(초당 작업 수, 대역폭)로 볼륨과 네트워크 인터페이스마다 제한을 건다. 버킷 크기·I/O 비용·충전 속도·최대 버스트·초기값을 정할 수 있다.
- 일시 정지의 의미. API로 마이크로VM을 멈추면 VMM 스레드가 이벤트 루프 폴링을 중단한다. 멈춘 마이크로VM은 vCPU도 장치 모델도 돌지 않는다.
- 트래픽 필터링은 하지 않는다. 게스트에서 나가는 모든 트래픽은 신뢰하지 않는 것으로 보고 호스트 수준에서 걸러야 한다고 명시한다.
- virtio 장치 식별. virtio-pci 장치는 벤더 ID
0x1af4(Red Hat, Inc.)로 PCI 버스에 나타난다. 콘솔 장치의 device id는0x1003이며, Qumranet이0x1000~0x10FF범위를 기증했다고 주석에 적혀 있다. - 클록소스. x86_64 게스트에는 kvm-clock과 tsc를, aarch64에는 arch_sys_counter를 노출한다. 리눅스 5.10 이상 게스트는 안정적이면 tsc를 기본으로 고른다.
외부 검증 (2026-09-22, 웹)
- "밀리초 부팅"이라는 표현은 이 문서에 없다. #36 오라클 가상화 해설이 쓰는 표현이며, 1차 자료가 말하는 것은 부팅 시간이 아니라 생성률(호스트 코어당 초당 5개)이다. 위키에는 후자를 기준으로 적고 전자는 벤더 개괄로 구분해 표시했다.
- 파이어크래커 문서 안의 두 그림(호스트 통합도·위협 격리도)은 이미지 파일이라 텍스트로 수집되지 않았다. 그림이 전하는 내용은 위키에 옮기지 않았다.
출처 정보
- URL: https://docs.kernel.org/driver-api/virtio/virtio.html · https://github.com/firecracker-microvm/firecracker/blob/main/docs/design.md
- 저자/발행처: 리눅스 커널 개발 커뮤니티 / Firecracker 프로젝트 (AWS, Apache-2.0)
- 수집일: 2026-09-22
- 범위: virtio 문서 전문과 파이어크래커
design.md전문. 파이어크래커의 다른 설계 문서(스냅샷·seccomp 상세 등)는 링크만 있고 포함되지 않았다.