使用Femu搭建ZNS
Femu
Femu是一款基于qemu设计的SSD模拟器,可以模拟多种SSD模型,包括传统,OCSSD,ZNS SSD,以及noSSD,详情见 Github,本文不做过多介绍。
编译安装运行
Femu的编译安装过程在 Gihub 的 README 中有详细介绍,并且大部分工作都通过脚本集成好了,作为用户我们只需要简单执行几个shell脚本即可完成编译。
运行模拟器时,先修改run-zns.sh
中的路径,然后直接执行 ./run-zns.sh
即可
注意事项:
qemu运行之前需要制作一个虚拟机镜像,这里存在两钟方式:
- 直接使用GitHub中提供的镜像(Ubuntu20, kernel 5.4)
- 另外一种是自行制作一个虚拟机镜像,方法如下:
# 1. 创建格式为qcow2的80G镜像空间:
qemu-system-x86_64 create -f qcow2 ubuntu-test 80G
# 2. 安装iso镜像:
qemu-system-x86_64 -boot d -cdrom ubuntu-xx.iso -hda ubuntu-test -m 1024
# 3. 修改run-zns.sh中的镜像路径并运行
./run-zns.sh
这里我制作镜像的过程可能不太正确,导致在run的时候一直卡住,有知道问题出在哪的大佬恳请指正。所以我这里推荐直接使用提供的虚拟机镜像。
创建host和guest共享目录
创建共享目录的方法有很多,这里使用9p virtio
实现共享目录·。
具体参见 https://blog.csdn.net/gatieme/article/details/82912921
替换内核
做内核开发时,需要自行编译内核,可以在Qemu内部直接编译内核源码,但是效率太低,我在服务器上运行也是近乎崩溃,这里推荐创建共享目录,将源码放在共享目录
- 在host端执行
make menuconfig
和make -j32
- 在guest端执行
make install
存在的问题
成功启动Femu后,可能会不断弹出类似下面的信息
...
CH 0.000000 112800814121673
CH 0.000000 112800914117364
CH 0.000000 112801014120556
CH 0.000000 112801114123267
CH 0.000000 112801214122919
...
我不知道这些东西是什么,不断弹出的信息使终端无法工作,我通过ssh在另外的终端登入该虚拟机。
- 首先,看下run-zns.sh中启动虚拟机的参数:
-net user,hostfwd=tcp:127.0.0.1:5900-:22 \
-net nic,model=virtio \
该选项可以把虚拟机端口guest_port映射到主机端口host_port上,从而实现外部对虚拟机的访问。
- 然后,在host查看端口:
netstat -anp | grep 5900
- ssh 访问qemu
ssh -p 5900 root@127.0.01