> Люблю когда по делу переписка.Э, нет, дружище, я тут не весть какой помощник. Мне это было интересно, когда сорцы WRK доступны не были.
> По первому куску кода WRK:
> Не знаю, зачем сюда уже подмешивать механизм context swap, который чаще всего
> выполняется в конце работы планировщика.
Не читал первую ссылку, но исхожу из того, что её автор "busy" не сам придумал, а откуда-то выцепил. Из вышеприведённого или подобного куска. Ссылка на KiIdleLoop - намёк на казалось бы просто вопрос "на каком IRQL выполняется спящий поток?", которым можно много кого завалить.
> По второму куску кода WRK:
> К чему он вообще? Он отвечает за завершение итерации idle loop, когда
> новый поток выполнения не найден, или найден, но на него переключиться
> нельзя (по разным причинам, например изменение affinity после перехода в standby
> режим потока).
> Unconditionally - это скорее подчёркивает, что поскольку этот поток ничего полезного не
> делает (только спиннит ядро в ожидании работы), то никаких дополнительных условий
> при выборе ядра для нового потока в очереди выполнения проверять не
> надо.
К "просто потому что появилось idle ядро", которую каждый понял по-своему. Тут как раз "swap from idle to idle".
>> Во вторых, смена процессора выполнения потока "просто потому что появилось idle ядро" никогда не происходит.
> Я пишу про то, что поток, выполнявшийся на одном ядре, без очень
> весомой причины (до сборки 19536, в ней это стало происходить чаще
> благодаря новому Cache Aware Scheduling) не станет выполняться на другом ядре,
> т.к. Ideal processor чаще всего остаётся неизменным в thread lifecycle.
К примеру, у нас 2 ядра и 4 потока. 2 выполняются на одном ядре, 2 на другом. Первые 2 завершились. Это весомая причина? Понятно, что должно быть перераспределение.
> Ну и в целом, приводить в пример урезанное ядро Windows XP -
> скучно. Реверс Windows 10 - совсем иные ощущения.
Представляю, какие были ощущения у online-solutions.ru
когда MS выкатило очередной подарок. :)
> Зато я нашёл ошибку в своём начальном посте: Stride - свойство KNODE
> конечно, а не KPRCB (ноды, а не конкретного ядра).
А что, сейчас такие вещи нигде толком не обсуждаются?