Linux 机器系统负载(load average)高会影响 ping 值吗(单纯地通过 ICMP 获得的值)? 在 load average 高并且进出带宽够用的情况下, 可以通过提高服务器进程的优先级来缩短响应时间吗?

2021-01-07 14:15:07 +08:00
 goforwardv2

由于 ICMP 有时会被中间路由封掉,所以写了一个 UDP 的服务器, 通过 UDP 包的往返时长计算 ping 值。但是当 UDP 服务器所在的机器高负载时,ping 值会时不时的升高。升高的原因可能有两个:

  1. 网络抖动
  2. UDP 服务器响应慢

对于(2)可否通过提高 UDP 服务器的优先级来缩短响应时间?

1628 次点击
所在节点    程序员
6 条回复
markgor
2021-01-07 14:24:17 +08:00
负载高会影响,特别是云服务器,影响更加厉害。
lvzhiqiang
2021-01-07 14:24:51 +08:00
保证 UDP 服务器的 CPU 资源使用的情况下,理论是可以缩短响应时间。 毕竟,多个进程争抢 CPU 资源,优先级高的肯定能优先满足。
hatebugs
2021-01-07 15:09:40 +08:00
1. 先看 load 高是不是 D 状态占用的,如果 CPU 使用率不高,ping 结果影响应该不大,如果是 CPU 使用率高,会影响 ICMP 的延时,因为 CPU 要对包进行封包解包处理。
2.高服务器进程的优先级在 CFS 下会让 CPU 调用的 vruntime 增加,可以让进程获得更多的 CPU 资源来处理要干的事,具体缩短响应时间可以有好多方法来优化。
性能优化需要综合考虑,不是非黑即白
12101111
2021-01-08 09:26:48 +08:00
ICMP ECHO 是内核处理的, UDP 是用户态处理的, 调整调度上的优先级可以提高响应时间,但是肯定不会减小到 ICMP 的水平
goforwardv2
2021-01-08 11:42:50 +08:00
@hatebugs 通过 top 和 sar 等命令观察, 高负载时 cpu 确实满了。 同时 iowait 基本为 0. 没有 D 状态进程。 但是当 cpu 降下来之后,idle 高于 80%时,无 D 状态进程时, 平均负载还是会高, 要 3 分钟之后才恢复正常。平均负载的第一个参数不是反映的是过去 1 分钟的负载吗, 怎么没有及时刷新? 求大佬高见。
hatebugs
2021-01-09 21:24:03 +08:00
@goforwardv2 load 内核计算就是会有延迟的,而且 load 只要不比 cpu 个数高就没事。可以用 perf 或其他工具看下 cpu 使用的热点函数在哪,具体的去优化。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/742540

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX