Об адаптивном режиме для кэша L1 в Hyper-Threading

Я студент, недавно занимающийся исследованиями в области Hyper-threading. Меня немного смущает функция - контекстный режим кэша данных L1.

В руководстве по оптимизации архитектуры было описано, что кэш L1 может работать в двух режимах:

  • Кэш первого уровня может работать в двух режимах в зависимости от бита context-ID:

    1. Общий режим: кэш данных L1 полностью используется двумя логическими процессорами.

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

Однако мне любопытно, как кеш разделяется в адаптивном режиме в соответствии с описанием.


person frank    schedule 03.09.2012    source источник


Ответы (3)


В архитектуре Intel значение 1 из L1 Context ID указывает, что режим кэширования данных L1 может быть установлен либо в адаптивный режим, либо в общий режим, а значение 0 указывает, что эта функция не поддерживается. Подробности см. в определении IA32_MISC_ENABLE MSR Bit 24 (контекстный режим кэша данных L1).

Согласно Руководство разработчика по архитектурам Intel® 64 и IA-32: Vol. 3A (Глава 11/Управление кэшем), которую я цитирую ниже:

  • Поделиться режимом

В совместно используемом режиме кэш данных L1 распределяется между логическими процессорами на конкурентной основе. Это справедливо даже в том случае, если логические процессоры используют идентичные регистры CR3 и режимы страниц. В совместно используемом режиме линейные адреса в кэше данных L1 могут иметь псевдонимы, что означает, что один линейный адрес в кэше может указывать на разные физические местоположения. Механизм разрешения алиасинга может привести к перегрузке. По этой причине IA32_MISC_ENABLE[бит 24] = 0 является предпочтительной конфигурацией для процессоров на базе микроархитектуры Intel NetBurst, поддерживающих технологию Intel Hyper-Threading.

  • Адаптивный режим

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

• Регистры управления CR3 для логических процессоров, совместно использующих кэш, идентичны.

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

В этой ситуации весь кэш данных L1 доступен каждому логическому процессору (вместо конкурентного совместного использования). Если значения CR3 различаются для логических процессоров, совместно использующих кэш данных L1, или логические процессоры используют разные режимы подкачки, процессоры конкурируют за ресурсы кэша. Это уменьшает эффективный размер кэша для каждого логического процессора. Псевдоним кэша не разрешен (что предотвращает перегрузку данных).

Я просто предполагаю, что нет определенного подхода к разбиению кеша данных L1.

person Markus Tzoe    schedule 04.09.2012
comment
Я видел эти определения. Что меня интересует, так это то, как разделить кеш данных L1 и что используется для идентификации различных процессов в кеше L1? - person frank; 04.09.2012

В документе просто указано, что если вы используете адаптивный режим и если CR3 или режим подкачки различаются между ядрами, кеш не используется совместно, и ядра «конкурируют» за кеш. Он не говорит, как работает разделение.

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

В качестве альтернативы они могут добавить дополнительный бит к виртуальному тегу каждой строки кэша, чтобы различать, какому процессору принадлежит строка. Это позволило бы динамически разделять кеш. Это лучше подходит под описание «конкурировать» за кеш, чем статический раздел.

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

person Mackie Messer    schedule 05.09.2012

Кэш данных L1 не секционируется ни в одном из режимов и всегда используется на конкурентной основе.

Обратите внимание, что в руководстве есть явная ошибка, режим определяется не битом context-ID, а IA32_MISC_ENABLE[24]. Это усовершенствование поддерживается более поздними степпингами Northwood с HT и всеми процессорами Prescott с HT. Значение по умолчанию равно нулю, что соответствует адаптивному режиму. Однако в некоторых процессорах обновленный BIOS может переключаться в общий режим установкой IA32_MISC_ENABLE[24] из-за ошибки в этих процессорах, возникающей только в адаптивном режиме.

В более ранних версиях Northwood с HT поддерживается только общий режим. В совместно используемом режиме, когда выдается запрос на загрузку кэша данных L1, запрос сначала обрабатывается на быстром пути, который включает прогнозирование пути на основе битов 11-15 линейного адреса и создание спекулятивного сигнала попадания/промаха. как результат. В процессорах с HT также сравнивается идентификатор логического ядра. И частичный тег, и идентификатор логического ядра должны совпадать, чтобы получить спекулятивное попадание. В общем, это помогает улучшить правильную спекулятивную частоту попаданий.

Если два родственных логических ядра работают в одном и том же режиме пейджинга и имеют одинаковые значения CR3, указывающие на то, что доступ из обоих ядер использует одни и те же таблицы страниц (если пейджинг включен), было бы лучше произвести спекулятивное попадание, даже если логический ID ядра не совпадает на быстром пути кэша.

В адаптивном режиме значение идентификатора контекста вычисляется всякий раз, когда изменяется режим пейджинга или регистр CR3 одного из ядер. Если режимы пейджинга и значения CR3 совпадают, бит идентификатора контекста устанавливается в одно из двух возможных значений. В противном случае устанавливается другое значение. Когда в кэш отправляется запрос на загрузку, проверяется идентификатор контекста. Если указывает, что ядра имеют одинаковые структуры преобразования адресов, результат сравнения логического идентификатора ядра игнорируется, и создается спекулятивное совпадение, если частичный виртуальный тег совпал. В противном случае сравнение ID логического ядра выполняется так же, как и в совместно используемом режиме.

person Hadi Brais    schedule 01.12.2020