Facebook发布了可改善Linux中Slab内存控制器的补丁

罗曼·古什钦(Roman Gushchin) (Facebook软件工程师) 注册 在Linux内核开发列表中, 平板控制器内存映射应用程序的一组补丁 (内存控制器)。

新控制器非常出色 通过将slab记帐从内存页面的级别移到内核对象的级别,可以共享不同组c中的slab页面,而不是为每个c组分配单独的slab缓存。

Roman在现有的平板内存控制器中发现了他所谓的“非常严重的缺陷”,这导致cgroup如今的利用率较低。

现有设计导致平板数据利用率低的真正原因很简单:平板页面仅由内存池使用。

如果cgroup仅分配了一定大小的少量分配,或者在删除cgroup之后还有一些活动对象,或者cgroup包含一个几乎没有分配任何内核对象的线程应用程序,但是每次在新的CPU上:在所有这些情况下,最终的板利用率都非常低。

如果禁用kmem记帐,则内核可以将slab页面上的可用空间用于其他分配。 «

拟议的平板存储器控制器 Romano Gushchin在过去的一年中对 提高效率 平板的使用 减少使用的内存大小 板的性能降低了30-45%,并显着减少了总内核内存消耗。

也, 实施的补丁已表明 Facebook已经在其服务器上的生产环境中使用该代码,并且 为前端Web服务器节省〜650-700MB +,数据库缓存和DNS服务器等奖项。

通过减少非移动平板的数量,在减少存储器碎片的领域中也观察到了积极的效果。 新的内存控制器极大地简化了记账单的代码 并且不需要复杂的算法来动态创建和删除每个组c的平板缓存。

在新的实现中,所有用于内存的cgroup都使用一组通用的平板缓存,并且平板缓存的寿命不再与通过cgroup设置的内存约束的寿命挂钩。

从理论上讲,在新的平板控制器中实现的更精确的资源核算应在CPU上增加更多的负载,但实际上差异可以忽略不计。

特别是, 新的平板驱动程序已在Facebook服务器上使用了几个月 在运行中处理不同类型的负载,到目前为止,尚未发现明显的回归。

该补丁包含几个半独立的部分,它们也可以在slab的内存控制器之外找到它们的用途:

  • Subpage Load API,将来可用于计算不是页面大小的其他对象,例如percpu分配
  • 可以将mem_cgroup_ptr API(其中的指针计为memcg)重新使用,以有效地重定义其他对象(例如页面缓存)。

与此同时, 内存消耗显着减少-在某些主机上,可以节省多达1 GB的内存,但是此指示器 在很大程度上取决于负载的性质, RAM的总大小,CPU的数量以及使用内存的特性。

不是为每个内存cgroup创建单独的kmem_caches集,而是使用两个全局集:用于未分配和根组cgroup分配的根集,以及用于所有其他分配的第二组。 这样可以简化单个kmem_caches的生命周期管理。

最后,如果您有兴趣了解新的19个补丁集,可以在列表中找到它。 内核邮件.


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。