Требования к оборудованию для устройств WavePci
При выборе функций нового оборудования поставщики должны следовать следующим общим принципам:
Вместо того, чтобы просто перенести всю обработку на оборудование, поставщики должны взвесить стоимость каждой функции в зависимости от ее влияния на производительность.
При рассмотрении потенциальной ценности аппаратной функции поставщик должен оценить эту функцию с точки зрения ее влияния на систему в целом, а не фокусироваться на определенной подсистеме, такой как звук.
Разумно выбирая, какие функции следует ускорить в оборудовании, поставщики могут облегчить рабочую нагрузку ЦП и улучшить использование памяти, тем самым делая больше ресурсов системы доступными для других задач.
Исторически сложилось так, что не все конструкции звукового оборудования успешно следуют этим принципам.
При воспроизведении звукового содержимого или смешивании нескольких потоков некоторые аудиодрайверы WDM без необходимости потребляют много времени ЦП и пропускную способность шины. Такие недостатки обычно являются результатом несовершенных конструкций оборудования и неэффективных реализаций драйверов. Недостатки проектирования оборудования также могут помешать аудиодрайверу обрабатывать определенные форматы волн или требуют обходных решений, требующих вмешательства программного обеспечения.
Модель устройства WaveCyclic предназначена для удовлетворения аппаратных ограничений старых звуковых устройств. Новые конструкции оборудования должны полностью соответствовать Требованиям WavePci.
Устройство WavePci, которое может выполнять истинное точечную обработку и сбор данных DMA, избавляет ЦП от необходимости тратить время на копирование звуковых данных между буферами. В отличие от WaveCyclic, WavePci не имеет внутренней необходимости в копировании данных, что делает его предпочтительным драйвером мини-порта для многопотовых или аппаратно-ускоренных звуковых устройств. Хорошо спроектированное устройство WavePci не должно потреблять ресурсы ЦП, что позволяет отправлять большое количество аудиопотоков (64 или более) на оборудование для трехмерной обработки и микширования.
Для устройства WavePci требуется контроллер DMA master шины, поддерживающий передачу точечной и сборной DMA. Аппаратные конструкции не должны устанавливать произвольные ограничения на типы передачи данных, которые может обрабатывать контроллер DMA. Устройство WavePci должно соответствовать следующим требованиям:
Устройство должно быть master шины.
Он должен иметь возможность автономного доступа к системной памяти без вмешательства операционной системы и без использования системных ресурсов DMA.
Устройство должно иметь возможность обрабатывать передачу данных произвольной длины.
Он должен обрабатывать сопоставления (см. IPortWavePciStream::GetMapping) больше, чем страница памяти. Например, устройство с ограничением передачи в 4 килобайта не соответствует полным требованиям для WavePci. На 64-разрядных ЦП, поддерживающих Microsoft Windows, размер страницы составляет 8 килобайт, что делает вероятным, что некоторые сопоставления будут больше 4 килобайт. Передача данных, превышающая 32 килобайта в одном сопоставлении, теоретически возможна в зависимости от фрагментации физической памяти. С другой стороны, возможно сопоставление размером в один байт.
Устройство должно обрабатывать передачу данных в любое место в системной памяти или из нее.
Передача данных, которая между границами 32 килобайта или большей мощности из двух, вполне вероятна. Теперь компьютер может содержать более 4 гигабайт ОЗУ, и в этих системах сопоставления могут находиться в физической памяти выше 4 гигабайт в случае 64-разрядного ЦП или расширения физических адресов x86 (PAE). Чтобы обеспечить оптимальную производительность на этих компьютерах, поставщики должны создавать устройства, поддерживающие 64-разрядную адресацию. В противном случае требуется копирование данных в программном обеспечении. Копирование данных исторически требовалось для устройств с 24-разрядной адресацией в системах с ОЗУ более 16 мегабайт. Устройства должны использовать WaveCyclic вместо WavePci, если они не могут выполнять чтение или запись в любом месте физической памяти. Драйвер может принять это решение во время запуска устройства (см. IRP_MN_START_DEVICE) после того, как у него будет возможность определить, достаточно ли его адрес для доступа к полному диапазону адресов системной шины памяти.
Устройство должно обрабатывать передачу данных с произвольным выравниванием.
Сопоставления могут начинаться и заканчиваться на произвольных байтовых границах в памяти. Кадр звуковых данных можно разделить между сопоставлениями: выборки для первых нескольких каналов в конце первого сопоставления и образцы для остальных каналов во втором сопоставлении. Пример см. в разделе Фильтры волн. Для некоторых размеров выборки даже контейнер образца можно разделить на сопоставления. Если устройство требует, чтобы передача данных выполнялась по границам линии кэша, или если устройство требует, чтобы передача была строго выровнена по границам аудиокадра (например, при условии, что размер передачи делится равномерно на четыре в 16-разрядном случае стерео), это устройство не соответствует полному соответствию WavePci. Обратите внимание, что несоответствующее оборудование может быть предоставлено в качестве устройства WavePci, ограничивая диапазоны данных или форматы, предоставляемые драйвером (например, только определенные битовые глубины или только определенные конфигурации каналов).
Что касается последней точки в предыдущем списке, то модуль DMA устройства WavePci должен обрабатывать буферы, которые перекрывают границы страниц памяти. Например, буфер, содержащий 10 миллисекундах из 16-разрядных звуковых примеров PCM для 5,1-канального потока с частотой 48 кГц, имеет следующий размер:
(6 примеров на кадр)*(2 байта на образец)*(48 КБ кадров в секунду)*(10 миллисекунд) = 5760 байт
Это превышает размер страницы памяти (4096 байт), что означает, что буфер содержит одну или две границы страницы в зависимости от того, как он расположен в памяти. Буфер содержит целое число (480) кадров звуковых данных, но один или два из этих кадров могут быть разделены границами страницы.
По этой причине точечная и сборная DMA-оборудование для устройства WavePci должно быть предназначено для обработки звуковых кадров (например, кадра 197 на следующем рисунке), которые разделены между двумя физически несмежными страницами в памяти.
В верхней части предыдущего рисунка находится 5760-байтовый буфер, который разделяет границу между двумя страницами. В этом примере буфер начинается с 1728-байтового смещения от начала первой страницы, что выравнивает начало буфера с 64-байтовой границей в памяти. Предположим, что каждый звуковой кадр занимает 12 байт и содержит шесть каналов. Первая страница содержит все кадры от 0 до 196, но только первые четыре байта кадра 197.
В нижней части рисунка представлено подробное представление аудиокадра 197, которое показывает, что только образцы для каналов 0 и 1 попадают в первую страницу. Примеры для каналов 2–5 содержатся на второй странице.
Хотя две страницы отображаются рядом друг с другом в верхней части рисунка, на самом деле они являются смежными только в виртуальной памяти ядра. Так как страницы, содержащие буфер, не являются непрерывными в физической памяти, контроллер DMA точечной и сборной данных, использующий физические адреса, должен указывать две части буфера в виде двух отдельных записей в очереди передачи. Драйвер порта WavePci автоматически разделяет буфер на два отдельных физических сопоставления на границе страницы.
Даже если предыдущий пример изменен для выравнивания буфера с началом первой страницы, проблема разделения кадра не исчезнет. На следующем рисунке показано это. В этом случае кадр 341 разбивается на границе страницы с выборками для каналов 0 и 1 снова попадает в первую страницу, а примеры для каналов 2–5 находятся на второй странице.
Устройство WavePci, контроллер DMA которого не обрабатывает разделенные аудиокадры должным образом, ограничено форматами звуковых данных, которые оно может обрабатывать, хотя программные обходные пути могут помочь устранить некоторые недостатки в проектировании оборудования. Дополнительные сведения см. в разделе Задержка WavePci.