低时延场景下性能优化措施分享

举报
大猩猩@汪汪队 发表于 2020/02/13 15:12:49 2020/02/13
【摘要】 1. 问题背景在一些需要实时响应的小包应用场景下,网卡的时延性能尤为重要,下面分享一些常见的网卡低时延优化措施。2. 优化措施2.1. 绑核将网卡和应用绑定在同一个numa中。 可以查看下网口对应的numa在哪个节点中。# cat /sys/class/net/enp3s0/device/numa_node0如上所示,网口enp3s0绑定在numa0上。 下面举例通过命令将网卡、应用绑定在同...

1. 问题背景

在一些需要实时响应的小包应用场景下,网卡的时延性能尤为重要,下面分享一些常见的网卡低时延优化措施。


2. 优化措施


2.1. 绑核

将网卡和应用绑定在同一个numa中。
可以查看下网口对应的numa在哪个节点中。


# cat /sys/class/net/enp3s0/device/numa_node
0

如上所示,网口enp3s0绑定在numa0上。
下面举例通过命令将网卡、应用绑定在同一个numa上。


2.1.1. 网卡绑核

  • 关闭IRQ balancer


service irqbalance stop
  • 查询网络设备所占用的IRQ


# cat /proc/interrupts | grep enp3s0 | awk -F ':' '{print $1}' 
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
  • 根据中断号,把中断绑在对应numacore


echo 0 > /proc/irq/390/smp_affinity_list
echo 1 > /proc/irq/391/smp_affinity_list
echo 2 > /proc/irq/392/smp_affinity_list
echo 3 > /proc/irq/393/smp_affinity_list
echo 4 > /proc/irq/394/smp_affinity_list
echo 5 > /proc/irq/395/smp_affinity_list
echo 6 > /proc/irq/396/smp_affinity_list
echo 7 > /proc/irq/397/smp_affinity_list
echo 8 > /proc/irq/398/smp_affinity_list
echo 9 > /proc/irq/399/smp_affinity_list
echo 10 > /proc/irq/400/smp_affinity_list
echo 11 > /proc/irq/401/smp_affinity_list
echo 12 > /proc/irq/402/smp_affinity_list
echo 13 > /proc/irq/403/smp_affinity_list
echo 14 > /proc/irq/404/smp_affinity_list
echo 15 > /proc/irq/405/smp_affinity_list

P.S. 上述操作需要root权限

可以通过如下命令确认下是否绑核成功


# for i in `cat /proc/interrupts |grep -i enp3s0 | cut -d : -f1`; do cat /proc/irq/${i}/smp_affinity_list; done
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15


2.1.2. 应用绑核

例如,可将测试程序绑定在16-23核上


taskset -c 16-23 ./perf_test arg_list


2.2. 网卡中断相关参数修改


2.2.1. 关闭中断聚合


ethtool ‐C <ethX> adaptive‐rx off
ethtool –C <ethX> rx‐usecs 0


2.2.2. 关闭LRO

LRO功能:large-receive-offload,将接收到的多个TCP数据聚合成一个大的数据包,然后传递给网络协议栈处理。在时延要求较高的场景,可以考虑将此功能关闭:
查看:ethtool -k <网卡名称>
设置:ethtool -K <网卡名称> lro off
P.S. 如果中断聚合已经关闭了,那么启用LRO与否都无影响。


2.2.3. 关闭服务器的IP转发

如果服务器上不需要IP转发,那么可以关掉。


sysctl ‐w net.ipv4.conf.default.forwarding=0


2.2.4. 适当减小队列深度

网卡硬件队列深度:过小影响收发性能,过大则影响cache命中,需要结合实际业务场景调整。
一般默认为1024,在在时延要求较高的场景,可以考虑队列深度适当降低些。
查看:ethtool -g <网卡名称>
设置:ethtool -G <网卡名称> rx <M> tx <N>


2.2.5. 打开TSO功能

TSO:tcp-segmentation-offload
利用网卡对TCP数据包分片,减轻CPU负荷
CPU负载较高的时候,可以考虑将其打开。
查看:ethtool -k <网卡名称>
设置:ethtool -K <网卡名称> tso on


2.2.6. 禁用tuned服务


systemctl stop tuned
systemctl disable tuned


2.2.7. 启用busy_poll功能

设置busy_poll为非零值,启用busy_poll功能。


sysctl net.core.busy_poll=50 && sysctl net.core.busy_read=50


3. 总结

  • 充分利用网卡能力

  • 充分利用内核特性

  • 关闭对时延造成影响的系统服务


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。