Уменьшает ли трансляция адресов подкачки производительность доступа к памяти?

Когда подкачка включена, некоторое оборудование отвечает за преобразование адресов виртуальной памяти в физические адреса. Известные переводы обычно хранятся в каком-то кеше, переводе в сторону буфера (TLB).

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

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

(Чтобы было понятно, мой вопрос не о сбоях страниц или об ошибках кэширования TLB)

1 ответ

Решение

Как и все в жизни, это зависит!:-)

Давайте для простоты предположим, что (а) мы говорим о данных, а не о инструкциях (б) все обращения к памяти данных достигают кеша уровня 1 (в) кеш данных уровня 1 является типичным ассоциативным кешем наборов.

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

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

Таким образом, существует возможность выбора между этими двумя крайностями. Все еще предполагая установленный ассоциативный кэш, мы можем использовать виртуальный адрес в качестве индекса, одновременно переводя адрес в физический. После этого мы используем физический адрес в качестве тега для доступа к данным. Таким образом мы снимаем трансляцию TLB с критического пути, достигая производительности, аналогичной виртуальному адресуемому кешу. Это также позволяет нам избежать этой проблемы с виртуальным / физическим псевдонимом, хотя часто требуется небольшая дополнительная помощь от операционной системы.

Итак, вы можете видеть, что он может быть таким же или медленным, в зависимости от того, как настроен кэш.

Другие вопросы по тегам