Используя x86_64 FPU без проверки на irq_fpu_usable, если инструкции xsaveopts поддерживаются процессором

В x86 (_64) контекст irq (как мягкий, так и жесткий irq) сохранение контекста FPU - дорогостоящая деятельность. Поэтому перед использованием FPU выполняется проверка irq_fpu_usable.

Ниже приведены мои вопросы:

  1. Если процессор поддерживает инструкцию xsaveopts, все еще сохраняется FPU - это дорогостоящая деятельность?

  2. Какие проблемы мы можем столкнуться, если мы сохраним контекст FPU в контексте irq.

1 ответ

XSAVEOPTS только предотвращает XSAVEOPTS целых наборов регистров FPU (x87, XMM, YMM), и очень вероятно, что регистры x87 и XMM должны быть сохранены. Так что это все еще будет дорогостоящей операцией.

Обратите внимание, что цель функции ядра Linux irq_fpu_usable заключается в том, чтобы определить, разрешено ли вообще использовать FPU. Он не проверяет, потребует ли использование FPU дорогостоящую деятельность по сохранению контекста FPU, как предполагает ваш вопрос.

Если irq_fpu_usable истинно, и вы irq_fpu_usable использование FPU в kernel_fpu_begin и kernel_fpu_end то использование FPU в контексте IRQ должно быть безопасным. Однако он может быть медленнее, чем альтернативный код, который вообще не использует FPU.

Вы не должны пытаться самостоятельно сохранять контекст FPU, если это то, что вы подразумеваете под своим вторым вопросом.

licensed under cc by-sa 3.0 with attribution.