Tickless Linux 内核是否会引入基准时序变化?

Does a Tickless Linux Kernel Introduce Benchmark Timing Variations?

我正在 运行 进行一些基准测试,我想知道使用 "tickless" (a.k.a CONFIG_NO_HZ_FULL_ALL) Linux 内核是否有用或不利于基准测试。

我正在 运行ning 进行的基准测试每次都会使用新流程重复多次。我想控制尽可能多的变异源。

我在网上做了一些阅读:

从这些来源我了解到:

一方面,不让基准接收报价似乎是个好主意,因为我们排除了报价例程作为变化来源的可能性(我们不知道报价例程需要多长时间)。另一方面,我认为 tickless 模式可能会引入基准计时的变化。

考虑我在 tickless 内核上的基准测试场景 运行ning。假设我们重复基准测试两次。

我们知道滴答会影响性能(上下文切换加上 运行 例程所花费的时间)。因此,第一个基准 运行 具有不公平的优势,并且看起来 运行 更快。

另请注意,最初对自身具有自适应滴答 CPU 的基准测试可能会发现,在基准测试中,另一个进程被抛到相同的 CPU 上。在这种情况下,基准最初不接收报价,然后开始接收报价。这意味着基准性能会随着时间的推移而变化。

所以我认为 tickless 模式(至少在我的基准测试场景下)引入了时间变化。我的推理正确吗?

一种解决方案是使用隔离的自适应滴答 CPU 进行基准测试 (isolcpus + taskset),但是我们已经排除了隔离的 CPUs因为这在我们的多线程基准测试中引入了人为的减速。

谢谢

对于上面的 "unlucky" 场景,必须在同一个处理器上安排一个活动作业。假设您有多个处理器,在其他通常空闲的系统上不太可能出现这种情况。即使这种情况发生一两次,这也意味着您的基准测试可能会看到一两个报价的影响 - 这看起来几乎没有问题。

另一方面,如果它发生在更多场合,这将是处理器负载高的一般指示 - 无论如何都不是 运行 基准测试的理想情况。

不过,我建议 "ticks" 不太可能成为基准时间变化的重要来源。调度程序应该是 O(1)。我怀疑您会发现 tickless 和 non-tickless 模式之间的差异很大。