正文
电力焦虑。
那么问题来了:这些电到底花在哪儿了?
加拿大
滑铁卢大学的研究者发现,仅仅是在网络处理这个“看起来不起眼”的环节,就存在巨大的优化空间。
2、“主动轮询”+“智能切换”,巧妙应对流量波动
要理解这项优化,我们得先了解一点网络栈的“潜规则”。
当服务器收到一个新的网络数据包时,Linux 内核的做法是:立刻发起一个中断请求(IRQ),强行打断 CPU 当前正在执行的任务,转去处理这个包。
乍一看没问题,响应快嘛。但问题在于,这种频繁的“打断—处理—返回”的过程,会导致 CPU 缓存失效,执行效率变低,而且非常耗电。用滑铁卢大学 Cheriton 计算机学院教授 Martin Karsten 的比喻来说:这就像在一个流水线上,一旦有新任务就有人大声喊停,所有人都得停下手中的事赶去处理,反复打断反而影响整体效率。
那有没有可能不被动等待中断,而是“我闲下来自己去看看有没有任务”?而这,正是
Martin Karsten 带领的研究团队
想出的
解决方案。
他们与
内容分发网络公司 Fastly 的首席工程师 Joe Damato 合作,开发出了一段约 30 行的代码,用于改进 Linux 网络流量的处理机制
,
其核心思想是: