При использовании политики сквозного кэширования для страниц - PullRequest
1 голос
/ 09 апреля 2020

Я читал документ о нападении на MDS RIDL: Rogue In-Flight Data Load . Установленные страницы с обратной записью, сквозной записью, комбинированной записью или без кэширования и с различными экспериментами определяют, что буфер заполнения строки является причиной микроархитектурных утечек.


По касательной: Я знал, что память может быть не кешируемой, но я предполагал, что кешируемые данные всегда кэшируются в кеше с обратной записью, т.е. я предполагал, что L1, L2 и LL C всегда были кешами с обратной записью.

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

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

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

Вопросы

  1. Может ли каждый кеш (L1, L2, LL C) работать в режиме обратной записи или сквозной записи? Таким образом, если для атрибута страницы установлено значение сквозной записи, то все они будут сквозными для записи?
  2. Комбинирование записи полезно для памяти графического процессора; Uncacheable хорош при доступе к аппаратным регистрам. Когда страница должна быть настроена на сквозную запись? Каковы преимущества этого?
  3. Существуют ли кэши сквозной записи (если это на самом деле свойство аппаратного обеспечения, а не просто что-то, что контролируется атрибутами pagetable) или существует тенденция, что все кэши являются создан как запись с обратной записью для уменьшения трафика c?

1 Ответ

1 голос
/ 10 апреля 2020

Может ли каждый кеш (L1, L2, LL C) работать либо в режиме обратной записи, либо в режиме сквозной записи?

В большинстве микроархитектур x86, да, все данные Унифицированные / кэши (способны) выполнять обратную запись и используются в этом режиме для всех обычных DRAM. Какой метод отображения кэша используется в процессоре Intel Core i7? содержит некоторые подробности и ссылки. Если не указано иное, по умолчанию все, кто говорит о x86, предполагают, что страницы DRAM будут иметь формат WB.

AMD Bulldozer сделала нетрадиционный выбор - использовать сквозную запись L1d с небольшим буфером 4k, сочетающим запись между это и L2. (https://www.realworldtech.com/bulldozer/8/). У этого есть много недостатков, и я думаю, что многие считают (оглядываясь назад) одной из нескольких слабостей или даже ошибок проектирования семейства Bulldozer (которые AMD исправила для Zen). Также обратите внимание, что Bulldozer был экспериментом в CMT вместо SMT (два ядра со слабым целым числом, совместно использующие блок FPU / SIMD, каждое с отдельными кэшами L1d, совместно использующими кэш L2) https://www.realworldtech.com/bulldozer/3/ показывает архитектуру системы.

Но, конечно, кэши бульдозеров L2 и L3 все еще были WB, архитекторы не были безумны. Кэширование ББ необходимо для снижения требований к пропускной способности для общего LL C и памяти . И даже L1d сквозной записи нуждался в буфере объединения записи, чтобы кэш L2 мог быть больше и медленнее, таким образом, служа своей цели иногда поражать, когда L1d пропускает. См. Также Почему размер кэша L1 меньше размера кэша L2 в большинстве процессоров?

Кэширование с сквозной записью может упростить конструкцию (особенно одноядерной системы). ), но в целом процессоры вышли за пределы этих десятилетий go. ( Обратная запись против сквозного кэширования? ). IIR C, некоторые рабочие нагрузки без использования ЦП иногда выигрывают от кэширования сквозной записи, особенно без записи-выделения, поэтому записи не загрязняют кэш. В x86 есть хранилища NT, чтобы избежать этой проблемы.

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

Да, каждый магазин должен go вплоть до DRAM на странице, помеченной как WT.

Кеши оптимизированы для WB, потому что это то, что все используют, но, очевидно, поддерживают передачу на линию к внешним кешам без удаления от L1d. (Таким образом, WT не превращает хранилища во что-то вроде movntps обхода / удаления хранилищ кэша.)

Когда страница должна быть настроена на сквозную запись? Каковы преимущества этого?

В основном никогда; (почти?) все рабочие нагрузки процессора лучше всего работают с WB-памятью.

ОС даже не удосужились упростить (или возможно?) для пространства пользователя выделение W C или WT DRAM страницы. (Хотя это, безусловно, не доказывает, что они никогда полезны.) Например, при ингибировании кэша ЦП я обнаружил ссылку о патче Linux, который никогда не входил в основное ядро, которое добавляло возможность отображения страницы WT.

WB, W C и U C являются общими для обычных DRAM, памяти устройства (особенно GPU) и MMIO соответственно.

Я видел по крайней мере одну бумагу, которая сравнивала WT с WB с U C с W C для некоторой рабочей нагрузки (гуглил, но не нашел, извините). И люди, тестирующие непонятные вещи x86, иногда включают его для полноты картины. например, Микроархитектура позади Meltdown - хорошая статья в целом (и связанная с тем, что вы читаете).

Одним из немногих преимуществ WT является то, что магазины заканчиваются в L3 быстро, где могут ударить нагрузки с других ядер. Это может стоить дополнительных затрат для каждого магазина на эту страницу, особенно если вы осторожны, чтобы вручную объединить свои записи в одно большое 32-байтовое хранилище AVX. (Или 64-байтовую запись полной строки AVX512.) И, конечно, используйте эту страницу только для общих данных.

Я не видел, чтобы кто-нибудь когда-либо рекомендовал делать это, и я не пытался это сделать , Возможно, потому что дополнительная пропускная способность DRAM для записи через L3 также не стоит выгоды для большинства случаев использования. Но, вероятно, также потому, что вам, возможно, придется написать модуль ядра, чтобы отобразить страницу таким образом.

...