Qemu

Ahn9807 (토론 | 기여)님의 2023년 2월 11일 (토) 02:07 판 (새 문서: 분류: 가상화 분류: 오픈소스 프로젝트 == 개요 == Qemu는 오픈소스기반의 Hardware Virtualization 가상머신이다. Qemu는 가상머신을 구현하기 위해서 많이 사용되며, 대표적인 ARM, X86과 같은 시스템을 포함하여 대다수의 머신을 가상화 할 수 있다. * Multiple host, Multiple target을 지원한다. * Full Virtualization, Process Virtualization을 지원한다. * KVM과 함꼐 사용하여...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)


개요

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 참고.

참고

  1. https://documentation.suse.com/sles/11-SP4/html/SLES-kvm4zseries/cha-qemu-cachemodes.html
  2. https://wiki.osdev.org/Qemu