dpdk-pktgen快速发包工具踩坑日记

使用pktgen发包程序测试程序的收包

ifconfig eth2 up

执行下面的脚本

cat /proc/net/pktgen/eth2可以查看发包的速率等

参考

Lenky个人站点 » 利用pktgen发包工具做性能测试

pktgen脚本如下

#! /bin/sh

# FileName: pktgen-119-120.conf

# modprobe pktgen



function pgset() {

    local result



    echo $1 > $PGDEV



    result=`cat $PGDEV | fgrep "Result: OK:"`

    if [ "$result" = "" ]; then

         cat $PGDEV | fgrep Result:

    fi

}



function pg() {

    echo inject > $PGDEV

    cat $PGDEV

}



# Config Start Here -----------------------------------------------------------





# thread config

# Each CPU has own thread. Two CPU exammple. We add eth1, eth2 respectivly.



PGDEV=/proc/net/pktgen/kpktgend_2

  echo "Removing all devices"

 pgset "rem_device_all"

  echo "Adding eth2"

 pgset "add_device eth2"





#PGDEV=/proc/net/pktgen/kpktgend_3

 # echo "Removing all devices"

 #pgset "rem_device_all"

  #echo "Adding eth6"

 #pgset "add_device eth6"



# device config

# delay 0 means maximum speed.



CLONE_SKB="clone_skb 1000000"

# NIC adds 4 bytes CRC

PKT_SIZE="pkt_size 60"



# COUNT 0 means forever

#COUNT="count 0"

COUNT="count 0"

DELAY="delay 0"



PGDEV=/proc/net/pktgen/eth2

  echo "Configuring $PGDEV"

 pgset "$COUNT"

 pgset "$CLONE_SKB"

 pgset "$PKT_SIZE"

 pgset "$DELAY"

 pgset "dst 192.168.1.96"

 pgset "dst_mac 6C:92:BF:29:46:2A"



#PGDEV=/proc/net/pktgen/eth6

#  echo "Configuring $PGDEV"

# pgset "$COUNT"

 #pgset "$CLONE_SKB"

 #pgset "$PKT_SIZE"

 #pgset "$DELAY"

 #pgset "dst 192.168.1.95"

 #pgset "dst_mac 00:0C:29:97:9B:B4"



# Time to run

PGDEV=/proc/net/pktgen/pgctrl



 echo "Running... ctrl^C to stop"

 pgset "start"

 echo "Done"

踩坑过程

修改内核的启动hugepage配置

default_hugepagesz=1G hugepagesz=1G hugepages=64

程序启动后,一直无法找到网卡,查了后,发现是驱动没能初始化造成

解决方法:修改了Makefile,使新的驱动初始化方法能够执行

git clone git://dpdk.org/apps/pktgen-dpdk

sudo yum install libpcap-devel.x86_64

将RTE_ASSERT 修改为RTE_MBUF_ASSERT

make

sudo ./setup.sh

执行./pktgen -c 0x1f -n 3 -- -P -m "[1:3].0, [2:4].1"

start 0 发包开始

测试环境测试方案

两个口直连,可以小包打到20Gbps —— 测试硬件网卡以及发包程序;

两个口互连,就只剩调试l2fwd、cfe程序来打到线速转发了。

替代方案:

两个口互连,都跑pktgen,互相发包,看能否收发到线速(测试网卡及发包程序)

./pktgen -c 0x1f000 -n 3 -- -P -m "[13:15].0,[14:16].1" -f test/set_seq.pkt

两个dpdk-pktgen互连测线速

./pktgen -c 0x1ff1ff -n 3 --proc-type primary  --file-prefix pg -- -T -P -m "[13-16:17-20].0,[1-4:5-8].1" -f test/set_seq.pkt

启动多个队列应该是有用处的,执行这个多队列的命令前,先修改内核的启动引导脚本,

将大内存调大配置为:default_hugepagesz=1G hugepagesz=1G hugepages=64

多队列,发包可以达到线速,但是两个口同时收发,还是不行。

多实例-多队列

./pktgen -c 1f000 -n 3 --proc-type auto --socket-mem 512,512 --file-prefix pg1 -b 0000:83:00.1 -- -T -P -m "[13-14:15-16].0" -f test/set_seq.pkt

./pktgen -c 3e0000 -n 3 --proc-type auto --socket-mem 512,512 --file-prefix pg2 -b 0000:83:00.0 -- -T -P -m "[18-19:20-21].0" -f test/set_seq.pkt

仍然不能解决问题。

先暂停调试pktgen dpdk的性能最高值。开始l2fwd和cfe的性能测试。

查看设备的插槽信息

dmidecode | grep -1 PCI

或者用lspci -vvv来查看

dmidecode | grep -1 PCI

Characteristics:

PCI is supported

BIOS is upgradeable

--

Port Connector Information

Internal Reference Designator: J9C1 - PCIE DOCKING CONN

Internal Connector Type: Other

--

System Slot Information

Designation: PCIE_0_CPU0

Type: x16 PCI Express 3 x16

Current Usage: Available

--

System Slot Information

Designation: PCIE_1_CPU0

Type: x8 PCI Express 3 x8

Current Usage: In Use

--

System Slot Information

Designation: PCIE_2_CPU1

Type: x16 PCI Express 3 x16

Current Usage: Available

--

System Slot Information

Designation: PCIE_3_CPU1_X16

Type: x16 PCI Express 3 x16

Current Usage: In Use

确认了两个万兆口应该是在cpu1上的,更换跑l2fwd使用的物理cpu id为12、13

查看设备的core分布

cat /proc/cpuinfo | grep "physical id\|core id\|processor"

修改了pktgen-dpdk的绑核后,有所提升(两口从15-16Gbps)

./pktgen -c 0x1f000 -n 3 -- -P -m "[13:15].0,[14:16].1" -f test/set_seq.pkt

pci-E带宽

PCI-E X16 1.0接口带宽 单向4GB/s 双向8GB/s

PCI-E X16 2.0接口带宽 单向8GB/s 双向16GB/s

从这个速度可以看出,pci-e的速率应该不是瓶颈

119、120都用pktgen互相打包

同时发包的话,不能达到线速20g,只能是16g左右的收包率;但是只打一个口

的双向的话,是可以达到10g双向收发的~

使用pktgen dpdk互连进行收发包测试,发现,单口分别收发的话,可以达到64字节小包20Gb/s的线速。但是两口同时收发不行。调大报文大小也不行。

lspci -s 0000:07:00.0 -vv | grep LnkSta

LnkSta: Speed 5GT/s, Width x8, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-

LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete-, EqualizationPhase1-

这段话网上查询应该是该端口使用gen2 x8,最大峰值带宽32Gb/s,如果算法没错,也就是说理论上这个pcie带宽是瓶颈。

不过根据网上找到的资料显示,上述带宽是指单向带宽,双向的话则理论可以达到64Gb/s。那这里应该不是瓶颈才对。

pcie的带宽总结

http://pjack1981.blogspot.com/2012/05/how-to-know-pci-express-speed-on-server.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值