使用pktgen发包程序测试程序的收包
ifconfig eth2 up
执行下面的脚本
cat /proc/net/pktgen/eth2可以查看发包的速率等
参考
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