您好,网络接口层和网络层,注意负责网络包的封装,寻址,路由,转发和接收,在这两个网络协议层中,每秒可以处理的网络包数PPS,就是最终于的性能指标,特别是64B小包的处理能力,值得我们特别关注。
常用的工具,Linux内核自带的高性能网络测试工具 pktgen,支持更丰富的自定义选项,可以更准确的测试出目标服务器的性能
在Linux中部能直接使用 pktgen命令,因为pktgen作为一个内核线程来运行的,需要加载pktgen内核模块后,再通过/proc文件系统来交互
下面是pktgen启动的四个内核线程和/proc文件系统的交互文件
modprobe pktgen
ps -ef | grep pktgen | grep -v grep
root 20211 2 0 10:18 ? 00:00:13 [kpktgend_0]
root 20212 2 0 10:18 ? 00:00:05 [kpktgend_1]
root 20213 2 0 10:18 ? 00:00:05 [kpktgend_2]
root 20214 2 0 10:18 ? 00:00:05 [kpktgend_3]
ls /proc/net/pktgen/
eth0 kpktgend_0 kpktgend_1 kpktgend_2 kpktgend_3 pgctrl
pktgen在每个CPU上启动一个内核线程,并可以通过/proc/net/pktgen 下面的同名文件,跟这些线程交互,而pgctrl则主要用来控制这次测试的开启和停止。
如果modprobe命令执行失败,说明内核没有配置 CONFIG_NET_PKTGEN 选项,这就需要配置pktgen内核模块(即CONFIG_NET_PKTGEN=m)后,重新编译内核,才可以使用。
在使用pktgen测试网络性能时,需要先给每个内核线程kpktgend_X以及测试网卡,配置pktgen选项,然后再通过pgctrl启动测试。
# 定义一个工具函数,方便后面配置各种测试选项
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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。