Изучая WFE, я наткнулся на инструкцию YIELD в БД ARMv8. Руководство Раздел B1.3.3 "Инструкция YIELD".
В этом разделе говорится:
Инструкция YIELD дает подсказку о том, что задача, выполняемая потоком, имеет низкую важность, поэтому он может уступить, см. YIELD на стр. C6-1253.
но я немного смущен, так как я думал, что для того, чтобы установить приоритет для другого потока, мне нужно будет сообщить ядру Linux, чтобы сообщить планировщику о приоритете другого потока.
Итак, как YIELD общается с ядром, если вообще общается? Я ожидал, что системный вызов типа sched_yield
будет способом сделать это.
Кроме того, как это по сравнению с WFE? WFE говорит, что может переходить в режим низкого энергопотребления, не будет ли это иметь больше смысла, если мы хотим уступить?
F1.8.1 «Инструкция Yield» также говорит, что реализация может, например:
Аналогичное использование могло бы быть в изменении приоритета арбитража шины snoop в многопроцессорной (MP) системе.
так что, возможно, YIELD похож на WFE и намекает на такие оптимизации микроархитектуры, но без возможности перевести ЦП в состояние с низким энергопотреблением, что потребовало бы SEV, чтобы разбудить его позже.