реклама на сайте
подробности

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Spartan 6 + LwIP, как добиться максимальной скорости
Methane
сообщение Apr 28 2013, 17:50
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(akorud @ Apr 28 2013, 20:39) *
В lwIP можно попробовать использовать memory pool - в одним из проектов очень помогло.

Угу. Идея замечательная. И никакой фрагментации памяти.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 28 2013, 18:15
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(akorud @ Apr 28 2013, 21:39) *
Из опыта: DDR тут практически не влияет если кеш работает. Я у себя в системе добавлял block ram для данных с критическим временем доступа - никакой заметной разницы (если нет других мастеров на шине, конечно).
В lwIP можно попробовать использовать memory pool - в одним из проектов очень помогло.
100MHz microblaze - очень не мало. Например 100Мбит трафик, пакеты по 1500 байт - всего около 8000 пакетов в секунду, совсем ничего. Надо искать где задержка (а для TCP именно она как правило ограничивает скорость). Проверенный метод - дергать GPIO и измерять время на осциллографе.

Если в ддр только данные, то да он быстрее проца. Но тут программа и данные, сразу и инструкции в большее число тактов, шины то 2 данных и инструкций, а ддр то одна(может правда на разные банки развести...). Данные и инструкции в разных местах, тут только кэш и спасает. Но теперь еще и езернет по дма+лвип в тот же ддр ломиться. В этом есть проблема.

Мемори пул это как? Если для буферов тср, то на хилых они уже пулом.


Поборюсь за живучесть стека, а потом создам прожку записи- чтения памяти, а там поглядим....
К 8000 пакетов добавьте контрольные суммы, парсинг, раскладку в памяти и уже не мало....
Go to the top of the page
 
+Quote Post
alexPec
сообщение Apr 28 2013, 19:59
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



А может чтобы исключить задержки подтверждения и остальную TCP лабуду просто погонять UDP и померить скорость?
Если устроит - копать именно в TCP приблудах, а если нет - то "дело даже не в бобине"...
Go to the top of the page
 
+Quote Post
akorud
сообщение Apr 29 2013, 07:23
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842



Цитата(Golikov A. @ Apr 28 2013, 20:15) *
Если в ддр только данные, то да он быстрее проца. Но тут программа и данные, сразу и инструкции в большее число тактов, шины то 2 данных и инструкций, а ддр то одна(может правда на разные банки развести...). Данные и инструкции в разных местах, тут только кэш и спасает. Но теперь еще и езернет по дма+лвип в тот же ддр ломиться. В этом есть проблема.

Мне кажется вы недооцениваете DDR, 333MHz/DDR/8b -> 5Gbps, для такой задачи вполне достаточно. Что касается DMA, то самописный AXI мастер (думаю далеко не лучший) справлялся в 5мкс для 1500-байтного пакета при частоте шины 50МГц.

Цитата(Golikov A. @ Apr 28 2013, 20:15) *
Мемори пул это как? Если для буферов тср, то на хилых они уже пулом.


у lwIP все выделения памяти идут через свой аллокатор из собственной "песочницы". Аллокатор может быть malloc-like либо pool-based. Второй несколько быстрее ценой менее эффективного использования памяти.
Кстати если включить внутреннюю проверку целостности памяти - очень замедляет работу lwIP.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 29 2013, 09:28
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Вот кручу кэши,

Кэш данные на 2 Бандка ДДР(адреса), 64 кбайта, 8 словная строка, все включить кроме тагов в дистрибутед рам, виктим 8, 32 битная шина данных

Кэш инструкций на 2 банка ДДР (адреса), 64 кбайта, 8 словная строка, все включить кроме тагов в дистрибутед рам, виктим 8, 32 битные данные.

В такой конфигурации включение кеша данных проходит.
А включение кеша инструкций вызывает повисание программы... И что я сделал не так не понятно... Перед включением кеши пробовал инвалидайтить, не помогает... что не так не пойму...

тестовый пример от тренца
32 кбайта кеши и на 1 банк ДДР, это принципиально?

Цитата(akorud @ Apr 29 2013, 11:23) *
у lwIP все выделения памяти идут через свой аллокатор из собственной "песочницы". Аллокатор может быть malloc-like либо pool-based. Второй несколько быстрее ценой менее эффективного использования памяти.
Кстати если включить внутреннюю проверку целостности памяти - очень замедляет работу lwIP.


это про ЛвИП в целом или именно про тот что отбиблиотечен ксалинксом? Потому что таких настроек я что-то не нахожу....
Go to the top of the page
 
+Quote Post
akorud
сообщение Apr 29 2013, 19:04
Сообщение #21


Местный
***

Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842



Цитата(Golikov A. @ Apr 29 2013, 11:28) *
Вот кручу кэши,

Кэш данные на 2 Бандка ДДР(адреса), 64 кбайта, 8 словная строка, все включить кроме тагов в дистрибутед рам, виктим 8, 32 битная шина данных

Кэш инструкций на 2 банка ДДР (адреса), 64 кбайта, 8 словная строка, все включить кроме тагов в дистрибутед рам, виктим 8, 32 битные данные.

В такой конфигурации включение кеша данных проходит.
А включение кеша инструкций вызывает повисание программы... И что я сделал не так не понятно... Перед включением кеши пробовал инвалидайтить, не помогает... что не так не пойму...

тестовый пример от тренца
32 кбайта кеши и на 1 банк ДДР, это принципиально?

У меня кеши по 8кб, line size 4, что такое банк ДДР - честно не знаю.

Цитата(Golikov A. @ Apr 29 2013, 11:28) *
это про ЛвИП в целом или именно про тот что отбиблиотечен ксалинксом? Потому что таких настроек я что-то не нахожу....

В целом. Библиотечный не использовал - что-то мне в нем не понравилось, не помню точно что. Втянул исходники в проект и сконфигурировал как мне нужно было.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 29 2013, 20:43
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



А что за плисины, какие частоты и сколько они в итоге выдают? Какая скорость езернета?
Go to the top of the page
 
+Quote Post
akorud
сообщение Apr 30 2013, 21:06
Сообщение #23


Местный
***

Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842



Цитата(Golikov A. @ Apr 29 2013, 22:43) *
А что за плисины, какие частоты и сколько они в итоге выдают? Какая скорость езернета?

Не знаю поможет ли вам, т.к. проект специфический - обработка пакетов идет в самописном блоке подключенном прямо к МАС, но при этом каждый пакет записывается в ДДР и через некоторое время читается обратно. Также каждый пакет вызывает прерывание, но microblaze не анализирует содержимое пакетов. lwIP передаются только "приблудные" пакеты (ARP, ICMP...).
S6, speedgrade -2, частота шины 50МГц, до около 800Мбит проблем не было.

Что еще можно посмотреть: т.к. lwIP активно использует таймеры и потоки, то разрешение системного таймера и алгоритм планировщика могут сильно влиять. У наблюдалось изменение времени пинга на порядок.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение May 1 2013, 04:36
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



я без операционки...

А почему частота системной шины 50?

Go to the top of the page
 
+Quote Post
akorud
сообщение May 1 2013, 08:09
Сообщение #25


Местный
***

Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842



Цитата(Golikov A. @ May 1 2013, 06:36) *
я без операционки...

А почему частота системной шины 50?

На самом деле там две шины - AXI - память, и AXI lite - регистры периферии. Изначально было 100 и 50. Но т.к. в своем блоке не хотелось связываться с разными клоками - было принято решение выбрать один клок для всей системы. Выбор 100 привел бы ненужному усложнению AXI Lite - а он большой (много периферии) и ничего не делает. И поскольку 50 хватает для данной задачи - выбрали 50.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение May 1 2013, 08:45
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Мне как раз интересно зачем делают шину АХИ лайт 50, почему не 100? Есть где то какие то описания? Есть какие то ограничения?

Просто у меня проект с 64 Кбайт кэша так и не запустился, падает после подключения кеша инструкций. С 32 Кбайтами кэша работает. Вот думаю может работает на переделе, и чуть увеличу нагрузку начнет сбоить... Не понимаю ни как проверить, ни как обеспечить запас...

Go to the top of the page
 
+Quote Post
akorud
сообщение May 1 2013, 10:55
Сообщение #27


Местный
***

Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842



Цитата(Golikov A. @ May 1 2013, 10:45) *
Мне как раз интересно зачем делают шину АХИ лайт 50, почему не 100? Есть где то какие то описания? Есть какие то ограничения?

Просто у меня проект с 64 Кбайт кэша так и не запустился, падает после подключения кеша инструкций. С 32 Кбайтами кэша работает. Вот думаю может работает на переделе, и чуть увеличу нагрузку начнет сбоить... Не понимаю ни как проверить, ни как обеспечить запас...

Потому, что не нужно sm.gif. Через AXI lite в типичных системах доступны регистры периферии операции с которыми сравнительно редкие. Также стоит учесть что, как правило, единственный мастер на шине - микроблейз, транзакции генерируются программно - например *(uint32_t* GPIO_REG_ADDR) = val; - и процессор просто не состоянии ее загрузить.
Можно и 100 - но тогда больше вероятность (зависит от чипа и от размера проекта), что не сойдутся тайминги и придется добавлять промежуточные регистры (FULLY_REGISTERED или LIGHT_WEIGT вместо BYPASS) - а оно надо? Да и потребляет больше на 100.
Кстати о таймингах - в процессе синтеза они анализируются для наихудшего случая (температура 85 и минимальное напряжения питания). Так что описанные симптомы указывают что таки не сошлись, а вы не заметили, либо внешние условия совсем плохи (напряжение питания, целостность сигналов).

P.S. Если нужно только мигать LED раз в секунду - можно частоту шины установить 5Гц (насколько я помню одна транзакция столько около 5 тактов занимает) - и тогда в программе вообще не придется задержек делать - процессор 99.999999% времени будет в состоянии ожидания.

P.P.S. Мне показалось у AXI-based систем довольно крутой "порог вхождения", приходилось и документацию от ARM читать (AXI = AMBA) и с ChipScope ночами сиживать... Зато потом - sky is the limit sm.gif

Сообщение отредактировал akorud - May 1 2013, 11:12
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение May 1 2013, 11:36
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(akorud @ May 1 2013, 14:55) *
Потому, что не нужно sm.gif. Через AXI lite в типичных системах доступны регистры периферии операции с которыми сравнительно редкие. Также стоит учесть что, как правило, единственный мастер на шине - микроблейз, транзакции генерируются программно - например *(uint32_t* GPIO_REG_ADDR) = val; - и процессор просто не состоянии ее загрузить.
Можно и 100 - но тогда больше вероятность (зависит от чипа и от размера проекта), что не сойдутся тайминги и придется добавлять промежуточные регистры (FULLY_REGISTERED или LIGHT_WEIGT вместо BYPASS) - а оно надо? Да и потребляет больше на 100.
Кстати о таймингах - в процессе синтеза они анализируются для наихудшего случая (температура 85 и минимальное напряжения питания). Так что описанные симптомы указывают что таки не сошлись, а вы не заметили, либо внешние условия совсем плохи (напряжение питания, целостность сигналов).

P.S. Если нужно только мигать LED раз в секунду - можно частоту шины установить 5Гц (насколько я помню одна транзакция столько около 5 тактов занимает) - и тогда в программе вообще не придется задержек делать - процессор 99.999999% времени будет в состоянии ожидания.

P.P.S. Мне показалось у AXI-based систем довольно крутой "порог вхождения", приходилось и документацию от ARM читать (AXI = AMBA) и с ChipScope ночами сиживать... Зато потом - sky is the limit sm.gif


Я планировал через акси лайт набивать фифо модуля, который потом будет данные наружу синхронно пихать по нескольким каналам. Но в целом и 50МГц мне подойдет...

Только вот вопрос, передачи по акси лайт не блокирующая? То есть если я в цикле что-то пишу, я же так и буду стоять ждать? В операционной системе понятно что другие процессы будут выполняться, а без операционки я так в этом процессе и повисну? Причем я так понимаю записывая в память просто через указатель, у меня даже нет шансов во время ожиданий что-то еще поделать. Или я не прав?

Тайминги я не то чтобы не заметилsm.gif Я просто даже не уверен что знаю где смотреть. Я в микроблайзе ваще по нулям и плисинами давно не занимался, а еще все так поменялось пока я армами занимался...sm.gif Был уверен что если частота задана, клок визард все клоки создал, то процессор просто не соберется если что-то не так с таймингами... Где посмотреть? Подскажите пожалуйста.

У меня питальник всего 800 мА на 12 вольт. Вроде бы в стандартном варианте плисинка жрет по 12 вольтам (ну понятно что до плисины куча регуляторов и преобразователей) около 300 мА, и я думал что это с запасиком... Но регистры я добавил на шину что на память идет, это мне позволило стабильно запускать проект с 32 КБайтами кеша, хотя среда говорила что никаких бонусов не будет, и предлагала Light Wight вместо Full registered, но я не пошел на поводуsm.gif... а вот 64 КБайта так и не пустились.....

последние про порог вхождения если честно я ваще не понялsad.gif... типа трудно разобраться, но потом быстро поедем? Меня не покидает чувство какого-то наколеночного продукта если честно. Проц - это проц, он сделан, описан, оттестирован, а тут шуршал шуршал, что-то собрал, оно как-то завелось, а вот как хрен знает... Все время сижу и думаю вот оно сейчас работает, а завтра? А если дождь пойдет?
Go to the top of the page
 
+Quote Post
akorud
сообщение May 1 2013, 11:59
Сообщение #29


Местный
***

Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842



Цитата(Golikov A. @ May 1 2013, 13:36) *
Я планировал через акси лайт набивать фифо модуля, который потом будет данные наружу синхронно пихать по нескольким каналам. Но в целом и 50МГц мне подойдет...

Если предположить, что транзакция записи на AXI Lite занимает 4 такта (не помню точно протокола), процессор работает на 100МГц, а шина на 50 - то после каждой операции записи процессор будет ждать 8 своих тактов (4 такта шины) в идеальном случае.
Учитывайте при разработке архитектуры.
Цитата(Golikov A. @ May 1 2013, 13:36) *
В операционной системе понятно что другие процессы будут выполняться,

нет
Цитата(Golikov A. @ May 1 2013, 13:36) *
а без операционки я так в этом процессе и повисну? Причем я так понимаю записывая в память просто через указатель, у меня даже нет шансов во время ожиданий что-то еще поделать. Или я не прав?

Повиснете в любом случае:
Цитата
MicroBlaze will stall while waiting on a bus response and will not be able to do anything while it waits.
That includes everything, it will not response to interrupt, it's in fact totally stalled until it gets the bus response.


Цитата(Golikov A. @ May 1 2013, 13:36) *
типа трудно разобраться, но потом быстро поедем?

Да
Цитата(Golikov A. @ May 1 2013, 13:36) *
Проц - это проц, он сделан, описан, оттестирован

Да, но вы собираете SoC - проц в которой один из элементов, прочем далеко не самый сложный. Тот же tri-mode ethernet сложнее.
И то, что проц работает никак не значит что вся система будет работать.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение May 1 2013, 13:26
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



А где времянку глянуть, это чей отчет? в суммари должно быть?


если виснет при обмене, не буду пока шину снижать по частоте...


хороший проц готовый имеет и периферию так же оттестированнуюsm.gif


В этом отношении мне все больше начинает нравиться цинк по своей идее...
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 23:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01517 секунд с 7
ELECTRONIX ©2004-2016