网络内核可调项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| (网线) 1.电信号被网卡芯片解码,转换成以太网帧 (网卡) 2.网卡DMA引擎将帧直接写入环形缓冲区 3.缓冲区达到阈值之后,网卡触发硬中断(缓冲区满时新的帧会被丢弃 4.内核中断处理程序标记需要处理的帧,并触发软中断来处理硬中断 5.数据从环形缓冲区复制到内核协议栈内存,方便软中断单独处理 6.软中断剥离包,并判断是给本机还是转发的 (应用层) 7.如果报文的目的地是本地,放入socket接收缓冲区,复制到用户空间内存
1.应用调用write()将数据放入Socket发送缓冲区 (内核) 2.协议栈封装 3.协议栈将帧放入环形缓冲区(TX Ring) 4.网卡通过DMA获取帧数据 5.发送完成后触发发送完成中断
环形缓冲区是网卡和内核的交接区 任何环节积压都会导致丢包 调优本质:扩大缓冲区 or 加速处理能力
|
调优缓冲区大小
网络缓冲区包括
核心网络读和写缓冲区(用于UDP和TCP)
每个套接字TCP读和写缓冲区
碎片缓冲区
用于网卡的DMA缓冲区
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| 内核可调项
net.ipv4.tcp_mem net.ipv4.udp_mem 总的tcp/udp缓冲区。有三个值(单位:页) min pressure 超过时,内存介入调整,使其低于min max 所有套接字排队的最大内存量
net.core.rmem_max net.core.wmem_max 核心网络的最大套接字接收/发送缓冲区。单位字节
net.ipv4.tcp_rmem net.ipv4.tcp_wmem 套接字TCP读写缓冲区,单位字节,不能超过上面的缓冲区大小
|
带宽延迟乘积BDP
BDP表示“正在链路上传输的数据总量”
当水龙头打开后,水需要一定时间才能从一端到达另一端。水管中始终充满水,这些水就是“在途数据”。
如果发送方发送的数据量小于BDP,管道就没有被充分利用,因为等到时网络一直没有被使用
要最大化利用网络链路,就需要对BDP进行调优
1 2 3 4 5 6 7 8 9 10
| 1.计算延迟 通过网络ping就可以看到延迟 2.计算BDP=带宽×延迟 3.设置TCP窗口≥DBP
调优缓冲区大小 sysctl -w net.ipv4.tcp_wmem='<最小值> <默认值> <窗口最大值>'
默认情况下窗口最大限制为64kiB 如果net.ipv4.tcp_windows_scaling=1 内核将尝试协商窗口缩放
|
巨型帧设置
1
| nmcli con modify ens33 802-3-ethernet.mtu 9000
|
qperf网络测试工具
qperf 是一个强大的网络性能测试工具,用于测量两个节点之间的带宽(bandwidth)和延迟(latency)。它支持 TCP/IP、RDMA、UDP、SCTP 等多种协议,特别适合测试高速网络性能(如 InfiniBand、RoCE)。
qperf的使用需要两台服务端和测试端共同协作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| yum -y install qperf
qperf
qperf 192.168.10.250 tcp_bw tcp_lat udp_bw udp_lat tcp_bw: bw = 118 MB/sec tcp_lat: latency = 169 us udp_bw: send_bw = 120 MB/sec recv_bw = 120 MB/sec udp_lat: latency = 162 us
|
相关参数
参数 |
说明 |
示例 |
tcp_bw |
TCP 带宽测试 |
qperf 192.168.1.100 tcp_bw |
tcp_lat |
TCP 延迟测试 |
qperf 192.168.1.100 tcp_lat |
-t |
测试持续时间(秒) |
-t 5 |
--msg_size |
消息大小(字节) |
--msg_size 65536 |
-v |
显示详细输出 |
qperf -v 192.168.1.100 tcp_bw |
-lp |
本地监听端口 |
qperf -lp 5555 |
-ip |
指定服务器端口 |
qperf 192.168.1.100 -ip 5555 tcp_bw |