我正在运行一个基准来确定我应该允许 GNU Make 使用的作业数量,以便获得最佳编译时间。为此,我使用 N 编译 Glibc,make -j<N>
其中 N 是 1 到 17 的整数。到目前为止,我每次选择 N 都做了 35 次(总共 35*17=595 次)。我还使用GNU Time运行它来确定 Make 花费的时间和使用的资源。
当我分析结果数据时,我注意到一些奇怪的东西。当我达到-j8
.
我还应该注意,8 是我计算机上的 CPU 内核数(或者更具体的超线程数)。
在自愿上下文切换的数量上,我也可以注意到同样的事情,但不那么明显。
为了确保我的数据没有偏差或其他任何问题,我又运行了两次测试,但仍然得到相同的结果。
我正在使用 linux 内核 5.15.12 运行 artix linux。
这些尖峰背后的原因是什么?
编辑:我在 4 核 PC 上再次做了同样的实验。我可以观察到同样的现象,这次是 4 个工作岗位。
此外,请注意 2 个作业标记中主要页面错误的跳跃。
编辑2:
@FrédéricLoyer 建议将页面错误与效率(经过时间的倒数)进行比较。这是一个确切的箱线图:
我们可以看到,随着我们从 1 个工作变为 4 个工作,效率越来越高。但对于更多的工作,它基本保持不变。
我还应该提到我的系统有足够的内存,所以即使有最大数量的作业,我也不会用完内存。我还记录了 PRSS(峰值驻留集大小),这是它的箱线图。
我们可以看到作业的数量根本不会影响内存使用。
EDIT3:正如 MC68020 所建议的,这里分别是 4 核和 8 核系统的 TLBS(事务后备缓冲区击穿)值图: