我又对LWN感到困惑了。
大页面、慢速驱动和长时间延迟——LWN.net,2011
这是一种罕见的事件,但一旦发生就一点也不好玩了。插入一个慢速存储设备(例如 USB 记忆棒或音乐播放器),然后运行 rsync 之类的命令将大量数据移动到该设备。手术需要一段时间,这并不奇怪;更令人惊讶的是当随机过程开始停滞时......
一个进程(例如 Web 浏览器)在发生页面错误时正在执行其工作......如果透明大页面功能内置于内核中(大多数经销商都启用此功能),页面错误处理程序将尝试分配一个大页面。
我可以看到,在 Red Hat Enterprise Linux 上,按照 LWN 的描述启用了透明大页面。
如何在 Red Hat Enterprise Linux 6 和 7 中使用、监控和禁用透明大页?
RHEL 6 中默认为所有应用程序启用透明大页 (THP)...
对于 RHEL 7,请参阅如何在 Red Hat Enterprise Linux 7 上禁用透明大页 (THP)。对于 RHEL 8,请参阅如何在 Red Hat Enterprise Linux 8 上禁用透明大页 (THP)。 [仅限订阅者的内容链接]。
然而,我查看了我的 Fedora Workstation 29 笔记本电脑,发现“所有应用程序”都没有启用透明大页面。
$ cat /sys/kernel/mm/transparent_hugepage/enabled
always [madvise] never
$ uname -r
4.19.13-300.fc29.x86_64
我还检查了一些虚拟机:我在 Ubuntu Desktop 18.04(内核 4.15.0-43-generic)和 Debian 9 桌面安装(内核 4.9.0-8-amd64)上看到了同样的情况。 (而且我不相信 Debian 有“服务器”安装、旋转或软件包。它只是有一些不同的“任务”来安装最常见的服务器软件。所以我不认为 Debian 中有任何一个地方这可能会启用特定于服务器的配置)。
- Fedora Server 29 是否为所有应用程序启用透明大页面?
- Ubuntu Server 18.04 是否为所有应用程序启用透明大页面?
- 这些发行版之一的不同版本号是否为所有应用程序启用了透明大页面,例如 2011 年左右?
[言外之意:LWN.net 这里正确还是错误?如果它曾是正确地说,大多数发行商启用了透明大页,并暗示它影响了一些常见的“桌面”(或笔记本电脑)设置,我们是否知道为什么当前版本的 Fedora Workstation、Debian 和 Ubuntu Desktop 没有为所有人启用透明大页?]
答案1
@Stephen_Kitt 报告说“Debian 6 于 2011 年发布,内核为 2.6.32,没有透明的大页面,它有巨大的lbfs。Debian 从 2.6.38 到 4.13 使用了“madvise”,它切换到“总是”。因此,Debian 7 到 9 使用“madvise”,而 Debian 10 将使用“always”。”
据报告,服务器上安装的某些 Ubuntu 为所有应用程序启用了大页面。 (也就是说,网络搜索发现一些用户询问如何在安装的 Ubuntu 上禁用大页面:-)。 )。其中一些特别提到了 EC2 镜像。 @couling 报告他们在 AWS 上的 Ubuntu 服务器并未为所有应用程序启用大页面。所以对于 Ubuntu Server 来说似乎有点难以回答。然后我发现了 AskUbuntu 问题,“在哪里可以获得 [Ubuntu] 11.04 内核 .config 文件?”。
在 Ubuntu 16.04 中,可以使用特定的构建,例如 AWS(Amazon Web Services)。查看内核版本4.4.0-125.150,AWS 内核已启用TRANSPARENT_HUGEPAGES_ALWAYS
。然而通用内核没有。
在Ubuntu 18.04中,通用内核仍然没有启用TRANSPARENT_HUGEPAGES_ALWAYS
。
乌班图11.10于 2011 年 10 月发布,可能是第一个TRANSPARENT_HUGEPAGES
启用的版本。貌似没有启用TRANSPARENT_HUGEPAGES_ALWAYS
。
我认为当前的 SLES - SUSE Linux Enterprise 版本 15,以及至少版本 12 和 11 - 也与当前的 RHEL 设置匹配。即它们为所有应用程序启用透明的大页面。
[暗示:LWN.net 此处正确与否?]
内核开发人员 Mel Gorman 引用的所有三个错误报告都涉及复制到速度慢的 USB 记忆棒或 SD 卡时受影响的网络浏览器。所以这篇文章的观点是有根据的。其中一份报告是“SUSE 内部的”。在另外两种情况下,并不能立即清楚内核配置的来源。
正如 @couling 指出的,如果 sysfs 文件显示[madvise]
,则不应说 THP 已完全禁用。这仅意味着 THP 不会自动应用于所有应用程序,就像本[always]
例一样。至少在某种程度上,LWN 文章掩盖了这种区别 - 关于 Web 浏览器,“透明大页面功能内置于内核中”和“页面错误处理程序将尝试分配大页面”之间的区别已知不能使用MADV_HUGEPAGE
。显然,大多数分销商都支持前者,但后者的说法对我来说不太清楚。
我注意到根据源代码,当您选择启用内核配置时TRANSPARENT_HUGEPAGE
,默认配置是(并且一直是)启用TRANSPARENT_HUGEPAGE_ALWAYS
。
也许 LWN 误解了这一点。或者可能是随 发布的发行版内核出现了短暂的激增TRANSPARENT_HUGEPAGE_ALWAYS
,然后在发现一系列潜在缺点后又将其恢复:-)。我不知道。