云操作系统:DPDK配置踩坑

自从用上了Docker之后,VMWare早就不知道丢哪里去了。无论是现在的CSAPP、OS、CSE,还是云操作系统的Lab1,我都是用的Docker容器。可结果这个Lab2他还用不了Docker,属实无奈;不仅如此,配环境就花了我大量的时间,因此打算记录记录。

Why not Docker?

本来Docker用得好好的,结果make一编译,给我报错了

1
2
3
make -C /lib/modules/5.15.153.1-microsoft-standard-WSL2/build/ M=/root/dpdk-work/dpdk/kernel/linux/igb_uio
make[1]: *** /lib/modules/5.15.153.1-microsoft-standard-WSL2/build/: No such file or directory. Stop.
make: *** [Makefile:4: all] Error 2

遂查看容器里的/lib/modules/目录,发现是真没有啊。Docker容器和宿主机共享内核,容器内部没有自己的内核模块,所以我印象中容器里这部分目录里面好像啥也没有,所以就只能乖乖地安装虚拟机了。

虚拟机难绷的经历

用就用吧,其实基本上按照文档PDF给出的进行配置,这里记录一下我都遇到了啥问题

首先是NIC和DPDK的关系,NIC是网卡,在使用DPDK的时候需要用到这玩意,所以要让网卡不去支持正常的网络收发,而去支持DPDK的连接和通信。我这里也集中写了脚本,可供参考。具体的NIC名称可能会有所不同

这是绑定脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash

echo "user: $(whoami)"

cd ~/dpdk-work/dpdk/kernel/linux/igb_uio
sudo modprobe uio
sudo insmod igb_uio.ko

sudo ifconfig ens33 down

cd ~/dpdk-work/dpdk
./usertools/dpdk-devbind.py --status
sudo bash -c "./usertools/dpdk-devbind.py --bind=igb_uio 0000:02:01.0"
./usertools/dpdk-devbind.py --status

这是解绑脚本

1
2
3
4
5
6
#!/bin/bash

cd ~/dpdk-work/dpdk
sudo bash -c "./usertools/dpdk-devbind.py --bind=e1000 0000:02:01.0"
sudo ifconfig ens33 up
ifconfig -a

我当时遇到一个情况,就是在脚本里直接写sudo ... ~/...,结果按下去就给我识别成root了,非要去/root里找文件,后续直接在普通状态跳转到相应目录后再用相对路径去执行

然后基本上Task1,2都可以解决

不过后面出现了个问题,就比如你在NIC已经绑定了DPDK之后,原来的网卡就用不了了,执行ifconfig只有lo回环网卡,只能处理自己发向自己的请求;解决办法是给虚拟机新加一个Network Adapter(网络适配器)即可,无需重启,开箱即用,要连git啥的都很方便;还有一个用途就是,多了一个NIC,就可以用它来建立和VScode的连接

  • 先在虚拟机安装openssh,好像叫这个吧?
  • VScode ssh配置,设置一下用户名和IP,虚拟机可连接的IP通过systemctl相关指令获取,具体细节可自行搜索

不过说到git,就不得不提一下我们中国程序员的扎实网络基础。虚拟机需要通过宿主机的VPN才可以访问到apt包的更新和git,那么首先需要找到宿主机的VMnet8局域网地址,将其设为虚拟机git的代理;同时Clash也要设置为“允许局域网连接”,大概这样即可

以及,VMWare支持创建对某个虚拟机的克隆虚拟机,选择link clone亲测可以;最好是把该配的配了,该编译的编译了,再去克隆,不然到时候得编译、配置两回

未完待续,仍在踩坑