基于 ZNS 模式搭建并运行 FEMU

准备工具:
Visual Studio CodeMobaXterm,远程连接服务器。
linux-5.10.tar.gz,供编译内核使用。

使用 VS Code 远程连接服务器

  1. 下载 Remote - SSH 扩展
    成功后,窗口左侧就会出现远程资源管理器。
    在这里插入图片描述
  2. 修改 config 文件
    点击远程资源管理器的小齿轮,弹出窗口点击 C:\Users\XXX.ssh\config 文件修改内容。在这里插入图片描述
Host 填名称
      HostName 填服务器IP
      User 填登陆用户名
      ForwardAgent yes
  1. 连接 Connect Host

下载并编译 FEMU

这一部分在 FEMU 的官方 GitHub 网址上面也有详细介绍,具体可查看: FEMU

  1. 安装依赖项
  git clone https://github.com/ucare-uchicago/femu.git
  cd femu
  mkdir build-femu
  # Switch to the FEMU building directory
  cd build-femu
  # Copy femu script
  cp ../femu-scripts/femu-copy-scripts.sh .
  ./femu-copy-scripts.sh .
  # only Debian/Ubuntu based distributions supported
  sudo ./pkgdep.sh
  1. 编译并安装 FEMU
  ./femu-compile.sh
  1. 准备 FEMU 虚拟机镜像
  cd ~
  mkdir images
  cd images
  wget http://people.cs.uchicago.edu/~huaicheng/femu/femu-vm.tar.xz
  tar xJvf femu-vm.tar.xz

这些步骤做完以后,在当前文件夹下面将会得到两个文件: "u20s.qcow2 " 和 "u20s.md5sum "

可以通过下面的语句验证 VM 镜像的完整性

md5sum u20s.qcow2 > tmp.md5sum
diff tmp.md5sum u20s.md5sum

如果 diff 显示两个文件不同,则表示 VM 镜像已损坏,需要重做上述步骤。

在与其他人共用服务器的时候,最好将自己使用的镜像改一个独有的名称,避免出现意外。改完名称运行 FEMU 时,记得同时修改 run-xxx.sh 脚本里面的镜像名称。

运行 FEMU

开启虚拟机:

./run-zns.sh

成功运行后的界面:

在这里插入图片描述
一般不在该界面直接使用 VM,所以保持该界面不动,另开一个窗口使用 ssh 登陆。

usernamexxx@hostnamexxx:~$ ssh -p 8080 femu@localhost
# femu 的密码:femu

在这里插入图片描述

编译 FEMU 虚拟机内核

  1. 将提前下载好的 linux-5.10 上传至主机
    在 MobaXterm 中远程连接服务器,在 MobaXterm 里,直接拖拽至文件列表。
    在这里插入图片描述
  2. 将 5.10 版本的内核压缩包从主机传到 FEMU 里
(主机)scp -P 8080 linux-5.10.tar.gz femu@localhost:~
(femu)sudo mv linux-5.10.tar.gz /usr/src/
  1. 解压缩
(femu)
cd /usr/src/
sudo tar -zxvpf linux-5.10.tar.gz
  1. 编译内核
(femu)
cd linux-5.10/ 
sudo apt-get install ncurses-dev
sudo apt-get install flex
sudo apt-get install bison -y
sudo make menuconfig
# 配置内核选项 File systems ---> 打开zonefs filesystem support
sudo apt-get install libssl-dev
sudo make -j8
sudo make modules_install
sudo make install
sudo poweroff
  1. 重启 femu,选择 Linux 5.10.0

在这里插入图片描述
重启后在主机运行一下命令,保障能够成功运行 ZNS 模式的 FEMU。

(主机)
cd femu/build-femu/
vim run-zns.sh
# 增大虚拟机内存至8G     -m 8G \
./run-zns.sh
# 选择编译好的 Linux 5.10
ssh -p 8080 femu@localhost
# 新建窗口运行femu

在 FEMU 虚拟机中使用 nvme-cli 命令集测试 ZNS 模式的配置

  1. 查看可用命令
nvme zns help
  1. 区域附加命令的最大命令大小 zasl(Zone Append Size Limit)
nvme zns id-ctrl /dev/nvme0n1
NVMe ZNS Identify Controller:
zasl    : 5
  1. 识别 ZNS 命名空间
nvme zns id-ns /dev/nvme0n1 
ZNS Command Set Identify Namespace:
zoc     : 0
ozcs    : 0
mar     : 0xffffffff
mor     : 0xffffffff
rrl     : 0
frl     : 0
lbafe  0: zsze:0x40000 zdes:0 (in use)
lbafe  1: zsze:0x0 zdes:0
lbafe  2: zsze:0x0 zdes:0
lbafe  3: zsze:0x0 zdes:0
lbafe  4: zsze:0x0 zdes:0

显示更详细的信息 -H(human readable)

nvme zns id-ns /dev/nvme0n1 -H
ZNS Command Set Identify Namespace:
zoc     : 0     Zone Operation Characteristics
  [1:1] : 0       Zone Active Excursions: No
  [0:0] : 0       Variable Zone Capacity: No

ozcs    : 0     Optional Zoned Command Support
  [0:0] : 0       Read Across Zone Boundaries: No
mar     : No Active Resource Limit
mor     : No Open Resource Limit
rrl     : Not Reported
frl     : Not Reported
LBA Format Extension  0 : Zone Size: 0x40000 LBAs - Zone Descriptor Extension Size: 0 bytes (in use)
LBA Format Extension  1 : Zone Size: 0x0 LBAs - Zone Descriptor Extension Size: 0 bytes
LBA Format Extension  2 : Zone Size: 0x0 LBAs - Zone Descriptor Extension Size: 0 bytes
LBA Format Extension  3 : Zone Size: 0x0 LBAs - Zone Descriptor Extension Size: 0 bytes
LBA Format Extension  4 : Zone Size: 0x0 LBAs - Zone Descriptor Extension Size: 0 bytes
  1. 往 zone 里追加信息
echo "hello world" | nvme zns zone-append /dev/nvme0n1 -z 512
Success appended data to LBA 0
  1. 从设备内读信息
nvme read /dev/nvme0n1 -z 512
read: Success
  1. 报告 zone 信息
nvme zns report-zones /dev/nvme0n1 -d 10

在 VSCode 里修改并调试 FEMU 内代码

远程连接 FEMU

# C:\Users\77919\.ssh\config

Host 填名称
    HostName 主机IP
    User 填用户名
    ForwardAgent yes

Host localhost
    HostName 主机IP
    User femu
    Port 8080

在这里插入图片描述
点击右上角的符号连接到 FEMU,然后使用资源管理器内的打开文件夹,就可以方便地修改 FEMU 虚拟机内的代码,比 vim 好用多啦!

本地调试远程代码

  1. 远程连接 FEMU 后,在 VSCode 里下载 C++ Runner 插件

  2. 在 FEMU 内下载 gdb

   femu@fvm:/usr/bin$ sudo apt-get install gdb
  1. 点击 C++ Runner 插件的小齿轮 自动生成 launch.json

  2. 上述步骤完成,就可以在VS Code 内打开的远程代码上设置 breakpoints了

  3. 点击 Run - Start Debugging (F5)

  4. 终端运行程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值