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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Оптимизация LwIP
Veg@
сообщение Feb 26 2010, 19:24
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 16-09-09
Пользователь №: 52 416



Код
    struct pbuf *q, *pq;
    char* ptr;
    . . .
    ptr = pq->payload;
    for(q = p; q != NULL; q = q->next) {
        memcpy(ptr, q->payload, q->len);
        ptr += q->len;
    }
    . . .

Данный код используется в LwIP для расположения содержимого буферов в памяти последовательно. На его выполнение затрачивается почти половина всего времени отправки UDP-пакета (0.14мс / 0.31мс). Для каждого пакета по 1484Б происходит две итерации.
Возможно ли ускорить это действие (DMA) или как-нибудь обойти (например, заранее располагая буферы в памяти в нужном порядке) ? Спасибо.
Железо: DK-NIOS-2S60N (StratixII), стандартная сборка Nios - Full featured.

Сообщение отредактировал Veg@ - Feb 26 2010, 19:33
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Feb 26 2010, 22:43
Сообщение #2


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Почитайте здесь : http://old.nabble.com/Tunning-TCP-in-Lwip-td7158695.html. Там много советов по оптимизации параметров.
Go to the top of the page
 
+Quote Post
Veg@
сообщение Feb 27 2010, 09:57
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 16-09-09
Пользователь №: 52 416



Цитата(sergeeff @ Feb 27 2010, 01:43) *
Почитайте здесь : http://old.nabble.com/Tunning-TCP-in-Lwip-td7158695.html. Там много советов по оптимизации параметров.

Да, но большинство советов относится к оптимизации TCP и ответа на свой вопрос я также не нашел.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Feb 27 2010, 10:26
Сообщение #4


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



А что не понятно? Если ваш UDP пакет уходит за две итерации, значит размер одного pbuf мал для его размещения целиком. По крайней мере, можно передавать за одну итерацию.
Go to the top of the page
 
+Quote Post
Veg@
сообщение Feb 27 2010, 12:14
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 16-09-09
Пользователь №: 52 416



Цитата(sergeeff @ Feb 27 2010, 13:26) *
А что не понятно? Если ваш UDP пакет уходит за две итерации, значит размер одного pbuf мал для его размещения целиком. По крайней мере, можно передавать за одну итерацию.

Размер одного буфера 1536Б. И вообще, я думаю, не обязательно весь отправляемый пакет помещается в один буфер; возможно, он составляется из нескольких (напр., заголовки+данные).
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Feb 27 2010, 12:52
Сообщение #6


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(Veg@ @ Feb 27 2010, 15:14) *
Размер одного буфера 1536Б. И вообще, я думаю, не обязательно весь отправляемый пакет помещается в один буфер; возможно, он составляется из нескольких (напр., заголовки+данные).


Ну и чего вы тогда от lwip хотите? Раз вы не можете точно знать все лежит в одном буфере или вам надо раскрутить цепочку pbuf, значит кроме этого for-цикла вариантов нет. Может собака зарыта в вашем медленном memcpy? По крайней мере те memcpy, которые обычно в стандартных библиотеках находятся, мягко говоря, по скорости не ах.
Go to the top of the page
 
+Quote Post
Veg@
сообщение Feb 27 2010, 15:50
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 16-09-09
Пользователь №: 52 416



Функция memcpy выполняется довольно медленно, поэтому я и спрашиваю о конкретных способах обхода данного цикла.

Сообщение отредактировал Veg@ - Feb 27 2010, 15:51
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Feb 27 2010, 17:31
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



код memcpy доступен, идет в стандартной поставке. проверьте, не происходит ли побайтное копирование, это реальный затык для 32-битного проца.
http://www.embedded.com/columns/technicali...equestid=754901
если все равно медленно - тогда DMA
Go to the top of the page
 
+Quote Post
Veg@
сообщение Feb 27 2010, 19:22
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 16-09-09
Пользователь №: 52 416



Цитата
если все равно медленно - тогда DMA

Т.е. с DMA тоже свои определенные проблемы могут возникнуть или только реализация усложняется?
Go to the top of the page
 
+Quote Post
dspx
сообщение Feb 27 2010, 19:48
Сообщение #10


Участник
*

Группа: Свой
Сообщений: 54
Регистрация: 6-01-06
Из: Москва
Пользователь №: 12 876



Цитата(Veg@ @ Feb 27 2010, 22:22) *
Т.е. с DMA тоже свои определенные проблемы могут возникнуть или только реализация усложняется?


А под ниос нет контроллера ethernet, работающим в режиме DMA? т е чтобы он мог читать данные напрямую из памяти, минуя системную шину. У хилых ethrnet так можно сконфигурить.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Feb 27 2010, 23:55
Сообщение #11


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



А что автор так уперся в оптимизацию цикла for(...)? Это что, самое узкое место в его проекте?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Feb 28 2010, 03:00
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(Veg@ @ Feb 28 2010, 01:22) *
Т.е. с DMA тоже свои определенные проблемы могут возникнуть или только реализация усложняется?

усложняется немного, но достаточно, чтобы задать вопрос о целесообразности LWIP(или о глубокой оптимизации последнего). так что там с побайтным копированием? самому интересно. вот еще ссылка на эту тему: http://forum.niosforum.com/forum/index.php?showtopic=5795
Цитата
А под ниос нет контроллера ethernet, работающим в режиме DMA? т е чтобы он мог читать данные напрямую из памяти, минуя системную шину. У хилых ethrnet так можно сконфигурить.

проблема не в контроллере, они все в режиме DMA работают. поганое место - очередь пакетов и т.п., это все программно обруливается, и как показал топикстартер, довольно криво (медленно).
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Feb 28 2010, 10:08
Сообщение #13


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(vadimuzzz @ Feb 28 2010, 06:00) *
усложняется немного, но достаточно, чтобы задать вопрос о целесообразности LWIP(или о глубокой оптимизации последнего). так что там с побайтным копированием? самому интересно. вот еще ссылка на эту тему: http://forum.niosforum.com/forum/index.php?showtopic=5795

проблема не в контроллере, они все в режиме DMA работают. поганое место - очередь пакетов и т.п., это все программно обруливается, и как показал топикстартер, довольно криво (медленно).


На самом деле топикстартер ничего не показал, а только сказал, что цикл for() крутится довольно медленно (как ему кажется). Вопрос совсем в другом. Как этот самый for() отрицательно влияет на общую производительность приема/передачи по UDP? На сколько процентов падает реальная скорость? На 1%, 5%, 10%, 50%? За что бороться то? Уверен, что оптимизированная memcpy, для начала, покажет, что к чему.
Go to the top of the page
 
+Quote Post
Veg@
сообщение Feb 28 2010, 10:21
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 16-09-09
Пользователь №: 52 416



Цитата(sergeeff @ Feb 28 2010, 02:55) *
А что автор так уперся в оптимизацию цикла for(...)? Это что, самое узкое место в его проекте?
Вероятнее всего.
Цитата
так что там с побайтным копированием?
Благодарю за интерес. Сейчас временно этим вопросом не занимаюсь, отпишусь на след. неделе.
Go to the top of the page
 
+Quote Post
Veg@
сообщение Feb 28 2010, 20:35
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 16-09-09
Пользователь №: 52 416



Цитата
На самом деле топикстартер ничего не показал, а только сказал, что цикл for() крутится довольно медленно (как ему кажется).
Почему кажется? Замеры производились с помощью Perfomance Counter; что в нем может быть неоднозначного?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 04:05
Рейтинг@Mail.ru


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