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