一: 多队列及中断信息收集

[root@T185 ~]# ethtool -g eth0
Ring parameters for eth0:
Pre-set maximums:
RX:
RX Mini:
RX Jumbo:
TX:
Current hardware settings:
RX:
RX Mini:
RX Jumbo:
TX:
[root@T185 ~]# ls /sys/class/net/eth0/queues/
rx- rx- rx- rx- rx- rx- rx- rx- rx- rx- rx- rx- tx- tx- tx- tx- tx- tx- tx- tx- tx- tx- tx- tx-
rx- rx- rx- rx- rx- rx- rx- rx- rx- rx- rx- rx- tx- tx- tx- tx- tx- tx- tx- tx- tx- tx- tx- tx-
[root@T185 ~]# cat /proc/interrupts |less -S
[root@T185 ~]# cat /proc/interrupts
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7 CPU8 CPU9 CPU10 CPU11 CPU12 CPU13 CPU14 CPU15 CPU16 CPU17 CPU18 CPU19 CPU20 CPU21 CPU22 CPU23
: IR-IO-APIC-edge timer
: IR-IO-APIC-edge i8042
: IR-IO-APIC-edge rtc0
: IR-IO-APIC-fasteoi acpi
: IR-IO-APIC-edge i8042
: IR-IO-APIC-fasteoi ehci_hcd:usb1
: IR-IO-APIC-fasteoi ehci_hcd:usb2
: DMAR_MSI-edge dmar0
: DMAR_MSI-edge dmar1
: IR-PCI-MSI-edge aerdrv
: IR-PCI-MSI-edge aerdrv
: IR-PCI-MSI-edge aerdrv
: IR-PCI-MSI-edge aerdrv
: IR-PCI-MSI-edge aerdrv
: IR-PCI-MSI-edge aerdrv
: IR-PCI-MSI-edge aerdrv
: IR-PCI-MSI-edge aerdrv
: IR-PCI-MSI-edge aerdrv
: IR-PCI-MSI-edge aerdrv
: IR-PCI-MSI-edge aerdrv
: IR-PCI-MSI-edge aerdrv
: IR-PCI-MSI-edge aerdrv
: IR-PCI-MSI-edge ahci
: IR-PCI-MSI-edge isci-msix
: IR-PCI-MSI-edge isci-msix
: IR-PCI-MSI-edge eth0-TxRx-
: IR-PCI-MSI-edge eth0-TxRx-
: IR-PCI-MSI-edge eth0-TxRx-
: IR-PCI-MSI-edge eth0-TxRx-
: IR-PCI-MSI-edge eth0-TxRx-
: IR-PCI-MSI-edge eth0-TxRx-
: IR-PCI-MSI-edge eth0-TxRx-
: IR-PCI-MSI-edge eth0-TxRx-
: IR-PCI-MSI-edge eth0-TxRx-
: IR-PCI-MSI-edge eth0-TxRx-
: IR-PCI-MSI-edge eth0-TxRx-
: IR-PCI-MSI-edge eth0-TxRx-
: IR-PCI-MSI-edge eth0-TxRx-
: IR-PCI-MSI-edge eth0-TxRx-
: IR-PCI-MSI-edge eth0-TxRx-
: IR-PCI-MSI-edge eth0-TxRx-
: IR-PCI-MSI-edge eth0-TxRx-
: IR-PCI-MSI-edge eth0-TxRx-
: IR-PCI-MSI-edge eth0-TxRx-
: IR-PCI-MSI-edge eth0-TxRx-
: IR-PCI-MSI-edge eth0-TxRx-
: IR-PCI-MSI-edge eth0-TxRx-
: IR-PCI-MSI-edge eth0-TxRx-
: IR-PCI-MSI-edge eth0-TxRx-
: IR-PCI-MSI-edge eth0
: IR-PCI-MSI-edge eth1-TxRx-
: IR-PCI-MSI-edge eth1-TxRx-
: IR-PCI-MSI-edge eth1-TxRx-
: IR-PCI-MSI-edge eth1-TxRx-
: IR-PCI-MSI-edge eth1-TxRx-
: IR-PCI-MSI-edge eth1-TxRx-
: IR-PCI-MSI-edge eth1-TxRx-
: IR-PCI-MSI-edge eth1-TxRx-
: IR-PCI-MSI-edge eth1-TxRx-
: IR-PCI-MSI-edge eth1-TxRx-
: IR-PCI-MSI-edge eth1-TxRx-
: IR-PCI-MSI-edge eth1-TxRx-
: IR-PCI-MSI-edge eth1-TxRx-
: IR-PCI-MSI-edge eth1-TxRx-
: IR-PCI-MSI-edge eth1-TxRx-
: IR-PCI-MSI-edge eth1-TxRx-
: IR-PCI-MSI-edge eth1-TxRx-
: IR-PCI-MSI-edge eth1-TxRx-
: IR-PCI-MSI-edge eth1-TxRx-
: IR-PCI-MSI-edge eth1-TxRx-
: IR-PCI-MSI-edge eth1-TxRx-
: IR-PCI-MSI-edge eth1-TxRx-
: IR-PCI-MSI-edge eth1-TxRx-
: IR-PCI-MSI-edge eth1-TxRx-
: IR-PCI-MSI-edge eth1
: IR-PCI-MSI-edge eth3
NMI: Non-maskable interrupts
LOC: Local timer interrupts
SPU: Spurious interrupts
PMI: Performance monitoring interrupts
IWI: IRQ work interrupts
RTR: APIC ICR read retries
RES: Rescheduling interrupts
CAL: Function call interrupts
TLB: TLB shootdowns
TRM: Thermal event interrupts
THR: Threshold APIC interrupts
MCE: Machine check exceptions
MCP: Machine check polls
ERR:
MIS:
[root@T185 ~]#

interrupts

二: 设置CPU隔离

在grub.conf 中,增加isolcpus参数。

三: 修改收发包队列数

[root@T185 tong]# ethtool -g eth0
Ring parameters for eth0:
Pre-set maximums:
RX:
RX Mini:
RX Jumbo:
TX:
Current hardware settings:
RX:
RX Mini:
RX Jumbo:
TX: [root@T185 tong]# ethtool -G eth0 rx tx
[root@T185 tong]# ethtool -g eth0
Ring parameters for eth0:
Pre-set maximums:
RX:
RX Mini:
RX Jumbo:
TX:
Current hardware settings:
RX:
RX Mini:
RX Jumbo:
TX:

ethtool

不能设成1, 最小64.所以,对于中断并没有什么影响.这好像不对,不知道这是什么鬼。

下载最新的驱动,https://downloadcenter.intel.com/download/14687 并查看README

Command Line Parameters
-----------------------
If the driver is built as a module, the following optional parameters are used
by entering them on the command line with the modprobe command using this
syntax:
modprobe ixgbe [<option>=<VAL1>,<VAL2>,...] There needs to be a <VAL#> for each network port in the system supported by
this driver. The values will be applied to each instance, in function order.
For example:
modprobe ixgbe InterruptThrottleRate=, 。。。 。。。 Multiqueue
----------
Valid Range:
,
= Disables Multiple Queue support
= Enabled Multiple Queue support (a prerequisite for RSS)

README

README里给的参数竟然不对,尼玛

[root@T185 tong]# modprobe -r ixgbe
[root@T185 tong]# modprobe ixgbe MQ=,
[root@T185 tong]# ls /sys/class/net/eth0/queues/
rx- rx- rx- rx- rx- rx- rx- rx- rx- rx- rx- rx- tx- tx- tx- tx- tx- tx- tx- tx- tx- tx- tx- tx-
rx- rx- rx- rx- rx- rx- rx- rx- rx- rx- rx- rx- tx- tx- tx- tx- tx- tx- tx- tx- tx- tx- tx- tx-
[root@T185 tong]# ls /sys/class/net/eth1/queues/
rx- tx-
[root@T185 tong]#

四:中断绑定:

cpu结构:

[root@T185 tong]# ./cpu_layout.py
============================================================
Core and Socket Information (as reported by '/proc/cpuinfo')
============================================================ cores = [, , , , , ]
sockets = [, ] Socket Socket
-------- --------
Core [, ] [, ]
Core [, ] [, ]
Core [, ] [, ]
Core [, ] [, ]
Core [, ] [, ]
Core [, ] [, ]
[root@T185 tong]#

另外两个工具:lstopo,和hwloc。

中断绑定:

#! /bin/bash

function bind() # $lcpus, $irq_list, $set
{
for i in $
do
echo -n $i ": "
if [ $ -eq ]
then
echo $ > /proc/irq/$i/smp_affinity_list
echo "Done!"
else
cat /proc/irq/$i/smp_affinity_list
fi
done
} function usage()
{
echo "Usage:"
echo -e "\tirq_bind.sh 0(print)/1(set) "
echo
} if [ $# -ne ]
then
usage
exit
fi if [ \( "$1" != "" \) -a \( "$1" != "" \) ]
then
usage
exit
fi irq_list=`cat /proc/interrupts |grep eth0 |awk -F: '{print $1}'`
bind "1,13" "$irq_list" $ irq_list=`cat /proc/interrupts |grep eth1 |awk -F: '{print $1}'`
bind "2,14" "$irq_list" $

注意: 网卡驱动重新加载过了之后,需要重新对中断进行绑定。

五: 发包:

tcpreplay -i eth0 -l0 -L10000000 -p400000 -K syy/.pcap 

六: pktgen-dpdk

http://pktgen-dpdk.readthedocs.io/en/latest/

版本太多,版本间的修改又都比较大。最后pktgen和dpdk都用了当前的最新版本。重要编译通过了,且运行正常了。

tong@zw:~/src$ ls
dpdk-17.05 dpdk-17.05.tar.gz pktgen-3.3. pktgen-3.3..tar.gz

6.1  正常编译dpdk,并正确设置环境变量

make config T=x86_64-native-linuxapp-gcc O=x86_64-native-linuxapp-gcc
make
tong@zw:~/src$ tail -n2 ~/.bashrc
export RTE_SDK=~/src/dpdk-17.05/
export RTE_TARGET=x86_64-native-linuxapp-gcc

6.2   编译并设置 pktgen

make
sysctl -n vm.nr_hugepages=
vim cfg/default.cfg ./tools/run.py -s
hugepages per socket
Set /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages to
Bind devices to DPDK:
['03:00.3']
sudo mount -t hugetlbfs nodev /mnt/huge

6.3  运行

http://pktgen-dpdk.readthedocs.io/en/latest/usage_pktgen.html#usage-pktgen

最终配置如下:

tong@zw:~/src/pktgen-3.3.$ cat cfg/default.cfg
# Setup configuration
setup = {
'devices': [
'03:00.3'
], 'opts': [
'-b igb_uio'
]
} # Run command and options
run = {
'dpdk': [
'-l 4,5',
'-n 1',
'--proc-type auto',
'--log-level 7',
'--file-prefix pg'
], 'blacklist': [
], 'pktgen': [
'-T',
'-P',
'--crc-strip',
'-m [5].0',
], 'misc': [
'-f themes/black-yellow.theme'
]
}
tong@zw:~/src/pktgen-3.3.$

cfg/default.cfg

tong@zw:~/src/pktgen-3.3.$ ./tools/run.py cfg/default.cfg

6.4  使用

Pktgen:/> set  count
Pktgen:/> set size
Pktgen:/> start
Pktgen:/> set size
Pktgen:/> start
Pktgen:/> set size
Pktgen:/> start
Pktgen:/>

发了三次,每次五个包,长度分别为 64 / 512 / 70

详细的参数参考:http://pktgen-dpdk.readthedocs.io/en/latest/commands.html#runtime-options-and-commands

也可以在Pktgen的命令行里 help

还可以用LUA进行配置,但是我不会 http://pktgen-dpdk.readthedocs.io/en/latest/lua.html

6.5  其他

但是所有的 TCP包都是SYN的,不能握手。与我的测试目的还是有些区别。

6.6   发送pcap

  在命令行使用 -s P:PCAP_file 参数。

  在pktgen中使用如下命令:

Pktgen:/> enable  pcap

  使用page pcap命令可以查看pcap详细内容:

Pktgen:/> page pcap

  之后使用正常的命令,便可以发送数据包了。

七。 pktgen-linux

据说之支持 UDP,不支持TCP。

八。测试数据

[development][dpdk][pktgen] 网卡收发包性能测试-详细数据

九。 使用gprof查找性能瓶颈。

  9.1  使用gcc -pg编译

  9.2  正常运行程序,并正常退出,系统会生成一个gmon.out文件。

  9.3  使用如下命令查看输出

    gprof app_name gmon.out

  9.4  通过观察日志,找到性能瓶颈,是一个链表遍历查找的函数。

[development][dpdk][pktgen] 网卡收发包性能测试的更多相关文章

  1. [development][dpdk][pktgen] 网卡收发包性能测试-详细数据

    三层包测试 发包方式:192.168.20.205 发包工具:pktgen 发包网卡:i350 收包设备:1922.168.20.185 CPU:Intel(R) Xeon(R) CPU E5-262 ...

  2. DPDK收发包全景分析

    前言:DPDK收发包是基础核心模块,从网卡收到包到驱动把包拷贝到系统内存中,再到系统对这块数据包的内存管理,由于在处理过程中实现了零拷贝,数据包从接收到发送始终只有一份,对这个报文的管理在前面的mem ...

  3. dpdk网卡收包分析

    一个网络报文从网卡接收到被应用处理,中间主要需要经历两个阶段: 阶段一:网卡通过其DMA硬件将收到的报文写入到收包队列中(入队)阶段二:应用从收包队列中读取报文(出队)由于目前正在使用vpp/dpdk ...

  4. kernel笔记——网络收发包流程

    本文将介绍网络连接建立的过程.收发包流程,以及其中应用层.tcp层.ip层.设备层和驱动层各层发挥的作用. 应用层 对于使用socket进行网络连接的服务器端程序,我们会先调用socket函数创建一个 ...

  5. 代码学习-Linux内核网卡收包过程(NAPI)【转】

    转自:https://blog.csdn.net/crazycoder8848/article/details/46333761 版权声明:本文没有任何版权限制,任何人可以以任何方式使用本文. htt ...

  6. UDP收发buffer尺寸对收发包流量的影响

    下午验证一个高流量发包问题时,发现了一个值得记录的问题:socket的收发buffer尺寸是会影响收发包的效率的,高流量通讯时,若socket的收发buffer尺寸过小会一定程度降低收发包效率. 自己 ...

  7. 交换芯片收发包的 DMA 实现原理

    交换芯片支持:报文.计数.表项3种DMA类型,其中报文DMA包括系统从芯片到接收报文或发送报文到交换芯片,计数DMA用来从片上获取统计计数,表项DMA功能分为SLAM DMA(系统内存DMA到片上交换 ...

  8. Intel X710网卡VxLAN offload 性能测试

    Intel X710网卡VxLAN offload性能测试 1.  测试环境参数: 交换机:盛科E580 服务器: Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz ...

  9. [development][dpdk][hugepage] 大页内存的挂载

    参考: [development][dpdk][hugepage] 为不同的结点分配不同大小的大页内存 完成了以上内容之后, 下一步需要做的是挂载, 大页内存只有被挂载了之后,才能被应用程序使用. 挂 ...

随机推荐

  1. zookeeper的可视化web界面

    转载一篇我心中大神有关zookeeper  WEB的文章 以前写过一篇zookeeper集群搭建的文章<烂泥:zookeeper集群搭建>,最近在使用activemq集群过程中碰到了一些有 ...

  2. Android截图命令screencap与视频录制命令screenrecord

    Android截图命令screencap 查看帮助命令 bixiaopeng@bixiaopeng ~$ adb shell screencap -v screencap: invalid optio ...

  3. halcon模板匹配

    在机器视觉应用中,经常需要对图像进行仿射变换.1.在基于参考的视觉检测中,由于待检图像与参考图像或多或少都会存在几何变化(平移.旋转.缩放等),所以在做比较之前一般都要对待检图像进行仿射变换以对齐图像 ...

  4. git配置用户名邮箱,全局配置/单仓库配置

    在项目根目录下进行单仓库配置(作用域只在本仓库下): git config user.name "gitlab's Name" git config user.email &quo ...

  5. linux 防火墙 ufw使用

    ufw是ubuntu是默认的防火墙配置工具,相对于iptables,ufw使用更加简单 ufw基本操作   1 []是代表可选内容,需要root权限 ufw [--dry-run] enable|di ...

  6. Caltech数据使用详情

    Caltech官网: http://www.vision.caltech.edu/Image_Datasets/CaltechPedestrians/ 以Caltech测试集为例(大概是4095个图片 ...

  7. 牛客网_Go语言相关练习_选择题(3)

    题目来源于牛客网 一.选择题 Go语言自带垃圾回收机制. 如果是值传递的话子函数对map修改不会影响父函数中的map,如果是地址传递则会影响. go语言编译器会自动在以标识符.数字字面量.字母字面量. ...

  8. TI开发环境下载资源

    CCSV7.0 版本下载  http://processors.wiki.ti.com/index.php/Download_CCS IAR7.10 版本下载 https://www.iar.com/ ...

  9. Microsoft.Identity的IPasswordHasher加密的默认实现与运用

    本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文地址  www.cnblogs.com/tdws 相信了解了MS Identity认证体系的一定知道UserManager的作用,他是整个体 ...

  10. Weebly免费自助建站空间:可视化编辑网页搭建网站和绑定域名方法

    Weebly空间来自美国,已经稳定运行了有多年了,2007年被Time 评为50个最佳网站,属自助建站模式,功能强大.部落在09年时介绍了weebly.com自助建站服务,没有想到这多年来,Weebl ...