使用x86_64 FPU而不检查irq_fpu_usable,如果处理器支持xsaveopts指令

时间:2014-07-31 20:03:25

标签: assembly linux-kernel x86 aes x86-64

在x86(_64)irq上下文(软和硬irq)中,保存FPU上下文是一项昂贵的活动。所以在使用FPU之前,完成了irq_fpu_usable检查。

以下是我的问题:

  1. 如果处理器支持xsaveopts指令,则仍在保存 FPU是一项昂贵的活动吗?

  2. 如果我们在irq上下文中保存FPU上下文,我们可能会遇到什么问题。

1 个答案:

答案 0 :(得分:2)

XSAVEOPTS仅阻止保存整个FPU寄存器集(x87,XMM,YMM),并且很可能需要保存x87和XMM寄存器。所以它仍然是一项昂贵的操作。

请注意,Linux内核函数irq_fpu_usable的目的是确定是否允许使用FPU。它没有测试使用FPU是否需要像你的问题所暗示的那样节省FPU上下文的昂贵活动。

如果irq_fpu_usable为真且您在kernel_fpu_beginkernel_fpu_end中使用FPU,那么在IRQ上下文中使用FPU应该是安全的。然而,它可能比根本没有使用FPU的替代代码慢。

如果你的第二个问题是你的意思,你不应该自己尝试保存FPU上下文。