初识DPDK

1.什么是DPDK?

数据平面开发套件(DPDK [1]  ,Data Plane Development Kit)是由6WIND,Intel等多家公司开发,主要基于Linux系统运行,用于快
速数据包处理的函数库与驱动集合,可以极大提高数据处理性能和吞吐量,提高数据平面应用程序的工作效率。

2.关于DPDK的很多问题

1.为什么有了netmap之后还要有DPDK呢?
  因为netmap还是不能满足我们日益增长的需求.

3.其他的闲谈(与dpdk无关)

virtualDev="eth1000"--不支持多队列网卡
virtualDev="vmxnet3"--支持多队列网卡
wakeOnPcktRcv="TRUE"

改变默认网卡的起始位置:/etc/default/grub 改动网卡net.ifnames=0 biosdevname=0
我的centos山没有起作用,可以再试试,这样配置之后里面了上就可以从0号开始配置网卡信息,
但我的网卡还是:
ens160
ens192
ens224
ens256

重启网络:
service network restart

缺页和不命中


巨页的作用是为了减少置换的次数,不能解决缺页的问题.
设置的是内存中没有时去磁盘中去寻找数据的大小和粒度.


将e1000改成vmxnet3
添加网卡后,nmcli可以自动生成网卡信息.



cat /proc/interrupts          查看所有的中断信息
grep ens160  /proc/interrupts 查看网卡ens160的中断信息
cat /proc/cpuinfo 查看cpu的信息

cat /proc/irq/58/smp_affinity

其中58是中断号

设置亲缘性:
echo 00000001 > /proc/irq/58/smp_affinity
echo 00000002 > /proc/irq/59/smp_affinity
echo 00000004 > /proc/irq/60/smp_affinity
echo 00000008 > /proc/irq/61/smp_affinity
echo 00000010 > /proc/irq/62/smp_affinity
echo 00000020 > /proc/irq/63/smp_affinity
echo 00000040 > /proc/irq/64/smp_affinity
echo 00000080 > /proc/irq/65/smp_affinity

进行压力测试:
./wrk -c400 -d60 -t100 http://192.168.118.141:8081/





4.配置dpdk环境


1.下载dpdk的安装包
https://core.dpdk.org/download/
可以选择一个您喜欢的版本,我选择的是19.08.2

2.解压dpdk
$xz -d dpdk-19.08.2.tar.xz
$tar xvf dpdk-19.08.2.tar

3.到/home/share/dpdk/dpdk-stable-19.08.2/usertools目录下(这个是我自己的目录,灵活调整)执行:
dpdk-setup.sh
第一步:选择您编译时所需要的的系统
选择系统的时候我选择的是:39(64位gcc)

第二步:Set Linux Env(设置linux环境)
export RTE_SDK=/home/share/dpdk/dpdk-stable-19.08.2/
export RTE_TARGET=x86_64-native-linux-gcc
echo $RTE_TARGET查看是否设置成功
echo $RTE_SDK查看是否设置成功
执行dpdk-setup.sh
选择43,44,45,47,49

47 为NUMA系统设置大页内存映射,提示中说可以设置64,建议设置成512个,否则在53做测试的时候会
报错:
运行testpmd报错Cause: rte_zmalloc(32 struct rte_port) failed [已关闭],
此时改成512就可以了.
 

49的时候报错:
0000:02:01.0 '82545EM Gigabit Ethernet Controller (Copper) 100f' if=ens33 drv=e1000 unused=igb_uio,vfio-pci 


Enter PCI address of device to bind to IGB UIO driver: 0000:0b:00.0
Warning: routing table indicates that interface 0000:0b:00.0 is active. Not modifying
OK
ifconfig eth0 down

选择53进行测试:
show port info 0

vim /etc/default/grub
net.ifnames=0 biosdevname=0 default_hugepagesz=1G hugepagesz=2M hugepages=1024 isolcpus=0-2


quit退出测试




说明一些编译步骤:
--------------------------------------------------
[43] Insert IGB UIO module--插入IGB模块(IGB是网卡驱动模块)
[44] Insert VFIO module   --插入VFIO模块(比IGB安全的网卡驱动模块)
[45] Insert KNI module    --插入内核网络接口模块
[46] Setup hugepage mappings for non-NUMA systems--non-NUMA,对于CPU使用内存而言,有同一编码和非同一编码,比如有4096byte,
non-NUMA就是非同一的每次都是从0开始访问内存,如果分成四块内存,四块都是0-1023,,NUMA则是0-1023,1024-2047,2048-3071,3072-4095;
non-NUMA比NUMA方式更灵活些.

[47] Setup hugepage mappings for NUMA systems--为NUMA系统设置大页内存映射
[48] Display current Ethernet/Baseband/Crypto device settings
[49] Bind Ethernet/Baseband/Crypto device to IGB UIO module
[50] Bind Ethernet/Baseband/Crypto device to VFIO module
[51] Setup VFIO permissions

4.编译成功之后生成
  /home/share/dpdk/dpdk-stable-19.08.2/x86_64-native-linux-gcc

5.


6.测试helloworld
gcc -o helloword main.c -I /user/local/include/dpdk -ldpdk -lnuma -lpthred -ldl

  
/home/share/dpdk/dpdk-stable-19.08.2/x86_64-native-linux-gcc/lib

5.dpdk的一些作用作用

1.dpdk可以提供接口让用户定义我们的代码在哪个CPU上执行;
  ./helloworl -l 2,3
  ./helloworl -l 0-4

6.dpdk的一些开源应用

mydpdkdns(对版本依赖比较严重,支持dpdk17.02.1)
eth0->vEth0
会先把eth0关掉,然后插入一个新的虚拟网卡vEth0,两者的mac地址是不一样的
ifconfig vEth0 192.168.1.188 hw ether 52:54:00:90:f2:88 up
 

 

 

 

 

 

 

04-18
<think>好的,我现在需要处理用户关于DPDK的使用指南和介绍的请求。首先,用户提供了几个引用内容,我需要结合这些引用来构建回答。让我先仔细阅读这些引用内容,确定它们提供的信息点。 引用[1]提到配置Linux环境支持DPDK,包括分配Hugepages和加载内核模块。引用[2]说明DPDK在行业中的地位和优势。引用[3]涉及HPET_MMAP配置和DPDK使用HPET的步骤。引用[4]是关于加载igb_uio.ko内核模块的命令。引用[5]则提到了DPDK中的哈希表示例。 用户的需求是了解DPDK的使用方法和介绍,所以回答需要结构清晰,分点说明。首先应该介绍DPDK的基本概念,然后进入环境配置的步骤,接着可能涉及编译安装、驱动加载、应用示例等部分。同时,用户希望生成相关问题,我需要根据内容提出相关的问题。 需要确保使用正确的LaTeX格式,比如数学表达式用$...$,独立公式用$$...$$,但根据用户提供的引用,可能数学公式不多,可能需要检查是否有必要的地方使用。同时要注意中文回答,语法正确。 接下来,我需要整理各个引用的内容到回答的不同部分。例如,引用[2]适合放在介绍部分,说明DPDK的优势。引用[1]和[3]、[4]用于环境配置的步骤,包括Hugepages分配、内核模块加载和HPET配置。引用[5]可以作为性能优化的例子。 需要注意用户之前的提问历史,但根据当前信息,用户可能没有之前的交互,因此主要基于提供的引用。需要确保回答的结构符合用户的要求,分步骤说明,并引用正确的来源。同时,生成的相关问题应涵盖配置、优化、应用场景等。 可能还需要补充一些DPDK的基本信息,如架构、核心组件,确保介绍部分完整。此外,使用代码块展示命令示例,如加载模块的命令,这样用户更清楚如何操作。 最后,检查是否遗漏了重要步骤,比如是否提到NUMA系统的配置,或者如何绑定网络端口到DPDK驱动。引用[1]提到了绑定网络端口,应该在环境配置部分加入这一步骤。 总结,回答的结构大致为:介绍DPDK,环境配置(Hugepages、内核模块、HPET、端口绑定),编译安装,应用示例,性能优化,最后相关问题。需要确保每个部分都参考了正确的引用,并在适当位置添加引用标识。</think>### DPDK 使用指南与核心功能介绍 #### 一、DPDK 简介 数据平面开发工具包(Data Plane Development Kit, DPDK)是由Intel主导的高性能网络数据处理框架,通过绕过内核协议栈、零拷贝技术和用户态轮询模式驱动(PMD)实现网络数据包的高效处理[^2]。其核心架构包括: - **内存管理**:使用大页(Hugepages)减少TLB未命中 - **轮询模式驱动**:消除中断开销 - **多核调度**:通过线程绑定与无锁队列提升并行效率 #### 二、环境配置步骤 1. **Hugepages配置** ```bash # 分配2048个2MB大页(NUMA系统需分节点配置) echo 2048 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages ``` 需删除原有大页并挂载到`/mnt/huge`目录[^1] 2. **内核模块加载** ```bash sudo modprobe uio sudo insmod dpdk-kmods/linux/igb_uio/igb_uio.ko intr_mode=legacy # 加载用户态驱动[^4] ``` 3. **HPET配置** 需在内核编译时启用`CONFIG_HPET_MMAP`选项,并在DPDK编译时添加`CONFIG_RTE_LIBEAL_USE_HPET=y`配置[^3] 4. **网卡绑定** ```bash ./dpdk-devbind.py --bind=igb_uio 0000:01:00.0 # 将PCI网卡绑定到DPDK驱动 ``` #### 三、核心组件说明 1. **内存池(mempool)** ```c struct rte_mempool *mp = rte_pktmbuf_pool_create("PKTMBUF_POOL", NUM_MBUFS, MBUF_CACHE_SIZE, 0, RTE_MBUF_DEFAULT_BUF_SIZE, rte_socket_id()); ``` 预分配固定大小内存块,减少动态分配开销 2. **轮询模式驱动(PMD)** ```c struct rte_eth_conf port_conf = { .rxmode = { .max_rx_pkt_len = ETHER_MAX_LEN } }; rte_eth_dev_configure(port_id, 1, 1, &port_conf); ``` 3. **无锁队列(rte_ring)** ```c struct rte_ring *ring = rte_ring_create("MSG_RING", RING_SIZE, SOCKET_ID_ANY, RING_F_SP_ENQ | RING_F_SC_DEQ); ``` #### 四、性能优化技巧 1. 使用`rte_hash`库实现高效哈希表(参见Table 12.1的哈希分布优化[^5]) 2. 通过CPU亲缘性绑定减少缓存失效 3. 采用批处理机制提升流水线效率 ```c // 典型收发包处理循环 while (1) { nb_rx = rte_eth_rx_burst(port_id, 0, pkts_burst, MAX_PKT_BURST); if (unlikely(nb_rx == 0)) continue; // 数据处理逻辑 nb_tx = rte_eth_tx_burst(port_id, 0, pkts_burst, nb_rx); } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值