Виртуализация Intel VT-d на марше

30 Окт 2012

Виртуализация Intel VT-d на марше

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

Но если подвести промежуточные итоги, что окажется существенным с точки зрения аппаратных решений виртуализации?

На этот вопрос следует искать ответ на стыке программных и аппаратных средств персонального компьютера — в базовой системе ввода и вывода, которая в современной реализации прячется под оболочкой UEFI. В продолжение темы, начатой в статье «Скрытые настройки AMIBIOS», проанализируем бинарный код системной платы Supermicro X9SCL с помощью утилиты Aptio AMIBCP:

Virtualization Technology for directed I/O

Технология Intel VT-d

Как следует из выше приведенного скрин-шота, технология виртуализации Intel VT-d в установках CMOS Setup относится к разряду скрытых от посторонних глаз параметров. Не вдаваясь в политесы производителей серверных системных плат, отметим для себя, что сам факт поддержки VT-d является из ряда вон выходящим событием. Разберемся детально, какие преимущества дает ее использование?

Ни для кого не секрет, что Virtualization Technology for directed I/O дополняет технологию виртуализации, реализованную в центральном процессоре. Суть ее применения состоит в том, чтобы обеспечить  аппаратную поддержку процессам записи и чтения памяти, которые требуются устройствам на PCIe- и PCI-шинах.

«Неужели такая малость потребовала бурю маркетологического натиска, в результате чего появилась и эта статья?» — спросит плохо информированный пессимист.

«Ха, — ответит хорошо подкованный оптимист. — Все до сих пор придуманные технологии виртуализации основаны на разграничении доступа к памяти только центрального процессора и не контролируют работу bus-master устройств!»

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

Представим себе, что супервизор открыл гостевой задаче доступ к USB-контроллеру. Гостевая задача установила адрес расписания транзакций в области памяти, доступ к которой для нее запрещен. Центральный процессор не в состоянии прозрачно и эффективно перехватить обращение USB-контроллера (а в общем случае — любого bus-master устройства) к этому региону ОЗУ.

Для того чтобы обеспечить виртуализацию «по-старому» супервизору придется каждый раз вникать в семантику инициализации USB-контроллера гостевой задачей и контролировать записываемый в устройство адрес расписания транзакций. Мало того, что этот адрес должен быть в границах допустимого диапазона, придется дополнительно учесть и размер расписания транзакций (чтобы валидный начальный адрес с данными непозволительной длины не привел к недопустимому конечному адресу), и все его дочерние структуры.

Трудно назвать такой подход рациональным. Трудно представить, сколько процессорных тактов занимает такая реализация. А ведь кроме указанного в примере USB-контроллера в реальности придется мониторить все bus-master устройства, даже Legacy-контроллер DMA i8237.

Deus ex Machina

История компьютерной техники знает немало примеров, когда для расшивки узких мест приходилось программную реализацию вытеснять с помощью аппаратных технологий. По сути, в контексте данного повествования этот пример абсолютно уместен. Ведь технология Intel VT-d обеспечивает аппаратное управление доступом PCI-устройств к системным ресурсам.

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

Экономия ресурсов существенна и очевидна! Ведь без технологии VT-d супервизору приходится программно моделировать работу bus master устройства и определять, приведет ли набор параметров, переданный ему гостевой задачей к обращению по недопустимым адресам.

При использовании VT-d вмешательство потребуется только в случае попытки обращения bus master устройства по запрещенному адресу. Контроль по результату избавит супервизор от рутинных задач мониторинга устройств на PCI-шине.

Как справедливо заметили наши коллеги: «следует признать, что софтвер для программистов труд непосильный, если отсутствует классный хардвер. Ибо не только Deus ex Machina. Всевышний — в машине, и сама машина».