# pee-dpdk-new **Repository Path**: thiller/pee-dpdk-new ## Basic Information - **Project Name**: pee-dpdk-new - **Description**: pee算法的dpdk实现,原有的pee-dpdk项目废弃 - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-01-19 - **Last Updated**: 2023-09-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PEE-dpdk ## 介绍 PEE算法的dpdk实现. PEE的dpdk实现是根据dpdk目录/app/test-pipelin实现的 ## 端口详情 | IP | 网卡名称 | 用于 | dpdk网口| mac| | -------- | -----: | :----: | :----: | -------- | | 192.168.0.218 | eno2 | sender1 | 0 | A4:BF:01:6E:A6:7A | | 192.168.1.219 | eno2 | sender2 | 0 | A4:BF:01:6E:CC:EF | | 192.168.2.217 | eno2 | receiver1 | 0 | A4:BF:01:6E:D3:0F | | 192.168.0.211 | eno2np1 | switch | 1 | E4:3D:1A:AC:C8:05 | | 192.168.1.211 | eno1np0 | switch | 0 | E4:3D:1A:AC:C8:04 | ## 硬件详情 | 用于 | CPU个数 | 物理核/逻辑核 | CPU型号 | 网卡 | 内存 | | --------- | ------- | ------------- | ------------------------------------------- | ---------------------------------------------------------- | --------------------- | | sender1 | 2 | 10/40 | Intel(R) Xeon(R) Silver 4210R CPU @ 2.40GHz | (Intel)Ethernet Connection X722 for 10GBASE-T 37d2 | 64G(DDR4),2933 MT/s | | sender2 | 2 | 10/40 | Intel(R) Xeon(R) Silver 4210R CPU @ 2.40GHz | (Intel)Ethernet Connection X722 for 10GBASE-T 37d2 | 64G(DDR4),2933 MT/s | | receiver1 | 2 | 8/32 | Intel(R) Xeon(R) Silver 4215R CPU @ 3.20GHz | (Intel)Ethernet Connection X722 for 10GBASE-T 37d2 | 128G(DDR4),2933 MT/s | | switch | 2 | 4/16 | Intel(R) Xeon(R) Gold 5222 CPU @ 3.80GHz | (Intel)82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb | 192G(DDR4),3200 MT/s | ## 拓扑 ![img1](https://gitee.com/thiller/pee-dpdk/raw/master/pic/topo.png "图 2") ## 运行DPDK ### 1.igb_uio的加载 首先加载uio和uio_pci_generic驱动, ``` sudo modprobe uio sudo modprobe uio_pci_generic ``` 再解决igb_uio驱动,步骤如下: dpdk从20.02版本后默认不编译igb_uio.ko 更改config/common_base的 CONFIG_RTE_EAL_IGB_UIO=y 可以实现编译。 使用usertool中的编译工具重新编译,加载igb_uio驱动。 我的解决方案是去官网下载dpdk的18.11.1稳定版本。在18版本的目录下: ``` sudo meson -Dexamples=all build cd build sudo ninja install ``` 编译成功后,去到/home/wy/dpdk/dpdk-stable-18.11.11/build/kernel/linux/igb_uio 目录下,就可以找到igb_uio.ko的二进制文件了。 然后通过`insmod igb_uio.ko`即可加载igb_uio驱动了,然后再去绑定网卡即可。 #### 绑定网卡 ``` #! /bin/bash # employ bash shell # 加载igb_uio驱动 echo "loading uio module..." sudo modprobe uio sudo modprobe uio_pci_generic sudo insmod /home/wy/dpdk/dpdk-stable-18.11.11/build/kernel/linux/igb_uio/igb_uio.ko echo "loading uio success!" sudo python3 /home/wy/dpdk/dpdk-stable-21.11.1/usertools/dpdk-devbind.py --status # 关闭网卡 echo "shutdown nic eno2" sudo ifconfig eno2 down echo "shutdown nic eno2 success!" # 绑定网卡到dpdk echo "bind eno2 to DPDK..." sudo python3 /home/wy/dpdk/dpdk-stable-21.11.1/usertools/dpdk-devbind.py --bind=igb_uio eno2 echo "bind eno2 to DPDK success!" sudo python3 /home/wy/dpdk/dpdk-stable-21.11.1/usertools/dpdk-devbind.py --status ``` 如果看到有类似于 ``` Network devices using DPDK-compatible driver ============================================ 0000:3d:00.1 'Ethernet Connection X722 for 10GBASE-T 37d2' drv=igb_uio unused=i40e,vfio-pci,uio_pci_generic ``` 说明网卡绑定成功 ### 2.编译dpdk ``` tar xJf dpdk-21.11.1.tar.xz cd dpdk-stable-21.11.1/ sudo meson -Dexamples=all build # 编译安装 cd build sudo ninja install ``` ### 3.运行dpdk例子测试 #### a)运行helloworld 指令如下: ``` cd /home/wy/dpdk/dpdk-stable-21.11.1/examples/helloworld make clean make cd build sudo ./helloworld ``` 如果能正常打印hello说明正常 #### b)运行l2fwd ``` cd /home/wy/dpdk/dpdk-stable-21.11.1/examples/l2fwd make cd build sudo ./l2fwd -c 0x3 -n 2 -- -q 1 -p 1 ``` -c:指定分配给DPDK使用的逻辑数 -n:每个CPU的内存通道数 --:之后表示为次参数 -q:每个CPU管理的队列数,这里设置为一个队列 -p:使用的端口 能成功运行说明没问题 #### c)运行发包程序 ``` cd /home/wy/dpdk/dpdk-stable-21.11.1/examples/pee-dpdk-new/sender makecd cd build sudo ./wuyi-sender -c 0x7 -n 2 -- -p 1 ``` -c分配了三个核,核1,核2,核3。-n:每个CPU的内存通道数,-p指定网卡为1来发数据包 ## 运行 1.我们的实现版本是dpdk-stable-21.11.1,首先,根据/home/wy/dpdk/dpdk-stable-21.11.1/usertools/dpdk-devbind.py -s查看状态。若网卡状态都正常,则运行sender模块和switch模块,其中有相关说明。