|
|
  |
Эффективность DMA в SAM7, Выделено из "ARM много,..." |
|
|
|
Sep 27 2008, 20:44
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(aaarrr @ Sep 27 2008, 22:31)  с 100 Ethernet MAC MAC-ом от LPC на данный момент доволен как слон  . Благодаря отдельной шине+16K банк+DMA большое количество мелких пакетов летают почти даром. Цитата быстрым SPI... SPI/SSP обычно себя ведут, вроде  , ибо у меня только AT45 на штатном SPI. SPI+аппаратная поддержка протокола для связи с внешними миром в FPGA уползла, а на FPGA хоть и на 8bit шине, по скорости тоже пожаловаться не могу. Хотя, конечно, внешнюю шину втихаря (в старых PDF диаграммы были - в новых выбросили) тормознули (зато работает  ) и теперь в ней все по тактам ядра.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 27 2008, 20:50
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(aaarrr @ Sep 28 2008, 00:42)  Справедливости ради: ...и без FIFO... Ничего удивительного. Конечно, но согласитесь что в данном случае ДМА лучший вариант чем FIFO. Цитата UART - не самый удачный пример в данном случае. Вот скоростной SPI - другое дело. Цитата(aaarrr @ Sep 27 2008, 22:03)  PDC предназначен для обслуживания медленной периферии, и с этой задачей справляется отлично. Вот я чего-то недопонимаю, почему пример с uart в данном случае не лучший ? Цитата Но лучше иметь и DMA и FIFO - тогда появляется возможность выбора. Кто б спорил, более того иногда можно совмещать эти 2 варианта.
|
|
|
|
|
Sep 27 2008, 20:53
|

Знающий
   
Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065

|
Цитата(zltigo @ Sep 28 2008, 01:34)  до получения конца фрейма кладется в нужный буфер. Как Вы определяете конец фрейма? 1) по количеству байт или 2) признаком конца является какой-то особый байт Если первое, то это работа чисто для ДМА. Зарядили ему количество, он тупр забирает их у периферии и кладет нерассматривая в памать. Но ведь Вы говорили, что Цитата байт ориентированные интерфейсы я лично всегда в потоке по байтам разбираю Значит, получается -- второе. Т.е. в самом прерывании (от периферии) забираете принятый байт, оцениваете его на предмет маркера конца фрейма и кладете (или не кладете) его в память, подсчитываете CRC, занимаетесь задачами байт-стаффинга ... ну и т.д. Но ведь это-то как раз не эффективно получается. Или я что-то не понял. Цитата тем не менее, по действительно с минимальными затратами ресурсов оказавшимуся в памяти фрейму надо пробежаться, посчитать сумму это, простите, ВРЕМЯ (хорошо, если квитирование есть и канал ждет, а если нет - ой!). Цитата А уж если сбой какой, то тут уже и пляски с бубном - где начало, где конец, выбросить битый фрейм, переслать огрызок потенциально целого по месту, DMA препрограммировать нештатно.... Причем здесь бубен? Битый фрейм выкидываем без разговоров ("немножко мертвый" -- нет такого понятия!) и полностью -- никаких "огрызков". Цитата Короче где экономия от того, что у меня с небольшими затратами в памяти что-то потенциально НЕПОНЯТНОЕ оказалось? Вы спрашиваете? Я Вам отвечу! Экономия в том, что процессы получения и обработки становятся независимы друг от друга. Другими словами, процесс обработки мы можем выполнить тогда, когда высвободится процессор, в то же время, процесс получения потока в памать ресурсы проца вообще никак не занимает. Правда тут есть накладные расходы, нужно иметь в памяти два буфера, которые работают по-переменно. (Но, как мне кажется, потери памяти не велики -- всего пол-кило байт!) Как это выглядит. Принимаем заголовок пакета, где (помимо еще чего-нибудь) находится длина пакета. Длину пакета засылаем в ДМА. И, собственно все! Ждем прерывания об окончании ДМА-операции. В это время решаем свои насущние задачи. Приходит прерывание от ДМА, переключаемся на второй буфер и ставим флаг готовности первого буфера. Выходим из прерывания. Где-то там в процессе бесконечного цикла должна быть проверка этого флага. Если флаг стоит, то вызываем функцию подсчета CRC и т.д. В это время могут возникать отдельные прерывания по приему байтов заголовка следующего пакета, которые не влияют на подсчет CRC и последущую обработку пакета. Тут может быть имеет смысл признаться, что реальные устройства занимаются помимо описанных выше действий занимаются еще и другой работой: мониторят кнопочи, моргают светодиодиками, рисуют на экране... Вот про кнопочки -- это очень актуально. Если окажется, что система будет реагировать на нажатия с запаздыванием (если вообще сможет, гы-гы!), то такой девай вряд ли кому-то будет нужен. Теоретически, интегральное время обработки всего и всех должно быть меньше, чем обшее время работы проца. В противном случае нужно выбирать другой более быстрый проц или решать задачу с привлечением нескольких камней. Одно дело математическое суммирование времен выполнения процессов без оглядки на то, что процессы несинхронны, и другое дело -- реальное рапределение занятости проца. Я говорю о том, когда процу "приспичит" делать одновременно сразу несколько дел: обработать пакет, нарисовать что-то на экране и успеть вякнуть на нажатие кнопки. Поэтому следует четко осознавать приоритеты задач, продолжительность выполнения задач и время, на какое можно отложить их выполнение (поставить в очередь). Не скрою, мне тоже приходится решать уникальные трудные (== интересные) задачи. Боюсь, что поднятый мной вопрос об эффективности по-байтовой обработке потока очень многословен. На столько многословен, что обсуждение его в форуме становится практически невозможно. Поэтому, если нет возражений, то я снимаю его.
--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
|
|
|
|
|
Sep 27 2008, 20:56
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(singlskv @ Sep 27 2008, 22:37)  Пакеты длинной до 256байт, FIFO например в 16 байт будет более эфективен ? Фреймы до где-то 386 байт, два потока по 115K в качестве вспомогательных задач. FIFO 16. Никаких проблем и близко не наблюдается. Цитата А каков % таких нештатных ситуаций/битых пакетов ? В моих условиях может быть до 100% - надо жить и когда вместо даннных вдруг полный мусор пошел. Дело ведь не в том, что нельзя найти часный случай, когда голое FIFO или голое DMA на ARM7 не будет на сколько-то там проценов эффективнее, а в том, что это для поростых ARM совершенно сопоставимые по эффективности решения, и говорить "ах, как жить без DMA" совершенно необъективно.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 27 2008, 20:59
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(zltigo @ Sep 28 2008, 00:44)  MAC-ом от LPC на данный момент доволен как слон  . Благодаря отдельной шине+16K банк+DMA большое количество мелких пакетов летают почти даром. К SAM'у тоже претензий нет. Немного раздражает только фиксированный размер приемных буферов - 128 байт. Цитата(zltigo @ Sep 28 2008, 00:44)  SPI/SSP обычно себя ведут, вроде  , ибо у меня только AT45 на штатном SPI. SPI+аппаратная поддержка протокола для связи с внешними миром в FPGA уползла, а на FPGA хоть и на 8bit шине, по скорости тоже пожаловаться не могу. Хотя, конечно, внешнюю шину втихаря (в старых PDF диаграммы были - в новых выбросили) тормознули (зато работает  ) и теперь в ней все по тактам ядра. Мне на SPI придется 20Мбит выплевывать, возможно одновременно через два канала. Поэтому делитель SSP не вызвал восторга. А внешние шины - это, похоже, вечная проблема Philips/NXP - на своих USB-контроллерах они их тоже замедляли потихоньку
|
|
|
|
|
Sep 27 2008, 21:05
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(singlskv @ Sep 28 2008, 00:50)  Вот я чего-то недопонимаю, почему пример с uart в данном случае не лучший ? Потому что он слишком медленный, и при наличии FIFO серьёзную нагрузку на процессор дать не может. Цитата(zltigo @ Sep 28 2008, 01:00)  Эти варианты ДОЛЖНЫ быть совмещены, ибо что будет делать периферия, если ей канал DMA мгновенно не дадут когда ей приспичит. А кто же ему запретит-то?  И уж на одно слово FIFO присутствует всегда.
|
|
|
|
|
Sep 27 2008, 21:23
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(zhevak @ Sep 27 2008, 22:53)  Как Вы определяете конец фрейма? 1) по количеству байт или 2) признаком конца является какой-то особый байт конечно второй вариант - я же говорил волшебное слово SLIP. По "количеству", волшебным заголовкам это менее универсально и надежно. Цитата Если первое, то это работа чисто для ДМА. Зарядили ему количество, он тупр забирает их у периферии и кладет нерассматривая в памать. И даже в этом случае у Вас,например, банально в канале пропал байт во фрейме. Дальше сами расскажите, как будете вылезать из ситуевины? Цитата Причем здесь бубен? Битый фрейм выкидываем без разговоров ("немножко мертвый" -- нет такого понятия!) и полностью -- никаких "огрызков". Для определения битости фрейма нужно по нему всему пробежаться-прочитать-просуммировать, даже если он целый пришел. А если в конце вместо последнего байта начало следующего фрейма прибежало.... разборки начались, извлечение целого фрейма, восстановление синхронизации фреймов, скоее всего в Вашем простешем случае уже и потеря втрого фрейма... время, время, время... Я уже писал, что не вчера и не сразу умным родился, контроллеров разных и DMA и без пользовал для разных задач... В результае я начинаю рассматривать для байтовых (нефреймовых) интерфейсов прежде всего работу в FIFO, даже если есть выбор. Далее, а буфер-то у нас какой? Кольцевой? А как с поддержкой кольцевых буферов? У всех DMA контроллеров с этим хорошо? У нориальных DSP - хорошо, а у SAM7 просто никак. Заодно и расход памяти минимум на две целых полочки для макимальных фреймов не радует совсем. Минималистичный, прямо скажем, DMA  Цитата(aaarrr @ Sep 27 2008, 23:05)  А кто же ему запретит-то?  И уж на одно слово FIFO присутствует всегда. Другой, DMA, например, захватил шину. Разруливать по слову будем, и при этом рассуждать об эффективности DMA? На одно слово, это не FIFO.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 27 2008, 21:58
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(aaarrr @ Sep 27 2008, 23:36)  Другой DMA (если это PDC) захватить шину может на время передачи одного слова, EMAC - на 4-х. Никаких затыков при таких условиях не будет. Не об этом речь, а об ЭФФЕКТИВНОСТИ работы DMA в режиме захватил(сколько тактов), одно слово передал, освободил(сколько тактов)... Вылезли все, помнится, 18 каналов (ну крутой контроллер - 18 штук целых!) SAM7 с желанием поработать, через сколько тактов крайний разгрузится? На MAC/USB ведь FIFO поставили  А как Вы там будете 2x20Mbit из SPIев на голых DMA дерущихся за шину тянуть, это уже тоскливо становится. Цитата(DpInRock @ Sep 27 2008, 23:56)  Если нормально распорядиться. Вы уже умеете "нормально распоряжаться", дабы никому не мешать? Или, полагаете, что это знание придет после оплаты 200USD за многослойку  ? Про умелое обращение с ARM9 (кэши, MMU, SDRAM....) можно еще много больше поговорить  .
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 27 2008, 22:46
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(zltigo @ Sep 28 2008, 01:58)  Не об этом речь, а об ЭФФЕКТИВНОСТИ работы DMA в режиме захватил(сколько тактов), одно слово передал, освободил(сколько тактов)... Вылезли все, помнится, 18 каналов (ну крутой контроллер - 18 штук целых!) SAM7 с желанием поработать, через сколько тактов крайний разгрузится? На MAC/USB ведь FIFO поставили  А как Вы там будете 2x20Mbit из SPIев на голых DMA дерущихся за шину тянуть, это уже тоскливо становится. Во-первых, все -дцать каналов одновременно не вылезут, ибо даже приложение такое придумать трудно. Единственное, что известно от Atmel'а: Цитата • One Master Clock Cycle Needed for a Transfer from Memory to Peripheral • Two Master Clock Cycles Needed for a Transfer from Peripheral to Memory А 2x20Mbit с параллельно работающим EMAC я и сейчас тяну без особых проблем.
|
|
|
|
|
Sep 27 2008, 23:01
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(DpInRock @ Sep 28 2008, 00:37)  Человеку интересно совсем не то, что вы обсуждаете, то бишь флудите. См. заглавную статью топика. Смешно  . Товарщ захотел сделать буквально на коленке плату уровня ARM7 - логично (не то, что на коленке, а то, что ARM7), самый, что ни наетсь сегодняшний mainstream. Рассуждаем о выборе производителя, ну подробно рассуждаем, углубленно, так сказать... А тут некто периодически встревает за многслойки за сотни баксов, ARM9, навеске на него всекой вячины типа LCD на "вырост". А сейчас еще и о флуде разговор завел. Не сочтите за наезд, но пыл умерьте, пожалуйста. Можете очередную тему создать типа "ARM9 для начинающих" и подробнейшим образом высказаться о путях и методах. С удовольствием поучаствую, или помолчу - как скажите.... Цитата(aaarrr @ Sep 28 2008, 00:46)  Единственное, что известно от Atmel'а: Это именно про "Low bus arbitration overhead" плюс сама пересылка.. Итого не менее трех тактов на пословную пересылку из переферии + тормоза собственно периферийной шины...
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 27 2008, 23:19
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(zltigo @ Sep 28 2008, 03:01)  Это именно про "Low bus arbitration overhead" плюс сама пересылка.. Да нет, это всего (я смотрел описание IP Core, а не DS). Цитата(zltigo @ Sep 28 2008, 03:01)  Итого не менее трех тактов на пословную пересылку из переферии + тормоза собственно периферийной шины... Все равно полоса внутренней шины многократно покрывает способности периферии, как ни крути.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|