ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • QEMU를 이용해 커널 이미지 바꿔서 부팅해보기
    개발/가상화 2018. 12. 20. 22:20

    전가상화를 지원하는 QEMU는 게스트 커널을 수정하지 않고 띄울수 있다는 장점이 있지만 virtio 같은 최적화 옵션을 사용하려면 커널의 일부 수정이 필요하다. 기존에 게스트 이미지에 내장된 커널을 수정하는 방법으로 가장 쉽게 떠올릴 수 있는 것은 게스트를 띄운 다음 이 안에서 커널 코드를 수정하고 빌드하는 것인데 답답한 게스트의 성능때문에 오래 걸리고 답답하다.


    QEMU에서는 이런 점을 고려해서 파라미터를 이용해 사용할 커널 이미지를 지정할 수 있도록 만들었다. 개발자는 호스트 PC 환경에서 게스트에서 사용할 커널 이미지를 빌드한 후 스크립트에 -kernel 파라미터로 지정하면 된다. 


    #!/bin/bash
    DISK_PATH=.
    
    qemu-system-x86_64 \
            -cpu host \
            -smp 8 \
            -enable-kvm -m 2048 \
            -kernel ./bzImage \
            -append "root=/dev/vda1 console=ttyS0" \
            -drive file=${DISK_PATH}/ubuntu.qcow2,cache=none,if=virtio \
            -display gtk \


    위 스크립트에서 -append라는 옵션이 보이는데 이건 커널의 커맨드라인(cmdline)으로 들어갈 스트링을 지정할 수 있는 파라미터다. 새로 빌드한 커널에는 CONFIG_VIRTIO_BLK 옵션을 넣었기 때문에 커널에서 마운트할 디바이스의 이름(/dev/vda1)를 이곳에 기입했고 console로 시리얼 값을 보기 위해 ttyS0 옵션을 넣었다. 이게 없으면 따로 커널 코드에 넣지 않는 이상 마운트하다가 죽는다.


    위의 올린 스크립트를 이용해 실행해보니 부팅이 정상적으로 된다. VIRTIO_BLK 옵션이 들어가서 그런지 예전보다 부팅이 조금 빨라진 것 같았다. 그래도 커널이 정상적으로 바뀌었는지 'uname -r' 명령어로 확인해봤다. Makefile에 넣은 EXTRAVERSION 값이 내 아이디로 들어간 것으로 보아 커널이 바뀐 것을 확인할 수 있었다.




    '개발 > 가상화' 카테고리의 다른 글

    Virtio Block 성능 세부 분석  (0) 2019.05.20
    Virtio Block 성능 벤치마크  (0) 2018.12.23
    kvm ioeventfd  (0) 2018.08.11
    kvm irqfd  (1) 2018.08.11
    vhost  (0) 2018.07.08

    댓글

Designed by Tistory.