Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Тормоза с чтением из RAM через PCI

Отправлено vitalyn (192.168.0.65,217.117.85.108) 25 марта 2011, г. 11:43


Пару лет назад я разработал плату PCI, которая занимается вычитыванием данных из памяти и их обработкой. Для одного цикла обработки ей нужно вычитать в режиме Bus Mastering (DMA) 48 порций данных по 6 слов по 32 бита, соответственно, очень важно, сколько таких циклов обработки за секунду она сможет сделать. Раньше мы использовали материнские платы ASUS M2N SLI на чипсете nVidia nForce 570 с процессором Athlon X2 2.6 GHz и памятью DDR2 (2x1G), на этих мамках плата замечательно работала и обеспечивала расчётную производительность (более 20 кГц). Также мы использовали мамки MiniITX Intel D945GCLF2D с процессором Atom 1 GHz и памятью DDR2 (2x1G), на этих мамках производительность была поменьше - 11 кГц, но для ряда задач этого было достаточно. А вот сейчас в связи с тем, что мамки ASUS M2N SLI стали недоступны, возникла насущная потребность найти другие на замену. И тут возникла проблема - на что же менять. Попробовал какую-то с процессором Intel Core i5 и памятью DDR3 (2x2G) - медленно получается - 9.7 кГц. Ещё медленнее, чем даже на занюханном Атоме. Попробовал ASUS M4A88T-M на чипсете AMD 880G/SB710 с процессором Athlon II X2 255 3.1 GHz и памятью DDR3 (2x2G) - ещё хуже - 9.45 кГц.

Посмотрел, что на шине PCI происходит. Моя плата выставляет #REQ ("пустите шиной порулить"), ей даётся #GNT ("на, играйся!"), плата выставляет #FRAME, адрес, начиная с которого она хочет читать из памяти и выставляет #IRDY, что означает, что она готова принимать данные. Но мать, вместо того, чтобы выдать ей #TRDY и требуемые данные, примерно в половине случаев выставляет #STOP ("сейчас невозможно продолжить транзакцию, попробуйте попозже, может повезёт в следующий раз"), т.е. мать настолько неготова выдать мне требуемые данные из ОЗУ, что даже не притормаживает транзакцию циклами ожидания, а вообще обрывает стопом. А по стопу нужно снять #FRAME, #REQ, #IRDY, потом снова выставить #REQ, получить #GNT и так далее... В результате несколько десятков тактов шины PCI тратятся бесплодно на всякие служебные передёргивания, не сопровождающиеся передачей полезных данных.

Это несколько непонятно. Частота шины PCI всего 33 МГц, частота работы модулей памяти - около гигагерца, в 30 раз больше, и тем не менее, вот такие дикие тормоза.

Управляющая программа занимается тем, что размещает данные в ОЗУ и даёт плате PCI сигнал, что можно начинать обработку, после этого программе делать вообще нечего, пока вся обработка не завершится. Программа работает под Linux. Память для размещения данных для обработки жёстко выделена - 1 ГБ отдан линуксу, 1 ГБ отдан под размещение обрабатываемых данных.

В общем, намекните, хотя бы - куда рыть? Объясните мне, почему новые мамки так нецензурно тормозят PCI? Как это победить? Как понять, какая мамка даст требуемую производительность? Может, надо что-то в чипсете настраивать? В БИОСе все настройки перепробовал - ничего не помогает. Пробовал ставить 4 планки DDR3 - ничего не дало.


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 56:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru