Имеют ли многоядерные процессоры внутренние аппаратные средства для случайного изменения ядра, в котором выполняются инструкции?

Имеют ли многоядерные процессоры внутренние аппаратные средства для случайного изменения ядра, в котором выполняются инструкции?

Мой друг говорит, что процесс всегда прыгает между ядрами, даже если вы прикрепляете процесс к определенному ядру в операционной системе. Он говорит, что производители процессоров делают это, чтобы процессоры не сгорали из-за горячих точек (сгорание ядер на самом деле происходит или нет, не имеет значения).

Он также говорит, например, что диспетчер задач Windows некорректен, так как не может отслеживать внутренние процессы процессора. Поэтому ему нельзя доверять... Он клянется, что видел документацию Intel, которая это объясняет. (ну, он не смог ее найти)

Я пытался объяснить ему, что это нелогично, поскольку это сделает недействительными кэши, конвейеры и т. д., но поскольку нет никакой документации, подтверждающей обратное, доказать это довольно сложно.

Знает ли кто-нибудь документацию или может дать неопровержимое объяснение, подтверждающее ту или иную теорию?

Спасибо!

решение1

Я не думаю, что в процессоре используется преднамеренная «рандомизация», чтобы избежать перегрева или чего-то в этом роде.

Код Ring 0 может считывать регистры ЦП, чтобы определить, на каком ядре код работает, и может затем отдать свое время ЦП, если он находится на неправильном ядре. Как минимум, одно ядро ​​всегда имеет флаг начальной загрузки BSP, установленный во время сброса при инициализации BIOS (мы говорим о ЦП x86). Вы можете прочитать этот регистр, чтобы убедиться, что вы работаете только на этом ядре. Но почти наверняка есть какой-то другой механизм идентификации, который можно использовать.

Поскольку привилегированный код ядра ОС обрабатывает переключение процессов, вы определенно можете дать ОС функцию блокировки процессов на определенном ядре, даже если это просто означает отказ от процессорного времени, пока переключение не остановится на этом ядре. Вы также можете настроить все другие процессы так, чтобы они избегали этого ядра, чтобы оно оставалось открытым для нужного вам процесса.

Таким образом, независимо от того, делает ли это диспетчер задач или нет, теоретически вы можете точно знать, на каком ядре какой процесс запущен, и закрепить его за этими ядрами.

Теперь, есть ли у Intel скрытое оборудование, которое на самом деле переключает ID ядер, так что вы не знаете, на каком физическом ядре вы на самом деле работаете? Сомневаюсь. Процессор сообщает о температуре каждого ядра, и вы можете видеть, как температура растет на разных ядрах, используя однопоточный процесс, который вы блокируете на разных ядрах.

Связанный контент