Jump to content
    

Организация обмена с устройством PCI-Express через DMA

Подскажите как повысить скорость обмена с устройством, подключенным к шине PCIe?

Логично использовать в этом случае DMA.

Интересует два момента: 1-вопрос связанный программированием (написанием драйвера); 2-поддержка DMA самим устройством (если данный пункт необходим).

 

На макетной плате получаем результаты: скорость чтения примерно 6Мбайт, на запись - 2Мбайта.

Share this post


Link to post
Share on other sites

2. поддержка со стороны PCIe-device фичи DMA просто необходима

 

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

 

(либо делать немножко послежнее -как это реализовано например в контроллере DMA для IDE PCI-платы: девайсу просто передается адрес таблицы, содержащей массив данных: адреса и размеры данных для пересылки - что позволяло "раскидывать" данные при пересылках произвольным образом внутри секторов 64К)

Share this post


Link to post
Share on other sites

2. поддержка со стороны PCIe-device фичи DMA просто необходима

 

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

Share this post


Link to post
Share on other sites

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

 

насчет отсутствия линий захвата шины: так в PCI Express каждый слот к индивидуальному хосту подключен

Share this post


Link to post
Share on other sites

насчет отсутствия линий захвата шины: так в PCI Express каждый слот к индивидуальному хосту подключен

 

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

Share this post


Link to post
Share on other sites

Вот в nVidia как я понял хотят видяху обучить этому же - до того видать не умела. Так вот чего надо:

 

1. поддержка устройства

2. поддержка ОСи!!!

 

Я честно не особо разбирался, но где-то читал, что имеено потому что GeForce8800 и DirectX 10 предусматривают нечто подобное, DirectX 10 и существует ТОЛЬКО под Vista, под XP его нет.

Share this post


Link to post
Share on other sites

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

 

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

 

В PCIe, действительно, нет линий захвата шины. По одной причине: они не нужны. Так как все физические соединения последовательные точка-точка. По ним гоняются пакеты, хабы направляют пакеты в нужном направлении в порядке очереди и приоритетов, при необходимости их буферизуя. Если устройство хочет выполнить роль мастера - оно проста по своей шине посылает соответствующий пакет, следя, чтобы он не конфликтовал с другими пакетами, посылаемыми самим же устройством :)

Share this post


Link to post
Share on other sites

Поделитесь плз доками про программирование PCIe и пример драйвера.... Драйвер WDM обычно делают? И в чем? :)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...