【问题标题】: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 的检查。

以下是我的问题:

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

  2. 如果我们将 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_beginkernel_fpu_end 中,那么在IRQ 上下文中使用FPU 应该是安全的。然而,它可能比完全不使用 FPU 的替代代码要慢。

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

【讨论】:

    猜你喜欢
    • 2018-08-15
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 2014-09-09
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多