개요
Qemu는 오픈소스기반의 Hardware Virtualization 가상머신이다. Qemu는 가상머신을 구현하기 위해서 많이 사용되며, 대표적인 ARM, X86과 같은 시스템을 포함하여 대다수의 머신을 가상화 할 수 있다.
- Multiple host, Multiple target을 지원한다.
- Full Virtualization, Process Virtualization을 지원한다.
- KVM과 함꼐 사용하여 최대한의 성능을 끌어 낼 수 있다.
- Just in time code compilation기법을 사용하여 Bochs와 비교하여 불 안정하지만 더욱 빠르다.
- GDB기능을 제공한다.
사용법
qemu-system-i386 \ -accel tcg,thread=single \ -cpu core2duo \ -m 128 \ -no-reboot \ -drive format=raw,media=cdrom,file=myos.iso \ -serial stdio \ -smp 1 \ -usb \ -vga std
- Accel: 가속화 기법
- cpu: CPU모델명
- M: 메모리 크기
- drive: 어떤 드라이브를 사용할지 (device 로 디바이스를 정할 수도 있음)
- smp: CPU코어 개수
우분투 실행 bash script
#/bin/bash INSTALL_PATH=$PWD/"ubuntu-kvm" UBUNTU_IMG_URL="https://releases.ubuntu.com/20.04.2/ubuntu-20.04.2-live-server-amd64.iso?_ga=2.267594445.2145028703.1615186104-1743255792.1615186104" QEMU_ARGS="-enable-kvm -vnc localhost:1 -m 64G -smp 16 -drive format=raw,file=$INSTALL_PATH/disk.img,if=virtio,cache=none -drive format=raw,file=./disk.img,if=virtio,cache=none -net nic -net user,hostfwd=tcp::2222-:22" mkdir -p $INSTALL_PATH if ! test -f $INSTALL_PATH/"ubuntu.img"; then wget -O $INSTALL_PATH/ubuntu.img $UBUNTU_IMG_URL -P $INSTALL_PATH fi; if ! test -f $INSTALL_PATH/"disk.img"; then sudo apt install qemu-utils qemu-img create -f raw -o size=30G $INSTALL_PATH/disk.img QEMU_ARGS+=" -cdrom $INSTALL_PATH/ubuntu.img" fi; echo $QEMU_ARGS qemu-system-x86_64 $QEMU_ARGS
캐쉬 모드
시스템 분석을 위해서 qemu가상머신을 돌리는 경우, cache모드에 의하여 가상머신의 I/O속도가 달라질 수 있다. 다음의 캐쉬 모드는 QEMU가 어떻게 physical disk와 연동되는지를 결정한다. Default는 writethrough를 사용하게 된다. RamDisk는 O_DIRECT모드를 허용하지 않음으로, 다음 중 O_DIRECT가 있는 경우는 사용할 수 없다.
- cache=writethrough: O_DYNSC
- cache=writeback: nor O_DYNSC nor O_DIRECT
- cache=none: O_DIRECT
- cache=unsafe: nor O_DYNSC nor O_DIRECT ignore flush
- cache=directsync: both O_DYNSC, O_DIRECT
디버깅
- -s -S: -s는 GDB에 Attach 함을 의미하고, -S는 GDB시작을 우선 halt함을 의미한다. 즉 -s -S는 GDB가 target remote localhost:1234와 같이 Attach되기 전까지 기다리라는 것을 의미한다.
- -d: d option은 원래 GDB 디버깅 모드이지만, 이 모드에서 cpu_reset혹은 interrupt정보와 같은 커널의 활동내역을 얻을 수 있다.
보다 자세한 내용은 https://wiki.osdev.org/Qemu 참고.