开发者社区> 问答> 正文

linux下cpu负载与网络延迟问题

想了很久,还是没搞清楚cpu负载与网络延迟之间的关系。

假如有一程序进程的cpu使用率稳定在60%,而它每秒只处理一条指令。那么就是说1s之内,这个进程有600ms是在处理数据的。也就是说,不考虑其他情况,一条来自网络的指令也要600ms之后才能响应。

这样的话,如果某个功能要求响应时间在250ms之内,那么是不是要求cpu使用率一直在25%之下,这也太浪费了。

另一种情况是,现在很多路由器是使用软件转发的,假如一个路由器的cpu使用率在14%,那么网络响应时间应该不小于140ms才对。但是根据ping的结果来看,并不是这样的。

所以,大家说我是不是哪里搞错了。

展开
收起
a123456678 2016-06-15 14:51:24 3694 0
2 条回答
写回答
取消 提交回答
  • 网络包到了有中断的, 不会由着进程跑完才处理.

    2019-07-17 19:39:15
    赞同 展开评论 打赏
  • 假如没有网络io操作,600ms纯计算任务的时间,突然来了io中断,那么先中断600ms的任务,保存现场,然后处理中断, 执行io响应的计算及内存复制相关任务,假如这些用50ms,然后os进程调度中断,换到那个600ms计算任务继续执行。而且,很多设备-内存读写,低级网卡操作都是硬件实现在设备单元通过总线直接交互处理的。

    宏观来看,相当于650ms计算时间,cpu利用率0.65

    微观来看,进程调度算法用简单的时间片来理解,每个可被调度进程假如1ms,就抡着来执行,而不是一个进程一次执行600ms这是不可能的。具体的你需要查阅操作系统的进程调度部分。

    2019-07-17 19:39:15
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
可编程网络视角的网络创新研究 立即下载
可编程网络和SDN3.0 立即下载
开放促进创新:构建开放网络生态 立即下载