调优思路
本章主要是围绕优化网卡性能和利用网卡的能力分担CPU的压力来提升性能。在高并发的业务场景下,推荐使用两块网卡,减少跨片内存访问的次数。即将两块网卡分别绑定在服务器的不同CPU上,每个CPU只处理对应的网卡数据。高并发场景还可以为网卡选择x16的 PCIe 卡。
二、
介绍
ethtool是一个Linux下功能强大的网络管理工具,目前几乎所有的网卡驱动程序都有对ethtool的支持,可以用于网卡状态/驱动版本信息查询、收发数据信息查询及能力配置以及网卡工作模式/链路速度等查询配置。
安装方式
以CentOS为例,使用如下命令安装:
yum -y install ethtool net-tools
使用方式
命令格式:ethtool [参数]
常用参数如下:
参数
说明
ethX
查询ethx网口基本设置,其中x是对应网卡的编号,如eth0、eth1等。
-k
查询网卡的Offload信息。
-K
修改网卡的Offload信息。
-c
查询网卡聚合信息。
-C
修改网卡聚合信息。
-l
查看网卡队列数。
-L
设置网卡队列数。
输出格式:
ethtool -k eth0
Features for eth0:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp-segmentation-offload: on
ethtool -l eth0
Channel parameters for eth0:
Pre-set maximums:
…
Current hardware settings:
…
Combined: 8
ethtool -c eth0
Coalesce parameters for eth0:
Adaptive RX: off TX: off
…
rx-usecs:30
rx-frames:50
…
tx-usecs:30
tx-frames:1
参数含义如下:
参数
说明
rx-checksumming
接收包校验和。
tx-checksumming
发送包校验和。
scatter-gather
分散-聚集功能,是网卡支持TSO的必要条件之一。
tcp-segmentation-offload
简称为TSO,利用网卡对TCP数据包分片。
Combined
网卡队列数。
adaptive-rx
接收队列的动态聚合执行开关。
adaptive-tx
发送队列的动态聚合执行开关。
tx-usecs
产生一个中断之前至少有一个数据包被发送之后的微秒数。
tx-frames
产生中断之前发送的数据包数量。
rx-usecs
产生一个中断之前至少有一个数据包被接收之后的微秒数。
rx-frames
产生中断之前接收的数据包数量。
三、
介绍
strace 是Linux环境下的程序调试工具,用来跟踪应用程序的系统调用情况。strace命令执行的结果就是按照调用顺序打印出所有的系统调用,包括函数名、参数列表以及返回值等。
安装方式
以CentOS为例,使用如下命令安装:
yum -y install strace
使用方式
命令格式:strace [参数]
常用参数如下:
参数
说明
-T
显示每一调用所耗的时间。
-tt
在输出中的每一行前加上时间信息,微秒级。
-p
跟踪指定的线程ID。
输出格式:
18:25:47.902439 epoll_pwait(716, [{EPOLLIN, {u32=1052576880, u64=281463144385648}}, {EPOLLIN, {u32=1052693569, u64=281463144502337}}, {EPOLLOUT, {u32=1052638657, u64=281463144447425}}, {EPOLLIN|EPOLLOUT|EPOLLRDHUP, {u32=1052673241, u64=281463144482009}}, {EPOLLIN|EPOLLOUT|EPOLLERR|EPOLLHUP|EPOLLRDHUP, {u32=1052636016, u64=281463144444784}}], 512, 1, NULL, 8) = 5 <0.000038>
参数含义如下:
参数
说明
18:25:47.902439
为系统调用发生的时间。
epoll_pwait
为系统调用的函数名。
(716…)
括号内的值为函数参数。
=5
为系统调用的返回值。
<0.000038>
为系统调用的执行时间。
四、
原理
网卡自带的内存和CPU使用的内存进行数据传递时,是通过PCIe总线进行数据搬运的。Max Payload Size为每次传输数据的最大单位(以字节为单位),它的大小与PCIe链路的传送效率成正比,该参数越大,PCIe链路带宽的利用率越高。
Transaction Layer Packet
Header
Data Payload
ECRC
修改方式
按照进入BIOS界面的步骤进入BIOS,选择“Advanced > Max Payload Size”,将“Max Payload Size”的值设置为“512B”。