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

 
 
> Оптимизация 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
 
Start new topic
Ответов
Veg@
сообщение Mar 4 2010, 18:47
Сообщение #2


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

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



Цитата(sergeeff @ Mar 1 2010, 02:22) *
Вы запустите какой-нибудь обмен по UDP с компьютером в реальной сети и, скорее всего, убедитесь, что вы не над тем голову себе ломаете.
Именно так я и измеряю скорость передачи данных в канале.

Цитата(vadimuzzz @ Feb 28 2010, 06:00) *
так что там с побайтным копированием?
Действительно, копирование производилось побайтно из-за отсутствия выравнивания по "long" границе. Выравнивание дало ощутимое прибавление производительности: время копирования 1400Б сократилось с 0.14мс до 0.04мс (cpu: 85МГц).
Итого: пропускная способность канала возросла с 38Мбит/с до 56Мбит/с.

Для тех, кому интересно, прикрепляю реализацию функции memcpy().

Сообщение отредактировал Veg@ - Mar 4 2010, 18:51
Прикрепленные файлы
Прикрепленный файл  memcpy.c.txt ( 2.74 килобайт ) Кол-во скачиваний: 174
 
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Veg@   Оптимизация LwIP   Feb 26 2010, 19:24
- - sergeeff   Почитайте здесь : http://old.nabble.com/Tunning-TC...   Feb 26 2010, 22:43
- - Veg@   Цитата(sergeeff @ Feb 27 2010, 01:43) Поч...   Feb 27 2010, 09:57
- - sergeeff   А что не понятно? Если ваш UDP пакет уходит за две...   Feb 27 2010, 10:26
- - Veg@   Цитата(sergeeff @ Feb 27 2010, 13:26) А ч...   Feb 27 2010, 12:14
|- - sergeeff   Цитата(Veg@ @ Feb 27 2010, 15:14) Размер ...   Feb 27 2010, 12:52
- - Veg@   Функция memcpy выполняется довольно медленно, поэт...   Feb 27 2010, 15:50
- - vadimuzzz   код memcpy доступен, идет в стандартной поставке. ...   Feb 27 2010, 17:31
- - Veg@   Цитатаесли все равно медленно - тогда DMA Т.е. с D...   Feb 27 2010, 19:22
|- - dspx   Цитата(Veg@ @ Feb 27 2010, 22:22) Т.е. с ...   Feb 27 2010, 19:48
|- - vadimuzzz   Цитата(Veg@ @ Feb 28 2010, 01:22) Т.е. с ...   Feb 28 2010, 03:00
|- - sergeeff   Цитата(vadimuzzz @ Feb 28 2010, 06:00) ус...   Feb 28 2010, 10:08
- - sergeeff   А что автор так уперся в оптимизацию цикла for(......   Feb 27 2010, 23:55
- - Veg@   Цитата(sergeeff @ Feb 28 2010, 02:55) А ч...   Feb 28 2010, 10:21
- - Veg@   ЦитатаНа самом деле топикстартер ничего не показал...   Feb 28 2010, 20:35
- - sergeeff   Вы запустите какой-нибудь обмен по UDP с компьютер...   Feb 28 2010, 23:22


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

 


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


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