主要是搭建一个DPDK+docker的环境,然而docker上次用是在软工的时候,重新学还花了一些功夫,改日写篇docker总结好了。
最终能够运行的版本信息
注 :dpdk、pktgen是wget下载安装的,docker是apt install安装的
- Linux kernel 4.4.0-131-generic
- Ubuntu 16.04.5 LTS
- dpdk-stable-16.11.1
- pktgen-dpdk-pktgen-3.1.1
- Docker version 17.03.2-ce
环境配置
- 安装dpdk
- 安装docker
- 安装pktgen
- 配置hugepages
- 注意!本实验中由于我们需要使用virtio-user这种连接方式,由于实现时的一些限制导致使用vhost-user时同时最多只能使用8个hugepages无论2M还是1G大小的hugepagesize。所以这里必须使用1G大小的hugepagesize同时最多分配8个。
拓扑搭建
拓扑
预建立的简单拓扑
1 | +--------+---------------+ +-------------------+---------------+ |
testpmd是DPDK提供的一个通过数据包转发进行DPDK测试的工具,也是一个非常好的DPDK应用开发示例。如果想进行简单的DPDK开发实验推荐修改$RTE_SDK/app/test-pmd/iofwd.c
后编译testpmd应用,之后在同一目录$RTE_SDK/app/test-pmd/
下可以找到下编译后的testpmd应用。
pktgen运行在主机中,testpmd运行在容器中,两个应用之间通过建立的socket文件以及vhost-user进行通信,相当于虚拟网卡。
启动容器
创建Dockerfile
1 | cat <<EOT >> $RTE_SDK/../Dockerfile |
使用创建的dockerfile建立docker镜像
1 | cd $RTE_SDK/.. |
运行容器
注:这里一开始没把libnuma.so.1共享-v加进去,结果进去报错
注2:但是在后来的可跑的版本中,不加又没有关系
1 | mkdir -p /tmp/virtio |
虚拟机上的初步结果
因为硬件受限还没法添加1G的hugepage,为了测试testpmd的可用性,我暂时直接在容器中运行
1 | testpmd |
截图如下
启动应用
在容器中运行testpmd
1 | 以下命令在容器中运行 |
在主机上运行pktgen
1 | 以下命令在主机中运行 |
最终结果
在pktgen中进行简单设置,并在testpmd中查看结果
1 | Pktgen:/>set all rate 10 |
pktgen上截图
testpmd上截图
参考资料
- https://www.sdnlab.com/20112.html
- https://segmentfault.com/q/1010000003036379
- http://pktgen-dpdk.readthedocs.io/en/latest/getting_started.html
- http://www.voidcn.com/article/p-fmqewmwt-bqu.html