[转帖]低时延场景下性能优化措施分享

时延,场景,性能,优化,措施,分享 · 浏览次数 : 0

小编点评

**问题背景** 在一些需要实时响应的小包应用场景下,网卡的时延性能尤为重要。 **优化措施** **2.1. 绑核** * 将网卡和应用绑定在同一个numa中。 * 查看下网口对应的numa在哪个节点中。 **2.2.1. 关闭中断聚合** * 关闭中断聚合ethtool -C <ethX> adaptive-rx offethtool –C <ethX> rx‐usecs 02.2.2. **2.2.2. 关闭LROLRO功能** * 关闭LROLRO功能:large-receive-offload,将接收到的多个TCP数据聚合成一个大的数据包,然后传递给网络协议栈处理。 **2.2.3. 关闭服务器的IP转发** * 如果服务器上不需要IP转发,那么可以关掉。 **2.2.4. 适当减小队列深度** * 一般默认为1024,在在时延要求较高的场景,可以考虑队列深度适当降低些。 **2.2.5. 打开TSO功能** * 开启TSO功能TSO:tcp-segmentation-offload利用网卡对TCP数据包分片,减轻CPU负荷当CPU负载较高的时候,可以考虑将其打开。 **2.2.6. 禁用tuned服务** * 启用busy_poll功能设置busy_poll为非零值,启用busy_poll功能。 **2.3. 启用 busy_poll 功能** * 设置busy_poll为非零值,启用busy_poll功能。

正文

https://bbs.huaweicloud.com/blogs/147393

 

 
【摘要】 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. 总结

  • 充分利用网卡能力

  • 充分利用内核特性

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

与[转帖]低时延场景下性能优化措施分享相似的内容:

[转帖]低时延场景下性能优化措施分享

https://bbs.huaweicloud.com/blogs/147393 【摘要】 1. 问题背景在一些需要实时响应的小包应用场景下,网卡的时延性能尤为重要,下面分享一些常见的网卡低时延优化措施。2. 优化措施2.1. 绑核将网卡和应用绑定在同一个numa中。 可以查看下网口对应的numa在

[转帖]使用prlimit命令不重启进程修改其limits等运行参数

https://cloud.tencent.com/developer/article/2127606?areaSource=&traceId= 假设有个场景,数据库或者其它中间件的运行时文件句柄等参数设置过低,导致服务不可用或者间歇性不可用。 但是重启服务的代价可能很大,那么我们也可以不重启进程,

[转帖]高性能 -Nginx 多进程高并发、低时延、高可靠机制在百万级缓存 (redis、memcache) 代理中间件中的应用

https://xie.infoq.cn/article/2ee961483c66a146709e7e861 关于作者 前滴滴出行技术专家,现任 OPPO 文档数据库 mongodb 负责人,负责 oppo 千万级峰值 TPS/十万亿级数据量文档数据库 mongodb 内核研发及运维工作,一直专注于

【转帖】Ethernet 与 Infiniband的网络特性对比

一、两者定位 以太网(Ethernet): 应用最广泛,是最成熟的网络互联技术,也是整个互联网络大厦的基石,兼容性非常好,可实现不同的系统之间的互连互通 IB(Infiniband): 领域很专,作为高带宽,低时延,高可靠的网络互联技术,在HPC集群领域广泛应用,同时,也是GPU服务器首选的网络互联

[转帖]看了阿里云云解析DNS,涨见识了

https://www.jianshu.com/p/8354e647cf71 在学习这篇文章前,只知道DNS就是做域名解析的,查到域名对应的ip就结束了。没成想惊呆了,DNS还有这么大的规模这么低的时延要求。 阿里云DNS是一个复杂的巨型分布式系统。依托云计算丰富的计算和存储资源和技术,阿里云在全球

[转帖]docker使用buildx构建多平台(x86,arm64)构架镜像

https://blog.csdn.net/atzqtzq/article/details/128583331 配置文件激活buildx docker目前使用版本为Server Version: 20.10.7,添加配置支持buildx docker版本较低时,请升级docker版本 $ vim /

[转帖]如何应对变慢的Redis-波动的响应延迟

Redis突然变慢了,如何排查呢 文章目录 问题认定应对方案Redis自身操作特性慢查询命令过期key操作 文件系统AOF解决方案 操作系统Swap内存大页 CheckList 问题认定 如何判断Redis是不是真的变慢了?通过Redis的响应延迟 大部分时候,Redis延迟很低,某些时刻,Redi

[转帖]解释docker单机部署kraft模式kafka集群时,尝试各种方式的网络broker全部不通而启动失败的原因,并提示常见bug关注点

现象: controller节点与其他两个broker的通信失败。公网ip,宿主机ip,服务名,各种网络方式,都无法成功。 两点提示: 1.bug原因:因为单机内存不够用,设置了较低的 KAFKA_HEAP_OPTS 参数值128M,导致broker通信失败! 2.kafka容器启动中,增加 BIT

[转帖]MALLOC_ARENA_MAX=1 与 MALLOC_ARENA_MAX=4有什么区别?

https://www.easyice.cn/archives/341 2019年 Elastic开发者大会的时候我曾经说过 glibc 导致的堆外内存过多问题: 如果应用程序每次分配内存的时候都通过系统调用 mmap,sbrk等来分配,效率会很低,所以glibc 中实现了一个内存池,应用程序使用内

[转帖]新一代垃圾回收器ZGC的探索与实践

1. 引入 1.1 GC之痛 很多低延迟高可用Java服务的系统可用性经常受GC停顿的困扰。GC停顿指垃圾回收期间STW(Stop The World),当STW时,所有应用线程停止活动,等待GC停顿结束。以美团风控服务为例,部分上游业务要求风控服务65ms内返回结果,并且可用性要达到99.99%。