【问题标题】:using x86_64 FPU with out checking for irq_fpu_usable, if xsaveopts instructions is supported by processor如果处理器支持 xsaveopts 指令,则使用 x86_64 FPU 而不检查 irq_fpu_usable
【发布时间】:2014-07-31 20:03:25
【问题描述】:
在 x86(_64) irq 上下文(软中断和硬中断)中,保存 FPU 上下文是一项昂贵的活动。所以在使用 FPU 之前,先做 irq_fpu_usable 的检查。
以下是我的问题:
如果处理器支持 xsaveopts 指令,仍在保存
FPU 是一项昂贵的活动?
如果我们将 FPU 上下文保存在 irq 上下文中可能会遇到什么问题。
【问题讨论】:
-
crypt 是不同的东西,几乎没有追随者,试着让你的问题尽可能明显,例如通过提及语言/运行时。
标签:
assembly
linux-kernel
x86
aes
x86-64
【解决方案1】:
XSAVEOPTS 仅阻止保存整个 FPU 寄存器集(x87、XMM、YMM),并且很可能需要保存 x87 和 XMM 寄存器。所以它仍然是一项昂贵的操作。
请注意,Linux 内核函数irq_fpu_usable 的目的是确定它是否完全允许使用 FPU。正如您的问题所暗示的那样,它没有测试使用 FPU 是否需要昂贵的活动来保存 FPU 上下文。
如果irq_fpu_usable 为真并且您将FPU 的使用包装在kernel_fpu_begin 和kernel_fpu_end 中,那么在IRQ 上下文中使用FPU 应该是安全的。然而,它可能比完全不使用 FPU 的替代代码要慢。
如果您的第二个问题是这个意思,您不应该尝试自己保存 FPU 上下文。