iperf
测试吞吐率
服务端:iperf -u -s
客户端:iperf -u -c 1.1.1.1 -b 500M -t 10
测试结果
------------------------------------------------------------
Client connecting to 192.168.56.106, UDP port 5001
Sending 1470 byte datagrams, IPG target: 22.43 us (kalman adjust)
UDP buffer size: 208 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.56.104 port 50270 connected with 192.168.56.106 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 617 MBytes 517 Mbits/sec
[ 3] Sent 440029 datagrams
[ 3] Server Report:
[ 3] 0.0-10.0 sec 617 MBytes 518 Mbits/sec 0.037 ms 0/440029 (0%)
丢包率为0时,带宽是518Mb。
hping3
# 发送 udp 报文 到 192.168.1.1:80。伪造随机源地址,洪水攻击。
sudo hping3 --udp 192.168.180.133 -p 80 --rand-source --flood
sudo hping3 --udp -s 6666 -p 53 -a 29.29.29.29 --flood 192.168.180.133
可以看到有一个CPU占用率达到接近100%,
查看流量
sar -n DEV 1 5
查看当前主机流量大小在500M左右和iperf结果一致。
hping3功能以及参数介绍:http://e.betheme.net/article/show-225648.html?action=onClick
优化发送流量
考虑先把发送的流量的吞吐大小打上来
思路可以参考:https://segmentfault.com/a/1190000022882475?utm_source=sf-similar-article
观察iperf 打流前后的CPU占用:
执行iperf后CPU占用:
需要注意的是接近100%的值。
参数说明:
1)us和ni高,说明用户态进程占用了较多的CPU ,应该排查进程的性能问题。
2)sy高,说明内核态占用了较多的CPU ,应该排查内核线程或者系统调用的性能问题。3)%CPU这里显示的所有的cpu加起来的使用率,超过100%说明你的CPU是多核的,
4)si CPU服务软中断所耗费的时间总额,这里可以看到接近100%
相关命令
查看每个CPU的占用
运行top后按下键盘1看看,可以显示每个cpu的使用率,top里显示的是把所有使用率加起来。
查看进程的各线程占用CPU的情况
top -H -p
从这里可以到看到多个逻辑CPU并没有占满。
mpstat -P ALL 1 类似top命令有也可以查看CPU的统计信息。
通过这命令也可以到%soft占用经常到100%,
软中断的含义:linux mpstat工具统计的软中断百分比原理_OS Developer的博客-CSDN博客
对于网卡来说,如果每次网卡收包时中断的时间都过长,那很可能造成丢包的可能性
使用中断,中断的时间越短越好,尽快放开处理器,让它可以去响应下次中断甚至进行调度工作。
基于这样的考虑,我们将中断分成了上下两部分,上半部分(硬中断)就是上面说的中断部分,需要快速及时响应,越快结束越好。而下半部分(软中断)就是完成一些可以推后执行的工作。
对于网卡收包来说,网卡收到数据包,通知内核数据包到了,中断处理将数据包存入内存这些都是急切需要完成的工作,放到上半部完成。
而解析处理数据包的工作则可以放到下半部去执行。
软中断通过软件模仿硬件中断的处理过程,但是和硬件没有关系,单纯的通过软件达到一种异步处理的方式。软中断的处理机制还包括tasklet,工作队列等。
依据所处理的场合不同,选择不同的硬件或软件中断机制,网卡收包一般使用软中断,最大程度地交给软中断处理,最大程度简化硬中断处理。
调节发送参数
发包参数-P改成2把线程调整为2个,能看到占用sys比较高的核也会减少。
单线程把发送流量不断调大也可以看到soft的值不断升高,最高达到100%。
此时测试带宽757 Mbits/sec
查看软中断统计
软中断
通过执行cat /proc/softirqs观察到,NET_TX软中断主要发生在CPU0上面,其他CPU上发生的较少。
硬中断
通过cat /proc/interrupts观察到,这个系统网络中断只发生在CPU0上面。
未完待续。。。