Как инструкция yield ARM информирует другие потоки о том, что они могут запускаться, и как она соотносится с WFE?

Изучая 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, чтобы разбудить его позже.


person Ciro Santilli    schedule 12.12.2019    source источник
comment
Я буду честен в том, что это было кое-что, что сделало меня любопытным также. Я получаю команды типа WFE/WFI и то, как они помогают со спин-блокировкой и питанием, но часть yield была менее ясна.   -  person Michael Dorgan    schedule 12.12.2019


Ответы (1)


Поток в этом контексте относится к аппаратному потоку для SMT. Вы можете быть более знакомы с фирменным термином Intel «Hyperthreading» для этой технологии. С помощью этой технологии одно ядро ​​может выполнять несколько аппаратных потоков одновременно.

Это связано с потоком операционной системы, но не совпадает с ним. Планировщик отвечает за сопоставление потоков ОС с аппаратными потоками.

Подробнее см. на этой странице Википедии: https://en.wikipedia.org/wiki/Multithreading_(computer_architecture)

person John Sully    schedule 12.01.2020