1. 背景
事情是是是是是这样的!
我要用DPDK,但是我觉得搞两台服务器连端口发包,太麻烦,虽然实际上,可能并不麻烦。。。。但我就是想在单台服务器上做。
docker+DPDK+OVS 这种方式来做测试。
然后呢就在网上找了个教程,和我的需求真的是一模一样。。但是按照那个教程做的过程中啊,出了一些问题。记录一下~
2. 教程内容和相关脚本
教程链接:https://blog.csdn.net/me_blue/article/details/78589592
其中安装部分按照教程里的做就可以了。
安装完dpdk和ovs之后创建网桥以及下发流表用的脚本可以在我的github上获取。https://github.com/LinanJ/DPDK-OVS-
3. 实验中遇到的问题
在这个实验中,把pktgen和testpmd放在两个容器中,然后进行测试。创建容器都没问题,问题是在启动pktgen的时候,总是报内存的错误,要么是内存没有,要么是内存不足!!!
重点来了,朋友们,教程里的socket_mem部分是两个1024对吧。那是因为人家有连个NUMA节点,你有么???
我是没有的。。所以,就会报错,说是socket1上没有内存。。显然没有。所以啊,如果你只有一个numa节点,那么你在pktgen上和testpmd上的命令应该是这样的:
# pktgen一定要进入到pktgen那个文件夹下再运行这个命令。
pktgen -c 0x19 --master-lcore 3 -n 1 --socket-mem 1024 --file-prefix pktgen --no-pci --vdev \
'net_virtio_user0,mac=00:00:00:00:00:05,path=/var/run/openvswitch/vhost-user0' --vdev \
'net_virtio_user1,mac=00:00:00:00:00:01,path=/var/run/openvswitch/vhost-user1' -- -T -P -m "0.0,4.1"
#testpmd的目录/dpdk/x86_64-native-linuxapp-gcc/app
testpmd -c 0xE0 -n 1 --socket-mem 1024 --file-prefix testpmd --no-pci \
--vdev 'net_virtio_user2,mac=00:00:00:00:00:02,path=/var/run/openvswitch/vhost-user2' \
--vdev 'net_virtio_user3,mac=00:00:00:00:00:03,path=/var/run/openvswitch/vhost-user3' \
-- -i --burst=64 --disable-hw-vlan --txd=2048 --rxd=2048 -a --coremask=0xc0
- 挂载问题
有的时候吧,大页内存用着用着就莫名其妙的没有了,原因不知道是啥,很可能是需要重新挂载一下。
- 首先看一下你的大页使用情况
grep Huge /proc/meminfo
- 然后来看一下系统的挂载情况
cat /proc/mounts
dpdk挂载的就是红线框的这两条
- 如果想重新挂载怎么办?
umount /dev/hugepages
umount /mnt/huge
mount -t hugetlbfs none /dev/hugepages
mount -t hugetlbfs -o pagesize=1G none /mnt/huge
这样就可以了。