作者 | frederic weisbecker
译者 | 韩志彬
策划 | 闫园园
SUSE Labs 团队深入研究了 Kernel CPU 隔离及其关键组成部分之一:Full Dynticks(或 Nohz Full),并撰写了本系列文章:
CPU 隔离 – 简介CPU 隔离 – Full Dynticks 深探CPU 隔离 – Nohz_fullCPU 隔离 – 管理和权衡CPU 隔离 – 实践
本文为系列的首篇。
CPU 隔离是一套强大的功能,旨在支持那些对延迟或性能有极端要求的工作负载设置。某些 DPDK(数据平面开发套件:https://www.php.cn/link/4f9959469b99179f25fd5cf84f4cde62 CPU 隔离的文档和注释即使没有落后于最新的开发进程,也往往过于分散。理解现有调试范围背后的优势和权衡并非易事。本系列文章旨在阐明并引导用户了解我们在 Linux 社区(https://www.php.cn/link/8deb714d5a66d70cf8deac8cd3f79734 SLE15 产品(https://www.php.cn/link/e913bfa37964c7073c81c32a6d750b99 Linux Kernel 子系统。
回归本源
内核的作用是通过统一接口提供基本服务,从而利用硬件资源作为工作负载运行的基础。
我们可以用城市基础设施来类比:道路、能源、供水、污水处理为人类活动提供支持。每个人都希望基础设施是透明且可靠的。我们希望它们能发挥作用,同时希望永远不要意识到它们的存在。但有时,我们不得不这样做,因为最终每一项基础设施都需要维护。
内核与此类似。它通过系统调用、同步请求提供服务,并通过异步处理来履行职责并维护内部状态,例如中断、计时器和内核线程。当然,这是一种简化的描述,省略了许多细节。
内务管理和内核噪音
如果这些异步工作中的一些对用户有明显影响,比如页面回收(内存交换操作),那么其余的大部分工作都是无感知的。计时器和中断在很短的时间内(通常以微秒计)执行;许多内核线程,其中一些是工作队列,执行时间也不应过长,尤其是它们的 CPU 时间通过调度程序进行平衡的时候。这些内核异步代码片段通常被称为“内务管理”工作。其中一些可以与特定的 CPU 绑定,另一些则可以解除绑定,因此可以在任何 CPU 上执行。
现在,如果多面手用户的工作负载不会因内核管理而产生负担,一些更专业的需求显然可能会受到干扰。对于需要整个 CPU 时间且不能容忍任何时钟周期被占用的处理任务,情况正是如此。DPDK(https://www.php.cn/link/b46825e256dea79fb588e5455ed7fe58 CPU 来实现其目标:例如,希望以最大化方式为客户机提供 CPU 资源的虚拟化主机、为获得稳定结果而进行的 CPU 绑定的基准测试、特定的实时需求等。
定时器中断
让我们从定时器中断出发,更详细地探索内核管理的世界。定时器作为内核的核心组件,过去一直是难以消除的干扰源。中断是指在每个 CPU 上以 100 到 1000 Hz 的频率执行的周期性定时器中断,有些架构提出了更高的数值。它执行多项工作:
运行过期的通用计时器回调跳过 posix CPU 定时器,并运行已经过期的定时器计时:维护内部时钟 (jiffies) 和外部时钟 (gettimeofday())调度程序:维护内部状态、公平性和优先级(任务优先级)维护全局平均负载维护性能事件等
毫无疑问,对于依赖于无干扰、无抖动 CPU 的极端工作负载来说,这种每秒执行 100 到 1000 次的中断可能是一个问题。虽然很快,但这些中断仍然会占用一些 CPU 周期,并会破坏 CPU 缓存,导致在中断后恢复用户任务时丢失缓存。因此,我们希望节省这些工作负载的时间。
这个问题难以解决,因为 CPU 的计时器中断不能像许多其他硬件 IRQ 一样与另一个 CPU 绑定。它也不能采用线程方式。从根本上说,考虑到其工作性质,这个问题必须在 CPU 范围内局部解决。事实上,直到内核版本 2.6.21(2007)发布,打破中断周期的机制根本不存在。其行为如下图所示:
图 1:周期计时器中断的实现
从图中可以看出,中断会盲目触发并一直中断 CPU,无论 CPU 是在内核空间、用户空间还是处于空闲状态。这种布局仍可以使用 CONFIG_HZ_PERIODIC 恢复;早在 2007 年,这种恢复方式必须解决的第一个问题是优化功耗。事实上,当 CPU 空闲时,不需要中断,因为没有真正的工作要做,而 CPU 可以从关闭周期性中断中获益,以进入低功耗模式。这就是 CONFIG_NO_HZ_IDLE(以前称为 CONFIG_NO_HZ: https://www.php.cn/link/dd96eaef5612dd405d9d087ab539e38e:
图 2:dynticks- 空闲计时器中断的实现
请记住:对于以无抖动 CPU 为目标的工作负载,我们更希望在无中断的情况下运行实际任务。详情请关注本系列第二篇文章。
以上就是系统解读CPU 隔离:简介的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/21470.html
微信扫一扫
支付宝扫一扫