2

我想验证透明大页面(THP)会导致大页面错误延迟,因为 Linux 在将页面返回给用户之前必须将页面归零。THP 比 4KB 页面大 512 倍,因此清除速度较慢。当内存碎片化时,操作系统通常会压缩内存以生成 THP。

所以我想测量轻微的页面错误延迟(成本),但我仍然不知道。

4

1 回答 1

3

检查https://www.kernel.org/doc/Documentation/vm/transhuge.txt文档并在 LWN 和 RedHat 文档中搜索 THP 延迟和 THP 故障。

https://www.kernel.org/doc/Documentation/vm/transhuge.txt说 THP 为零:

默认情况下,内核尝试在读取页面错误时使用巨大的零页面到匿名映射。可以通过写入 0 来禁用巨大的零页面,或者通过写入 1 来启用它:

echo 0 >/sys/kernel/mm/transparent_hugepage/use_zero_page
echo 1 >/sys/kernel/mm/transparent_hugepage/use_zero_page

您可以更改设置(2012 年左右引入:https ://lwn.net/Articles/517465/添加一个巨大的零页面)并测量页面映射和访问延迟。只需使用 rdtsc/rdtscp/CLOCK_MONOTONIC 读取一些系统时间,访问页面,重新读取时间;记录有关时差的统计信息,例如 min/max/avg;绘制直方图 - 计算 0..100、101..300、301..600 ... 范围内有多少差异,以及有多少差异大于某个巨大的值。计数直方图的数组足够小。

您可以尝试带MAP_POPULATE标志的 mmap() - ( http://d3s.mff.cuni.cz/teaching/advanced_operating_systems/slides/10_huge_pages.pdf第 17 页)

RedHat 博客发布了关于 THP 和页面错误延迟的文章(借助他们的 stap SystemTap 跟踪):https ://developers.redhat.com/blog/2014/03/10/examineing-huge-pages-or-transparent-huge-页面性能/

为了防止从页面的先前用户泄漏信息,内核在整个页面中写入零。对于 4096 字节的页面,这是一个相对较短的操作,只需要几微秒。x86 大页面大小为 2MB,是普通页面的 512 倍。因此,该操作可能需要数百微秒并影响延迟敏感代码的操作。下面是一个简单的 SystemTap 命令行脚本,用于显示哪些应用程序将大页面清零以及这些操作需要多长时间。它将一直运行,直到按下 cntl-c。

stap  -e 'global huge_clear probe kernel.function("clear_huge_page").return {
  huge_clear [execname(), pid()] <<< (gettimeofday_us() - @entry(gettimeofday_us()))}'

另外,我不确定这一点,但理论上,Linux 内核可能有一些内核线程在任何应用程序需要它们之前对大页面进行预置零。

于 2017-10-05T05:30:01.650 回答