他们为Linux内核提出了一个新的内存控制器。

Linux内核

内存管理器是系统的子集 操作 它在操作系统和各种应用程序之间共享内存。 术语“内存”主要是指主内存(RAM),但是其管理需要辅助内存和高速缓存的参与。

内存管理器 特别负责有效地为进程分配内存,这意味着您必须能够列出可用内存的可用位置,分配新进程所需的内存,并从终止的进程中回收内存。 Linux内核中的流程调度程序是SLAB调度程序。

SLAB 依靠优化内存请求的块和缓存系统。 这种类型的内存管理可减少由分配和重定位操作引起​​的碎片。

块分配涉及为某种对象类型/大小实现缓存,该缓存具有几个预先分配的存储块,这些存储块被切成适合特定对象的固定大小的块。

SLAB进行管理,以便在请求内核为对象分配内存时, 您可以使用现有模块中的备件来满足该请求。 当后续分配相似的对象时,SLAB保留分配的内存以供重用,从而减少了与对象初始化相关的开销成本。

他们打算取代SLAB

罗曼·古什钦(Roman Gushchin) 他是Facebook Linux内核工程团队的成员,他发现了当前内存管理器/控制器中的“严重缺陷”。 和最近提出了一种新的内存控制器 堵塞 这有望显着提高多个“ cgroup”之间的内存利用率 (或控制组)来自内存。

鉴于此,重要的是要注意cgroups是Linux内核的功能,它允许限制,计数和隔离对系统资源(处理器,内存,磁盘的使用等)的使用,以及术语“平板页面»可以被SLAB吸收到内存分配过程中。

根据Gushchin的说法:

“现有设计导致SLAB使用率低的真正原因很简单:Slab页面仅由单个内存池使用。

如果cgroup仅分配了一定大小的少量分配,或者在删除cgroup之后还剩下一些活动对象,或者cgroup包含实际上不分配内核的单个线程应用程序,但每次都这样做一个新的CPU:在所有这些情况下,最终的SLAB使用率都很低。

如果禁用kmem计算,则内核可以将切片页面上的可用空间用于其他分配«。

Gushchin认为,将kmem驱动程序作为必须为每个内存池启用的可选功能引入时,这不是问题。

但是现在,默认情况下为cgroup v1和v2启用kmem驱动程序。 而且,由于现代系统倾向于创建大量c组,因此使用SLAB的效果较差。

据他介绍,通过在各个内存组之间共享平板页面 并使用经过重新设计的系统,其中按对象而不是按页面进行记帐, 一个人会在linux内核中有一个优化的内存控制器 这提供了更有效的使用水平。

Gushchin提出的补丁包含两个半独立的元素:一个子页面加载API(将来可用于记账目的)和mem_cgroup_ptr API。

使用新控制器执行的测试 古什钦的记忆 已经表明,在Linux中可以增加35%至42%的内存 在前端Web上,DNS服务器和数据库缓存以及许多其他工作负载。

古什钦的提议目前被冠以“要求发表评论”的旗号。 如果接受,则可以将其集成到2020 Linux内核版本中。

数据来源: https://lkml.org/


发表您的评论

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

*

*

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