gettimeofday() 是否会因为最近宣布的 Intel bug 的修复而变慢?

juh*_*ist 4 intel linux-kernel vdso

我一直在使用netmap估计最近宣布的英特尔错误对我的数据包处理应用程序的影响。到目前为止,我测量到每个poll()系统调用处理大约 50 个数据包,但这个数字不包括gettimeofday()调用。我还测量到每秒可以从不存在的文件描述符中读取 1650 万次(这大约是系统调用可以执行的最便宜的操作)。我的数据包处理速率是每秒176万个数据包,或者就系统调用而言,每秒0.352万个系统调用。这意味着如果系统调用惩罚加倍,性能将降低 0.0352 / 16.5 = 0.21333%,这几乎是我不应该担心的事情。

但是,我的应用程序可能gettimeofday()经常使用系统调用。我的理解是,这些不是真正的系统调用,而是作为虚拟系统调用实现的,如什么是 vdso 和 vsyscall?

现在,我的问题是,对最近宣布的 Intel bug 的修复(也可能影响 ARM,但可能不会影响 AMD)是否会减慢gettimeofday()系统调用速度?或者是gettimeofday()由于作为不同类型的虚拟系统调用而实现的完全不同的动物?

Bee*_*ope 5

一般来说,没有。

当前的补丁将 vDSO 页面等内容保留在用户空间中映射,并且仅更改其余绝大多数仅内核页面的行为,这些页面将不再映射在用户空间中。

在大多数体系结构上,gettimeofday()作为纯粹的用户空间调用实现,并且从不进入内核,不包括 KPTI 暗示的 TLB 刷新或 CR3 开关,因此您不会看到性能影响。

例外情况包括不使用 vDSO 机制的异常内核或硬件配置,例如,如果您没有常量rdtscrdtsc通过启动参数显式禁用了计时。您可能已经知道情况是否如此,因为这意味着gettimeofday需要 100-200 纳秒而不是 15-20 纳秒,因为它已经在进行内核调用。