Каждому bus-master устройству – виртуальное адресное пространство

21 Дек 2012

Каждому bus-master устройству – виртуальное адресное пространство

Сегодня интеллектуализация периферийных устройств вычислительных платформ происходит бурно и иногда в довольно неожиданных формах. В середине 80-х годов, когда на советском персональном про­фес­си­о­наль­ном компьютере «Искра-1030» можно было увидеть ог­ром­ный вен­ти­ля­тор, питаемый от напряжения 220 вольт, по­пу­ляр­ной была шутка о том, что вентилятор будет программно управляемым и скорость его вращения можно будет про­чи­тать программно. Видимо, нужно было не смеяться, а идти в патентное бюро, потому что все это сбылось…

 

Современная вычислительная платформа оборудована рядом централизованных и децентрализованных ре­сур­сов, позволяющих bus-master устройствам при их доступе к оперативной памяти в обход процессора, работать в собственном виртуальном адресном пространстве. Такие ресурсы можно условно разделить на два вида:

  1. Устройства, обеспечивающие трансляцию виртуальных адресов в физические адреса, сюда относится Translation Agent. В наших материалах он часто называется центральным агентом или просто агентом. Данный узел функционально сходен с блоком страничной трансляции (Paging Unit) в центральном процессоре.
  2. Устройства, обеспечивающие кэширование результатов трансляции (дескрипторов страниц) с целью повышения производительности. Это блоки Address Translation Cache, интегрируемые в периферийные устройства с использованием протоколов Address Translation Services. Тут очевидна аналогия с TLB центрального процессора.

Без указанных ресурсов, эффективная аппаратная поддержка виртуализации невозможна. «Компостер» уже по­свя­тил им цикл публикаций: Горизонты техники для персонального компьютера, PCI Express оп­ти­ми­зи­ру­ет­ся для поддержки VT-d, Оптимизм системного арбитра в реализации Intel TSX, Атомарные операции. Современный тренд.

История вопроса

Тут самое время вспомнить, что в вычислительной системе размер виртуального адресного пространства обычно больше физического. А так как еще со времен процессора Intel 80386 управление памятью происходит с ис­поль­зо­ва­ни­ем страниц, размером 4 Килобайта, мы получаем ситуацию, при которой в каждый момент времени, часть страниц виртуального адресного пространства отображены на страницы физического адресного пространства, а часть страниц отмечены как не присутствующие. Если программа, работая в виртуальном адресном пространстве, обратится к не присутствующей странице, процессор зафиксирует отсутствие страницы по содержимому со­от­вет­ству­ю­ще­го бита в дескрипторе и сгенерирует внутреннее прерывание (Page Fault Exception), процедура об­ра­бот­ки которого прочитает образ затребованной страницы из swap-файла на диске и поместит эту страницу в физической памяти. Возможно, для этого потребуется освободить место в памяти, удалив страницу, которая дольше всех не была затребована. Напомним, что в архитектуре x86 для обработки ситуации Page Fault используется прерывание (исключение) с номером 0Eh, а присутствие страницы индицируется битом P(Present), это бит 0 дескриптора стра­ни­цы.

О проблеме

Итак, механизм виртуальной адресации, которым раньше был оборудован только центральный процессор, ре­а­ли­зо­ван для bus-master устройств. Поэтому, продолжая аналогию с центральным процессором, логично пред­у­смо­т­реть обработку ситуаций Page Fault, если bus-master устройство обращается к не присутствующей странице памяти. Иначе, нам придется постоянно держать в физической памяти все страницы, к которым потенциально может обратиться устройство. Такой подход, названный в документе Address Translation Services термином pinned memory, приведет к неэффективному использованию памяти.

Технология pinned memory позволяет держать в физической памяти все страницы, к которым потенциально может обратиться устройство

О решении

Технология Page Request Services предусматривает такую последовательность операций:

  1. Устройство обращается к странице памяти. Логика трансляции фиксирует факт недоступности страницы (ATS Translation is not available) и временно приостанавливает доступ к памяти.
  2. Устройство, используя Page Request Interface (PRI) генерирует сообщение Page Request Message, получателем которого является Root Complex. Это сообщение несет информацию о требуемой странице.
  3. Root Complex (проще говоря, северный мост чипсета), принимает меры для того, чтобы затребованная страница была размещена в физической памяти, и факт ее присутствия был отображен в таблице страниц. Обычно, здесь не обойтись без вмешательства центрального процессора, так как не присутствующая  страница виртуальной памяти должна быть загружена с диска. Для запуска такой процедуры Root Complex генерирует запрос на прерывание для процессора.
  4. После завершения загрузки страницы и декларирования ее присутствия, Root Complex передает сообщение Response Message устройству, запросившему страницу.
  5. Для периферийного устройства, принятие такого сообщения означает, что страница, недоступность которой обнаружилась на шаге 1, загружена в оперативную память и доступна, устройство должно повторить попытку доступа к ней.