【性能】如何来测试网络包的处理能力呢?

带宽、吞吐量、延时、PPS 等,都是最常用的网络性能指标。

Linux 网络基于 TCP/IP 协议栈构建,而在协议栈的不同层,我们所关注的网络性能也不尽相同。

在应用层,我们关注的是应用程序的并发连接数、每秒请求数、处理延迟、错误数等,可以使用 wrk、JMeter 等工具,模拟用户的负载,得到想要的测试结果。

而在传输层,我们关注的是 TCP、UDP 等传输层协议的工作状况,比如 TCP 连接数、 TCP 重传、TCP 错误数等。此时,你可以使用 iperf、netperf 等,来测试 TCP 或 UDP 的性能。

再向下到网络层,我们关注的则是网络包的处理能力,即 PPS。Linux 内核自带的 pktgen,就可以帮你测试这个指标。


我们首先来看,网络接口层和网络层,它们主要负责网络包的封装、寻址、路由以及发送和接收。

在这两个网络协议层中,每秒可处理的网络包数 PPS,就是最重要的性能指标。特别是 64B 小包的处理能力,值得我们特别关注。

那么,如何来测试网络包的处理能力呢?

# cat test.sh

##################################################

# 定义一个工具函数,方便后面配置各种测试选项

function pgset() {

    local result

    echo $1 > $PGDEV

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

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

        cat $PGDEV | fgrep Result:

    fi

}

# 为 0 号线程绑定 eth0 网卡

PGDEV=/proc/net/pktgen/kpktgend_0

pgset "rem_device_all"  # 清空网卡绑定

pgset "add_device eth0"  # 添加 eth0 网卡

# 配置 eth0 网卡的测试选项

PGDEV=/proc/net/pktgen/eth0

pgset "count 1000000"    # 总发包数量

pgset "delay 5000"      # 不同包之间的发送延迟 (单位纳秒)

pgset "clone_skb 0"      # SKB 包复制

pgset "pkt_size 64"      # 网络包大小

pgset "dst 192.168.0.30" # 目的 IP

pgset "dst_mac 11:11:11:11:11:11"  # 目的 MAC

# 启动测试

PGDEV=/proc/net/pktgen/pgctrl

pgset "start"

##################################################




©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容