Кэш сам себя опустошает, если простаивает долгое время? - PullRequest
3 голосов
/ 09 января 2020

Обновляет ли сама кэш-память sh, если не встречает никаких инструкций в течение порогового промежутка времени?

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

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

Ответы [ 2 ]

6 голосов
/ 10 января 2020

Если кэш находится под напряжением в определенном состоянии простоя и если он реализован с использованием технологии энергозависимой памяти (такой как SRAM), кэш потеряет свое содержимое. В этом случае, чтобы поддерживать архитектурное состояние, все грязные строки должны быть записаны в некоторую структуру памяти, которая сохранит свое состояние (например, следующий уровень иерархии памяти). Большинство процессоров поддерживают режимы ожидания при включении питания. Например, на процессорах Intel, в ядре C6 и более глубоких состояниях ядро ​​полностью запитано, включая все частные кэши. Когда ядро ​​выходит из какого-либо из этих состояний, кеши будут холодными.

Это может быть полезно в состоянии простоя с целью экономии энергии, чтобы sh кешировать, но не отключать питание. Ворота это. Спецификация ACPI определяет такое состояние, называемое C3, в разделе 8.1.4 (версии 6.3):

В то время как в состоянии C3 кэши процессора поддерживают состояние, но процессор не обязан выполнять sn oop мастер шины или многопроцессорный ЦП обращается к памяти.

Далее в том же разделе описывается, что C3 не требует сохранения состояния кэшей, но также не требует его очистки. По сути, ядро ​​в ACPI C3 не гарантирует согласованность кэша. В реализации ACPI C3 либо системное программное обеспечение должно было бы вручную обработать кэш sh перед тем, как ядро ​​войдет в C3, либо аппаратное обеспечение будет использовать некоторый механизм для обеспечения согласованности (очистка - не единственный способ). Это состояние бездействия потенциально может сэкономить больше энергии по сравнению с более мелкими состояниями, поскольку нет необходимости задействовать согласованность кэша.

Насколько мне известно, единственные процессоры, которые реализуют версию ACPI C3 без питания. это от Intel, начиная с Pentium II. Все существующие процессоры Intel x86 могут быть классифицированы в соответствии с тем, как они реализуют ACPI C3:

  • Intel Core и более поздние версии, а также Bonnell и более поздние версии. Состояние оборудования называется C3. Реализация использует несколько механизмов снижения мощности. Тот, который относится к вопросу, сбрасывает все основные кэши (инструкции, данные, операции, блок пейджинга), вероятно, выполняя процедуру микрокода при входе в состояние ожидания. То есть все грязные строки записываются обратно на ближайший общий уровень иерархии памяти (L2 или L3), и все допустимые чистые строки становятся недействительными. Так поддерживается когерентность кэша. Остальная часть состояния ядра сохраняется.
  • Pentium II, Pentium III, Pentium 4 и Pentium M: состояние аппаратного обеспечения в этих процессорах называется Sleep. В состоянии сна процессор полностью синхронизирован и не реагирует на рычаги (среди прочего). Кэш-память на кристалле не очищается, а аппаратное обеспечение не предоставляет альтернативного механизма, который защищает действительные строки от непоследовательности. Поэтому системное программное обеспечение отвечает за обеспечение согласованности кэша. В противном случае Intel указывает, что если запрос sn oop происходит к процессору, который переходит в спящий режим или уже находится в спящем режиме или уже находится в спящем режиме, то в результате поведение будет непредсказуемым.
  • Все остальные не поддерживают ACPI C3.

Обратите внимание, что стробирование часов экономит электроэнергию путем:

  • Отключение логики генерации часов c, которая сама потребляет энергию.
  • Выключение любая логика c, которая что-то делает в каждом тактовом цикле.

При стробировании тактовых импульсов мощность Dynami c сводится практически к нулю. Но для поддержания состояния в энергозависимых структурах памяти все еще потребляется постоянное энергопотребление c.

Многие процессоры имеют по крайней мере один уровень встроенного кэш-памяти, который используется несколькими ядрами. Процессоры под брендом Core Solo и Core Duo (независимо от того, основаны ли они на микроархитектурах Enhanced Pentium M или Core) представили состояние простоя, которое реализует ACPI C3 на уровне пакетов, где общий кэш может постепенно отключаться и восстанавливаться (уровень пакетов Intel состояния соответствуют состояниям системного уровня в спецификации ACPI). Это аппаратное состояние называется PC7, Enhanced Deeper Sleep State, Deep C4 или другими именами в зависимости от процессора. Общий кэш намного больше по сравнению с частными, поэтому для полного заполнения sh потребуется гораздо больше времени. Это может снизить эффективность PC7. Поэтому он сбрасывается постепенно (эта операция выполняется последним ядром пакета, который входит в CC7). Кроме того, когда пакет выходит из PC7, общий кэш также постепенно включается, что может снизить стоимость входа в PC7 в следующий раз. Это базовая идея, но детали зависят от процессора. В PC7 значительная часть пакета находится под напряжением.

3 голосов
/ 09 января 2020

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

Кеши обычно состоят из регистров, содержащих ячейки SRAM , которые сохраняют данные, хранящиеся в них, до тех пор, пока на ячейки подается питание (в отличие от DRAM, который необходимо периодически обновлять). Питер упомянул об этом в своем комментарии: если отключить питание, даже ячейка SRAM не сможет поддерживать свое состояние и данные будут потеряны.

...