[ZNS] QEMU를 활용한 Zoned Namespace 개발 환경 구축
QEMU를 활용한 Zoned Namespace 개발 환경 구축
지난 번에 FEMU를 통해 Zoned Namespace 개발 환경을 구축하는 방법을 (링크)를 통해 알아보았다. 하지만 FEMU는 현재 기준(2021-12-07)으로 적합한 지연 시간 모델이 존재하지 않는 문제가 있다. 이러한 지연 시간은 “FEMU에 직접 지연 시간을 계산하여 삽입하여 에뮬레이션”, “기존 SSD에 디스크 이미지를 생성하여 지연 시간을 에뮬레이션” 하는 두 가지 방법이 존재할 수 있다.
본 문서는 공식 문서에서 발췌하여 제작되었습니다.
QEMU 설치
QEMU 버전 6.0 버전 이후로 ZNS 디스크 에뮬레이션 기능을 포함한다. 따라서 설치를 진행할 때에는 반드시 QEMU 6.0 이후 버전을 설치하도록 한다. QEMU의 설치는 공식 문서를 바탕으로 한다.
cd ~
sudo apt install -y ninja-build pkg-config libglib2.0-dev libpixman-1-dev
wget https://download.qemu.org/qemu-6.2.0.tar.xz
tar xvJf qemu-6.2.0.tar.xz
cd qemu-6.2.0
./configure
make -j$(nproc)
sudo make install
설치가 완료된 이후 qemu-system-x86_64 --version
을 치게되면 아래와 같은 창이 뜨면 정상적으로 설치된 것이다.
만약
qemu-system-x86_64 --version
이 동작하지 않는 경우에는PATH
값에/usr/local/bin
이 존재하는지 확인하도록 한다.
QEMU emulator version 6.2.0
Copyright (c) 2003-2021 Fabrice Bellard and the QEMU Project developers
우분투 설치
ubuntu20.04 서버 버전 이미지를 다운을 받도록 한다.
cd ~
wget https://releases.ubuntu.com/focal/ubuntu-20.04.3-live-server-amd64.iso
이미지 다운이 완료되었으면 이미지를 설치할 디스크를 생성해주도록 한다.
qemu-img create -f qcow2 ubuntu.img 20G
해당 디스크에 운영체제를 설치해주도록 한다.
sudo qemu-system-x86_64 \
-hda ubuntu.img \
-boot d \
-cdrom ubuntu-20.04.3-live-server-amd64.iso \
-m $(expr $(grep MemTotal /proc/meminfo | awk '{print $2}') / $(expr 1024 '*' 1024))G \
-smp $(nproc) \
-cpu host \
--enable-kvm \
-vnc :2
이때, 접속은 VNC Viewer를 통해서 접속이 가능하다. 접속을 할 때에는 현재 QEMU가 실행 중인 호스트의 IP와 5902번 포트를 활용해서 접속한다. 접속 이후 설치 과정은 일반적인 우부투 서버를 설치하는 것과 동일하게 설치를 진행하도록 한다.
설치가 완료되면 다음과 같은 명령을 통해서 QEMU를 실행시켜보도록 한다.
sudo qemu-system-x86_64 \
-hda ubuntu.img \
-m $(expr $(grep MemTotal /proc/meminfo | awk '{print $2}') / $(expr 1024 '*' 1024))G \
-smp $(nproc) \
-cpu host \
--enable-kvm \
-vnc :2
동일하게 VNC로 접근을 해보면 접근이 되는 것을 알 수 있다. 그리고 가상 머신의 커널 버전을 5.10 버전으로 변경하기 위해 5.10 커널을 다운 받는다.
sudo apt update -y && sudo apt upgrade -y
sudo apt install linux-image-5.10.0-1052-oem -y
커널 다운이 완료가 되면 재부팅을 하도록 한다. 현재는 sudo fdisk -l
을 하면 특별한 디스크가 뜨지 않는 것을 확인할 수 있다. 따라서 이제 가상 ZNS SSD를 만들어주어야 한다.
ZNS SSD 에뮬레이션
ZNS SSD 에뮬레이션은 공식 문서를 확인하도록 한다.
먼저, dd
명령어를 활용해서 ZNS SSD를 에뮬레이션 하기 위한 디스크 이미지를 생성한다.
dd if=/dev/zero of=zns.raw bs=1M count=8192 # 8GiB 디스크 생성
방금 우분투 실행 명령어에서 ZNS SSD 에뮬레이션 디스크 부분을 아래와 -drive
와 -device
옵션과 함께 같이 추가해주도록 한다. 또한, SSH 접근을 용이하기 위해서 22번 포트를 원하는 포트로 포워딩해준다.
ZNS_SSD_IMG=zns.raw
SSH_PORT=2222
sudo qemu-system-x86_64 \
-hda ubuntu.img \
-m $(expr $(grep MemTotal /proc/meminfo | awk '{print $2}') / $(expr 1024 '*' 1024))G \
-smp $(nproc) \
-cpu host \
--enable-kvm \
-device nvme,id=nvme0,serial=deadbeef,zoned.zasl=5 \
-drive file=${ZNS_SSD_IMG},id=nvmezns0,format=raw,if=none \
-device nvme-ns,drive=nvmezns0,bus=nvme0,nsid=1,logical_block_size=4096,physical_block_size=4096,zoned=true,zoned.zone_size=64M,zoned.zone_capacity=62M,zoned.max_open=16,zoned.max_active=32,uuid=5e40ec5f-eeb6-4317-bc5e-c919796a5f79 \
-net user,hostfwd=tcp::${SSH_PORT}-:22 \
-net nic \
-vnc :2
가상 머신을 킨 후에 다음과 같은 명령어를 통해 정상적으로 디스크가 설정되었고, ZNS SSD가 정상 동작하는지 확인한다.
sudo apt install nvme-cli
sudo nvme list
sudo blkzone report /dev/nvme0n1 | less
결과적으로, 우리는 ZNS SSD를 성공적으로 에뮬레이션 할 수 있다.