一、前言
DPDK(Intel Data Plane Development Kit)是Intel提供的数据平面开发工具集,专注于网络应用中数据包的高性能处理。DPDK应用程序运行在用户空间,利用自身提供的数据平面库来收发数据包,绕过了Linux内核协议栈对数据包处理过程。DPDK其实也是网络开发框架和开发库、高效数据结构、众多Linux系统优化方法的合集。
转载自https://blog.csdn.net/cloudvtech
二、DPDK的核心思想
2.1 用户态网络驱动
使用Linux的UIO技术,PMD批量收发数据,避免终端爆炸;线程绑定CPU core,避免调度开销;避免内核态和用户态的数据拷贝;用户态程序的稳定性更好
2.2 高效内存使用
使用大页减少TLB cache miss,高效的m_buf管理,使得多种网络处理更高效
2.3 环形队列
提供无锁队列,提高信息交互效率
2.4 向量化指令
提升内存读取效率,分摊指令开销
三、DPDK 17.08.1在CentOS 7.2.1511的安装
3.1 系统设置
1. OS: http://vault.centos.org/7.2.1511/isos/x86_64/CentOS-7-x86_64-Minimal-1511.iso
2. H/W:
1 NUMA node with 4 CPU cores
4 GB memory
3 NICs
40 GB disk
3.2 依赖安装
yum makecache
yum install -y gcc gcc-c++ kernel-devel kernel-headers kernel.x86_64 net-tools
yum install -y numactl-devel.x86_64 numactl-libs.x86_64
yum install -y libpcap.x86_64 libpcap-devel.x86_64
yum install -y pciutils
3.3 设置大页内存
echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
mkdir /mnt/huge
chmod 777 /mnt/huge
in /etc/fstab
huge /mnt/huge hugetlbfs defaults 0 0
cat /proc/meminfo | grep Huge
3.4 安装DPDK
wget http://fast.dpdk.org/rel/dpdk-17.08.1.tar.xz
xz -d dpdk-17.08.1.tar.xz
tar -xvf dpdk-17.08.1.tar
cd dpdk-stable-17.08.1/
3.4.1 patch
3.4.2 编译
export RTE_SDK=/root/dpdk-stable-17.08.1
export RTE_TARGET=x86_64-native-linuxapp-gcc
make config T=x86_64-native-linuxapp-gcc
sed -ri 's,(PMD_PCAP=).*,\1y,' build/.config
make
cd $RTE_SDK
make install T=x86_64-native-linuxapp-gcc
3.5 安装kernel module
modprobe uio_pci_generic
modprobe uio
modprobe vfio-pci
insmod build/kmod/igb_uio.ko
3.6 查看驱动bind状态
3.7 bind NIC
现有的NIC如下:
ifconfig eno33554960 down
ifconfig eno50332184 down
./usertools/dpdk-devbind.py --bind=igb_uio 02:02.0
./usertools/dpdk-devbind.py --bind=igb_uio 02:03.0
查看bind之后状态:
![](https://i-blog.csdnimg.cn/blog_migrate/f34e98775103cc00a4076ba8ceee921c.png)
转载自https://blog.csdn.net/cloudvtech
四、基于DPDK的简单测试
4.1 编译运行hellowrold程序
make -C examples RTE_SDK=$(pwd) RTE_TARGET=build O=$(pwd)/build/examples
./build/examples/helloworld/build/helloworld
![](https://i-blog.csdnimg.cn/blog_migrate/1cf4d6852b0f2a725256d8163035d626.png)
4.2 PMD测试
export RTE_TARGET=build/
[26] Run testpmd application in interactive mode ($RTE_TARGET/app/testpmd)
4.3 testpmd参数测试
build/app/testpmd -l 3,0,2 --socket-mem 1024 --log-level=8 -- -i
testpmd> set nbcore 2
Number of forwarding cores set to 2
testpmd> show config fwd
io packet forwarding - ports=2 - cores=2 - streams=2 - NUMA support enabled, MP over anonymous pages disabled
Logical Core 2 (socket 0) forwards packets on 1 streams:
RX P=0/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:01
Logical Core 3 (socket 0) forwards packets on 1 streams:
RX P=1/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
testpmd> show config cores
List of forwarding lcores: 2 3
testpmd> start
io packet forwarding - ports=2 - cores=2 - streams=2 - NUMA support enabled, MP over anonymous pages disabled
Logical Core 1 (socket 0) forwards packets on 1 streams:
RX P=0/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:01
Logical Core 2 (socket 0) forwards packets on 1 streams:
RX P=1/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
io packet forwarding - CRC stripping enabled - packets/burst=32
nb forwarding cores=2 - nb forwarding ports=2
RX queues=1 - RX desc=128 - RX free threshold=0
RX threshold registers: pthresh=0 hthresh=0 wthresh=0
TX queues=1 - TX desc=512 - TX free threshold=0
TX threshold registers: pthresh=0 hthresh=0 wthresh=0
TX RS bit threshold=0 - TXQ flags=0x0
testpmd> show port stats all
######################## NIC statistics for port 0 ########################
RX-packets: 1649080 RX-missed: 0 RX-bytes: 122036704
RX-errors: 0
RX-nombuf: 0
TX-packets: 258545 TX-errors: 0 TX-bytes: 17993146
Throughput (since last show)
Rx-pps: 97242
Tx-pps: 35178
############################################################################
######################## NIC statistics for port 1 ########################
RX-packets: 267012 RX-missed: 0 RX-bytes: 19670724
RX-errors: 0
RX-nombuf: 0
TX-packets: 1661125 TX-errors: 0 TX-bytes: 116279790
Throughput (since last show)
Rx-pps: 37156
Tx-pps: 95331
############################################################################
转载自https://blog.csdn.net/cloudvtech