2015-08-08 2 views
10

глянув для описания конструкции многоядерной я держать найти несколько диаграмм, но все они выглядят примерно так:Что отвечает за изменения нагрузки и частота ядра в многоядерный процессор

multicore design

Я знаю, от просмотра команды i7z, что разные ядра могут работать на разных частотах.

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

Мой вопрос: что контролирует частоты каждого отдельного ядра? Является ли заданием связать процесс READY с конкретным ядром, размещенным в операционной системе, или это делается чем-то внутри процессора.

+1

@xmojmr Я пробовал несколько PDF-файлов из предоставленной вами ссылки. Они все, что показано на рисунке 3-9, но не тот, который вы описали. Не могли бы вы рассказать мне, что вы имеете в виду? – v010dya

+1

open http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf (_Combined Volumes: 1 , 2A, 2B, 2C, 3A, 3B и 3C_), ctrl + F "_Algorithm for Extracting Processor Frequency_" – xmojmr

+1

@xmojmr Все модели, обсуждаемые там (как показано в таблице ниже этой диаграммы), относятся к одноядерным процессорам , Так что это действительно не помогает. – v010dya

ответ

2

Планирование процессов/нитей на сердечники чисто up to the OS. Аппаратное обеспечение не знает задач, ожидающих запуска. Поддержание списка ОС, которые выполняются в сравнении с ожиданием ввода-вывода, полностью является программным обеспечением.

Перенос нити из одного ядра в другой осуществляется с помощью кода ядра на исходном ядре, хранящего architectural state, а затем код ОС нового ядра, восстанавливающий это состояние и возобновление выполнения пользовательского пространства.

Традиционно решения масштабирования частоты и напряжения выполняются ОС. Возьмем Linux в качестве примера: код принятия решения называется governor (а также этот arch wiki link came up high on google). Он смотрит на такие вещи, как часто процессы использовали весь их time slice на текущем ядре. Если губернатор решает, что процессор должен работать с другой скоростью, он программирует некоторые контрольные регистры для реализации изменения. Насколько я понимаю, оборудование заботится о выборе right voltage to support the requested frequency.

Как я понимаю, ОС, работающая на каждом ядре, принимает решения самостоятельно. На оборудовании, которое позволяет каждому ядру работать на разных частотах, код принятия решения не должен координировать друг с другом. Если работа на высокой частоте на одном ядре требует высоковольтного чипа, аппаратное обеспечение позаботится об этом. Я думаю, что современная реализация DVFS (динамическое масштабирование по напряжению и частоте) довольно высокоуровневая, а операционная система просто сообщает аппаратное обеспечение, какое из N вариантов оно хочет, а встроенный микроконтроллер, занимающийся деталями программирования генераторов/делителей часов и регуляторы напряжения.

Функция «Turbo» от Intel, которая оппортунистически повышает частоту выше максимальной устойчивой частоты, принимает решения в аппаратных средствах. Каждый раз, когда ОС запрашивает самую высокую рекламируемую частоту, CPU использует турбонаддув, когда позволяют питание и охлаждение.

Intel Skylake делает следующий шаг: ОС может передать полный контроль над DVFS на оборудование, опционально с ограничениями. Это позволяет реагировать с микросекундной микросекунды, а не на шкалу времени в миллисекундах. Это фактически позволяет повысить производительность при работе с большими нагрузками, поскольку для использования в турбо-режиме может потребоваться больше бюджета мощности. Несколько тестов достаточно полны, чтобы наблюдать это, как некоторые браузерные/javascript.

Был целый разговор о новом управлении мощностью Skylake в IDF2015, check out the slides and/or archived webcast. Старый метод подробно описан здесь, чтобы проиллюстрировать разницу, поэтому вы должны действительно проверить, хотите ли вы более подробно, чем мое резюме. (Список других переговоров IDF: here, спасибо Agner Fog's blog за ссылку)

+0

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

1

Частота ядра регулируется заданным напряжением, подаваемым на «генератор» сердечника.

Это напряжение может быть изменено операционной системой, но оно также может быть изменено самой BIOS, если в CPU обнаружена высокая температура.

+1

Я дал вам щедрость, так как вы ответили на большинство вопросов. Но не могли бы вы объяснить что-то. OS хочет отправить команду на генератор, что действительно происходит, так это то, что эта команда загружается для выполнения. Нужно ли загружаться в ядро, которое будет изменено или будет выполняться любое ядро ​​(любое ядро ​​может отправить команду на генератор другого ядра или ОС загрузит команду в конкретное ядро ​​для выполнения). – v010dya

+0

Володя, к сожалению, я точно не знаю ответа на этот вопрос. Однако, основываясь на моих знаниях о архитектуре ПК, моя ставка заключается в том, что любое ядро ​​может выполнить эту работу. –

+1

@ v010dya Эти процессы полностью независимы, поэтому любое ядро ​​может это сделать. На самом деле ответ не прост, так как происходит много чего. ОС генерирует «запрос», который передается соответствующим контроллерам (через драйверы). Затем контроллеры выполняют «свою работу». Но частоту можно менять без вмешательства ОС. Например (упрощенный) - «BIOS» (это не BIOS, а для простоты ...) изменяет частоту, основанную на нагрузке ядра. В этом случае ОС загружает ядро, да, но не имеет реального контроля над процессором. и т. д. –