返回开发者新闻

资源控制演示:借助模拟优化资源控制

2022年5月24日发布者:Tejun Heo

本博文将解释系统为何需要资源控制,说明开发者如何借助 resctl-demo 项目构建直观有效的资源控制知识,并将这些知识用于改善服务器的可靠性、响应能力及使用率。

大部分现代系统(例如服务器、笔记本电脑,甚至是手机)都会同时运行多项任务,它们可能同时运行网络浏览器和某项编译作业,也可能同时运行网络浏览器和执行监控及管理作业或多个数据库实例的主机。假设您正在运行网络服务器,而且曾经遇到过一些故障:监控应用程序运转失常,不断消耗内存,最终导致系统因颠簸而关闭。您肯定更希望系统终止并重启监控应用程序,而不是关闭整个系统。肯定有办法做到这样,对吧?

其中一个解决方案就是保护网络服务器的内存,使其不受系统其余部分的影响。我们可以设置允许系统其余部分使用的内存上限,但是考虑到事物的动态性,要想找出正确的上限值非常困难。网络服务器并非总是处于满载状态,所以更好的做法是让系统其余部分也可以使用任何可用内存。

假设您决定使用 memory.low 来保护网络服务器的内存,并在 systemd-oomd 中使用交换不足终止,这样在交换耗尽后,系统就会终止运转失常的应用程序。然而,部署此配置后,计算机虽然不再暂停运行,但是您发现如果监控应用程序运转失常,网络服务器仍会受到严重波及。这是为什么呢?

资源控制演示简介

资源控制背后的理念是要优化系统资源在不同工作负载之间的分配情况。通过资源控制可以实现不同任务共享系统资源,而不会彼此干扰。这样,系统就可以托管多项工作负载,并且避免各项负载互相牵累。在 Linux 中,cgroup(控制组)提供基本的资源控制功能。 cgroup 将系统中的工作负载整理成树形结构,并且配置不同层级间的资源分配。

然而,资源与配置间的互动有时候很复杂,而且可能出乎意料。因此,Meta 内核团队设计了 resctl-demo 项目,该项目使用模拟的工作负载再现资源争用情况,并演示和记录解决方案。

我们看看能否使用 resctl-demo 模拟上述网络服务器问题:

在以上图片中,只有左侧中部窗口的图表及右侧底部的命令和文档面板有助于实现我们的目的。在右侧,可以看到启用 rd-hashd 后, 其负载级别 (Load level) 达到了 100%rd-hashd 是模拟工作负载,用于模仿 Meta 典型生产网络服务器的内存和 IO 要求。您可以看到,只有内存保护处于开启状态,可应用适当的 memory.low 保护。在图表窗口中,绿色的线表示吞吐量,蓝色的线表示模拟网络服务器每个请求的平均延迟。您可以看到,网络服务器的负载骤增,接近 100%,延迟也陡然延长至 75 毫秒(我们的目标延迟数值)。

光标(绿色高亮部分)已经放在 冷内存黑洞 (Cold memory hog) 触发模块上。按下“Enter”键,看看会发生什么:

可以看到,图表的时间范围已经被压缩,按 t 可以显示更大的范围。延迟骤增,而且 RPS 大幅下滑,一度接近 0。中断 100 秒左右虽然要比整个计算机暂停运行好得多,但是还远远谈不上让人满意。按下 g,看看图表视图:

右侧的两个图表显示,在中断期间,内存和 IO 压力有所上升。我们保护了 rd-hashd 的内存,但是没有保护 IO。rd-hashd 有基准 IO 要求。虽然内存争用的情况有所缓和,但是仍然愈演愈烈,这就导致这种要求越来越高。由于我们不控制 IO,内存黑洞会对 rd-hashd 产生负面影响。让我们启用 IO 控制,再次模拟相同情况:

除了启用 IO 保护外,包括时间在内的所有内容都与之前模拟的情况相似。但是,这次却没有出现 RPS 急剧下降的情况。让我们查看相同的图表视图,看看有什么不同:

现在,包含 rd-hashd 的 workload 切片只出现了轻微的内存和 IO 压力,而托管内存黑洞的 system 则遭遇了非常大的内存和 IO 压力。我们通过对系统备用部分进行节流来保护主要工作负载,所以这符合我们的预期。

这个例子展示了内存和 IO 控制如何彼此互动。正如您所看到的,虽然内存是争用的焦点,但是光保护内存并不够。

多年来,我们一直致力于实现机群的资源控制,优化众多 cgroup 功能,开发功能强大的工具,以及完善最佳实践。我们还尽力确保资源控制方法的普遍适用性和稳定性,以便能将其应用于任何网域中的系统,而不是仅限于专用服务器设置。

立即体验!

resctl-demo 项目通过实时演示场景详尽介绍资源控制的各方面内容。为让测试更加轻松,我们提供了 Amazon 系统映像 (AMI),可用于启动 AWS 中完整配置的实例;还提供了 USB 驱动映像,可在本地计算机进行安装。您可以前往资源控制演示网站,获取预制的系统映像及各类演示场景的文档。

资源

请观看以下演示视频,了解网络服务器问题及其解决方案:

发生错误
播放视频时出错

如需了解有关 Meta Open Source 的更多信息,请访问我们的 Open Source 网站、订阅我们的 YouTube 频道,或在 TwitterFacebookLinkedIn 上关注我们。