FEMU安装与使用
FEMU官方文档的配置教程中有一些地方比较含糊,对新手不太友好,学习时踩了一些坑,在这里记录一下学习与解决问题的过程,作为FEMU官方文档的补充。
FEMU官方github链接:FEMU: Accurate, Scalable and Extensible NVMe SSD Emulator (FAST’18)
FEMU是什么
FEMU是一个虚拟机,就像VMWare一样。FEMU是基于QEMU做出来的,因此可知QEMU也是一个虚拟机。我个人的理解是:QEMU用来模拟一整个计算机,而FEMU在这个被模拟出来的计算机中模拟SSD。(请指正)。当前有许多的SSD模拟器,例如,DiskSim,SSDsim,FlashSim等。与其他SSD模拟器相比,FEMU更加的准确,可扩展性更好。
FEMU的安装
如前所述,FEMU是基于QEMU做出来的。因此,想要使用FEMU就需要我们的系统中已经安装了构建QEMU所需要的所有库。
QEMU以及依赖库的安装可以参考:编译安装QEMU及卸载
在开始安装femu之前需要说明一点:在QEMU中安装的系统我们称为Guest OS(安装什么系统根据你自己的需求来,一般安装ubuntu),因为这个系统是虚拟出来的。而我们的主机叫做host,是真实存在的。最好不要在host上装虚拟机A,然后又在虚拟机A中装QEMU和FEMU(例如,有可能会有同学的主机是windows系统,然后VMWare装了个ubuntu18.04,然后又在这个ubuntu18.04里下载安装了QEMU,然后QEMU里又安装别的系统),因为这样会使得QEMU和FEMU的性能大大下降。
我的环境是这样的:host本身是Ubuntu18.04.6,QEMU里装的Guest OS也是Ubuntu18.04.6。
确保QEMU所需要的库都安装好了之后就可以开始安装FEMU了。
// 从官方github上下载femu。如果下载失败,可将https改为http
git clone https://github.com/ucare-uchicago/femu.git
下载完毕后我们就可以看到一个叫做femu的文件夹,进入这个文件夹,然后创建build-femu文件夹,然后进入build-femu文件夹。
cd femu
mkdir build-femu
cd build-femu
// Copy femu script (我也不知道为什么要做这一步)
cp ../femu-scripts/femu-copy-scripts.sh .
./femu-copy-scripts.sh .
// 仅支持Debian/Ubuntu
sudo ./pkgdep.sh
然后编译并安装FEMU
./femu-compile.sh
一直到这里,官方文档都还比较清晰,照着做不会有问题。接下来,需要准备一个虚拟机镜像(VM image)。可以直接使用官方已经制作好的(github readme中有下载链接),也可以自己制作一个。从自己制作image这一部分开始,官方教程就有一些地方会产生疑惑。首先我们还是按照官方给的教程敲命令行:
// 下载ubuntu的镜像文件到home/images/这个文件夹里,一定是home文件夹下创建images!而不是home/xxx/images
$ mkdir -p ~/images/
$ cd ~/images
//这个地方需要注意,wget后面的链接是你想要的系统镜像文件下载链接,如果你想在QEMU里安装的guest os是ubuntu20.04.3,那么你的指令应该是wget http://releases.ubuntu.com/20.04/ubuntu-20.04.3-live-server-amd64.iso
$ wget http://releases.ubuntu.com/18.04/ubuntu-18.04.6-live-server-amd64.iso
$ sudo apt-get install qemu-system-x86
// 创建一个QCOW2磁盘镜像 命名为femu.qcow2,大小为80G
$ qemu-img create -f qcow2 femu.qcow2 80G
//将 guest OS安装到 femu.qcow2 (这里会弹出QEMU的图形化界面,所以你需要有GUI环境)
$ sudo qemu-system-x86_64 -cdrom ubuntu-18.04.6-live-server-amd64.iso -hda femu.qcow2 -boot d -net nic -net user -m 8192 -localtime -smp 8 -cpu host -enable-kvm
接着会弹出QEMU的图形化界面,有非常多选项可以自己配置,如果是新手的话,只需要设置Guest OS的用户名和密码,其余可以直接保持默认(一路按enter键,直到安装)。
待安装完毕后,不要点QEMU图形界面中最底下的reboot,而是要直接把QEMU的图形化界面给关掉。打开一个新终端窗口,在进入前面创建的images文件夹,输入如下命令进入到我们安装的Guest OS中:
$ qemu-system-x86_64 -hda femu.qcow2 -net nic -net user -m 8192 -localtime -smp 8 -cpu host -enable-kvm
进入之后编辑grub
sudo vim /etc/default/grub
设置grub的选项
GRUB_CMDLINE_LINUX="ip=dhcp console=ttyS0,115200 console=tty console=ttyS0"
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1"
设置完之后如下图所示。然后保存并退出。
接着在Guest OS中更新grub,更新完之后就可以把虚拟机关掉了。
$ sudo update-grub
$ sudo shutdown -h now
此后所有的操作都是在host中的命令行里做。接下来就是官方文档中没有提到的一步:进入到home/femu/build-femu文件夹中,我们可以看到有许多文件,其中的run-blackbox.sh, run-whitebox.sh等文件就是用来模拟SSD的,这些文件里保存了FEMU模拟的SSD的全部信息,我们需要将这些文件中的信息做一些修改,否则是无法成功使用FEMU的!
我以run-blackbox.sh为例进行修改,需要修改的地方我在下图中用红框标出,图中是已经修改过的。与此同时,我们可以从倒数第五行的devsz_mb=4096
看出,我们是用FEMU模拟了一个4G的SSD
修改完后保存,此时FEMU的安装就正真完毕了。接下来可以用FEMU模拟SSD了
FEMU模拟SSD
FEMU可以模拟普通的SSD,OCSSD,以及无SSD的场景。
模拟普通SSD时,SSD所有的参数都是被写死的。想要修改成自己所需要的SSD的话,我们需要修改对应的ftl.c文件,然后重新编译FEMU,这个具体的以后再写。先看看怎么使用。
首先还是进入到home/femu/build-femu文件夹中,然后通过下面的命令将FEMU模拟成普通SSD,也就是黑盒SSD(blackbox)
./run-blackbox.sh
按下回车键后会出现很多信息,不用管,直到命令行提示你login,你就输入自己设置的账号和密码。然后你就使用着一个有QEMU模拟出来的计算机,且里面有一个由FEMU模拟出来的SSD。
我们可以用lsblk
命令查看一下是不是真的有一个4G的SSD(前面说过我们创建的是4G的)。如图所示,系统中确实有一个4G的SSD。