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