PCI Express оптимизируется для поддержки VT-d

03 Дек 2012

Распределенные вычисления персональных платформ

Известно, что технология VT-d использует цент­ра­ли­зо­ван­ный подход. Это выражается в том, что один Translation Agent (в дальнейшем будем называть его просто агент) выполняет трансляцию адресов для всех bus-master устройств. В этом контексте систему, в которой несколько групп bus-master устройств и несколько агентов, яв­ля­ю­щих­ся центральными в своих группах, также будем считать централизованной. Очевидно, что обслуживание группы устройств одним агентом позволяет снизить аппаратные затраты и упростить логику трансляции адресов.

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

Технология ATS (Address Translation Services) позволяет, оставаясь в рамках централизованной модели с единым агентом, перенести часть трансляционной логики в bus-master устройство, что позволит оптимизировать процесс трансляции адресов под особенности конкретных устройств. Один из узлов, подвергшихся такой де­цент­ра­ли­за­ции — ATC (Address Translation Cache). 

Кэширование дескрипторов страниц

Очевидно, устройство, выполняющее трансляцию адреса (Translation Agent), вносит задержку в процесс передачи транзакции от bus-master устройства к оперативной памяти. Это обусловлено необходимостью считывания из оперативной памяти ряда дескрипторов. Если не принять специальных мер, производительность виртуальной машины и системы в целом может существенно снизиться в силу того, что увеличится латентность обращения к памяти.

Логика трансляции, получив на вход адрес от bus-master устройства (назовем этот адрес виртуальным), должна выдать на выход физический адрес. Для выполнения этой операции необходимо прочитать из оперативной памяти дескрипторы каталогов страниц и дескриптор страницы. Для выбора этих дескрипторов используется информация из полей виртуального адреса. В дескрипторе целевой страницы находится ее физический адрес.

Именно тут в работу включается ATC (Address Translation Cache). Это специализированная кэш-память, которая хранит дескрипторы страниц. Логика ее работы типична для кэш памяти. При первом обращении к странице X необходимо прочитать из оперативной памяти дескриптор страницы X и все дескрипторы каталогов, необходимые для адресации дескриптора страницы X. После этого, дескриптор страницы X остается в кэш-памяти, поэтому при повторных обращениях к той же странице, будет использован дескриптор из кэш-памяти и не потребуется обращаться к оперативной памяти. Поэтому латентность будет меньше. Как и для обычной кэш-памяти, в случае, когда необходимо кэшировать новую информацию, а свободные ячейки закончились, вытеснен будет тот дескриптор, к которому дольше всего не было обращений. Как видим, ATC bus-master устройств очень напоминает TLB  центрального процессора.

Децентрализация кэширования

Каковы аргументы в пользу децентрализации кэш-памяти ATC и размещения ее в составе bus-master устройств, а не центрального агента? Очевидно, что устройство - инициатор доступа (например, видео адаптер или дисковый контроллер) имеет больше информации о своих будущих операциях, чем центральный агент. В частности, информации об адресах и страницах, к которым планируются обращения.

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

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

Проще говоря, размещение ATC в составе bus-master устройства, позволяет оптимизировать работу ATC под данное устройство. В этом случае, мы также избежим ситуаций, при которых устройство, генерирующее большой трафик (например, видео адаптер), вытесняет из ATC дескрипторы, кэшированные по запросу других устройств (например, аудио адаптера). Если ATC кэш у каждого устройства свой, такой проблемы не будет. В качестве иллюстрации такого рода проблем адресуем читателя к разделу «Влияние параметра Read Request на производительность платформы» статьи «Скрытые настройки AMIBIOS».

Как это работает

Вспомним, как происходит трансляция адресов при использовании технологии Intel VT-d. Устройство, находящееся в распоряжении гостевой ОС (например, bus-master контроллер жесткого диска), инициирует цикл обращения к оперативной памяти и генерирует адрес. Этот адрес в данном контексте уместно называть виртуальным. Виртуальный адрес, поступает на вход Translation Agent (обычно находящегося в составе северного моста чипсета или процессора). На выходе Translation Agent получаем физический адрес, поступающий на адресуемое устройство, в данном случае – оперативную память. Очевидно, для организации кэширования физических адресов в bus-master устройстве, нам необходимо, чтобы физический адрес, полученный после трансляции,  поступил обратно на bus master устройство, передавшее виртуальный адрес.

На странице 13 спецификации Address Translation Services показана схема взаимодействия децентрализованных ресурсов Address translation Cache (ATC), которыми оборудованы bus-master устройства с централизованным агентом трансляции (Translation Agent), находящимся между Root Complex и оперативной памятью. Данное взаимодействие состоит из следующих четырех операций:

  • Translation Request = периферийное устройство передает центральному агенту виртуальный адрес, который необходимо транслировать.
  • Translation Completion = ответ центрального агента периферийному устройству. Центральный агент транслирует адрес, используя таблицу Address Translation and Protection Table (ATPT) и возвращает оттранслированное значение периферийному устройству. Устройство размещает это значение в своей кэш-памяти (ATC). Благодаря наличию кэш-памяти, следующий запрос на обращение к той же странице устройство сможет обслужить без привлечения центрального агента.
  • Invalidate Request = Запрос на очистку кэш-памяти ATC или ее части. Передается от центрального агента к периферийному устройству в случае, если изменилось содержимое трансляционной таблицы (ATPT). В этом случае, кэшированные копии элементов таблицы ATPT, хранящиеся в ATC, перестают быть достоверными, поэтому ATC нужно очистить, иначе устройство будет продолжать использовать устаревшие дескрипторы страниц для трансляции адресов.
  • Invalidate Completion = Подтверждение завершения очистки ATC, передаваемое от периферийного устройства центральному агенту.