改变 perf_event_mlock_kb 的后果

Ser*_*rCe 3 linux performance linux-kernel perf

我试图了解更改/proc/sys/kernel/perf_event_mlock_kb.

  • perf的手册页

    非特权用户可以 mlock(2) 的最大页面数。默认值为 516 (kB)。

  • 内核文档

    每 CPU 环形缓冲区的控制大小不计入 mlock 限制。默认值为 512 + 1 页

让我感到困惑的是,两个来源都使用两个不同的单位 - 页数和内存 Kb。同时,_kb名称的后缀暗示该文件定义了 Kb 的数量。

我的理解是否正确,该措辞意味着该数字应该可以通过页面大小来判断,如果我在具有两个 vCPU 的机器上将文件设置为 8046,那么 perf 将能够为事件缓冲区占用多达 16Mb 的内存?

Pet*_*des 5

我认为内核文档缺少一个单元。

它应该是 512 kiB + 1 page = 516 kiB,与文件名和 perf 手册页匹配。如果实际的文件名_kb具有不同的单位,则它仍然不会被命名。

cat /proc/sys/kernel/perf_event_mlock_kb在我的系统上显示516,因此几乎可以确认它在 kiB 中。

数字应该可以通过页面大小来判断

是的,在 x86 上,数字应该可以被 4 整除,以使大小可以被 4k 页面大小整除。

如果不是,内核可能会向上或向下舍入,IDK。

  • 根据[源代码](https://github.com/torvalds/linux/blob/8c2ffd9174779014c3fe1f96d9dc3641d9175f00/tools/perf/util/evlist.c#L917),它被四舍五入到最接近的2的幂。它是零,它似乎四舍五入到可以表示的 2 的最大幂。但是后来根据 [this](https://github.com/torvalds/linux/blob/8c2ffd9174779014c3fe1f96d9dc3641d9175f00/kernel/events/core.c#L5564) 函数中的 mlock 限制再次检查了这个巨大的值,所以它似乎有效正确。 (3认同)