Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Организация обмена с устройством PCI-Express через DMA
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Программирование
alee
Подскажите как повысить скорость обмена с устройством, подключенным к шине PCIe?
Логично использовать в этом случае DMA.
Интересует два момента: 1-вопрос связанный программированием (написанием драйвера); 2-поддержка DMA самим устройством (если данный пункт необходим).

На макетной плате получаем результаты: скорость чтения примерно 6Мбайт, на запись - 2Мбайта.
Doka
2. поддержка со стороны PCIe-device фичи DMA просто необходима

1. в драйвере особо революционных изменений нет: просто теперь вместо самих пересылок вам надо "заряжать" для их осуществления контроллер DMA на девайсе: с какого адреса брать и сколько данных (ну и направление)

(либо делать немножко послежнее -как это реализовано например в контроллере DMA для IDE PCI-платы: девайсу просто передается адрес таблицы, содержащей массив данных: адреса и размеры данных для пересылки - что позволяло "раскидывать" данные при пересылках произвольным образом внутри секторов 64К)
alee
Цитата(Doka @ Apr 1 2007, 22:49) *
2. поддержка со стороны PCIe-device фичи DMA просто необходима


Это в теории или на практике? Ведь в PCI Express нет выделенных линий для захвата шины в отличае от PCI. Каким образом устройство должно обеспечить работу через DMA?
Doka
честно говоря сужу действительно по аналогии с PCI - должен существовать на стороне девайса некий автомат (контроллер DMA), который осуществляет пересылку без вмешательства со стороны CPU

насчет отсутствия линий захвата шины: так в PCI Express каждый слот к индивидуальному хосту подключен
alee
Цитата(Doka @ Apr 1 2007, 23:23) *
насчет отсутствия линий захвата шины: так в PCI Express каждый слот к индивидуальному хосту подключен


Все еще не понятен механизм организации такого обмена. Складывается впечатление, что должно быть промежуточное звено на шине (возможно Root Complex - в терминах спецификации), которое и отвечает за прямой доступ к памяти.
InvisibleFed
Вот в nVidia как я понял хотят видяху обучить этому же - до того видать не умела. Так вот чего надо:

1. поддержка устройства
2. поддержка ОСи!!!

Я честно не особо разбирался, но где-то читал, что имеено потому что GeForce8800 и DirectX 10 предусматривают нечто подобное, DirectX 10 и существует ТОЛЬКО под Vista, под XP его нет.
Oldring
Цитата(alee @ Apr 2 2007, 02:17) *
Это в теории или на практике? Ведь в PCI Express нет выделенных линий для захвата шины в отличае от PCI. Каким образом устройство должно обеспечить работу через DMA?


DMA (Direct Memory Access) в применении к PCI называется Bus Master. Если устройство хочет выполнить роль мастера - оно берет управление на себя и формирует требуемый цикл шины.

В PCIe, действительно, нет линий захвата шины. По одной причине: они не нужны. Так как все физические соединения последовательные точка-точка. По ним гоняются пакеты, хабы направляют пакеты в нужном направлении в порядке очереди и приоритетов, при необходимости их буферизуя. Если устройство хочет выполнить роль мастера - оно проста по своей шине посылает соответствующий пакет, следя, чтобы он не конфликтовал с другими пакетами, посылаемыми самим же устройством smile.gif
alee
Спасибо за ответы, ситуация прояснилась!
Playnet
Поделитесь плз доками про программирование PCIe и пример драйвера.... Драйвер WDM обычно делают? И в чем? smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.