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

 
 
> Cyclone V SoC : как увеличить скорость передачи Ethernet и снизить загрузку процессора?
Juzujka
сообщение Dec 22 2015, 09:07
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 3-04-09
Из: Москва, Киров
Пользователь №: 47 125



Имеется development kit, на котором единственный Ethernet приделан к HPS.
Мне нужна скорость > 20 МБ/с при низкой загрузке процессора, < 10 %.

Тестировал я с помощью программы вроде этой:

Код
for(i1 = 0; i1 < i2; i1++)
{
    sent_size += sendto(sock, buf_frame, packet_size, 0,
        (struct sockaddr *) &echoclient,
        sizeof(echoclient));
    //usleep(sleep_us); /// commented to test max rate, uncommented to reduce CPU load
}


При размере пакета packet_size = 8192 я получил 86,2 МБ/с, 100 % загрузка процессора.
Чтобы эмулировать снижение нагрузки я расскомментировал usleep(sleep_us).
При sleep_us = 450, packet_size=8192 получил 13.56 MB/s , 17 % загрузки процессора.
14 МБ/с - мало, 17 % - много.
Есть ли пути увеличить скорость Ethernet и уменьшить загрузку процессора на Cyclone V HPS ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
johan
сообщение Dec 23 2015, 11:29
Сообщение #2


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

Группа: Свой
Сообщений: 78
Регистрация: 3-09-12
Пользователь №: 73 371



Вы используете TCP или UDP?
Вы хотите использовать большие (jumbo) фреймы для передачи (packet_size = 8192)?


--------------------
Go to the top of the page
 
+Quote Post
Nitrex
сообщение Dec 23 2015, 20:27
Сообщение #3





Группа: Участник
Сообщений: 11
Регистрация: 8-06-15
Пользователь №: 87 078



Цитата(johan @ Dec 23 2015, 14:29) *
Вы используете TCP или UDP?
Вы хотите использовать большие (jumbo) фреймы для передачи (packet_size = 8192)?


А есть разница в скорости при использовании UDP или TCP?
Go to the top of the page
 
+Quote Post
johan
сообщение Dec 24 2015, 08:17
Сообщение #4


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

Группа: Свой
Сообщений: 78
Регистрация: 3-09-12
Пользователь №: 73 371



Цитата(Nitrex @ Dec 23 2015, 23:27) *
А есть разница в скорости при использовании UDP или TCP?

Ну, смотрите:
TCP гарантирует доставку и ждет ответов от получателя, следовательно пока не отреагировала та сторона некоторое время мы будем простаивать и ждать ответа. Так же необходимо следить за состоянием сессии и т.д.
TCP заголовок 16 байт (если без опций смотреть), а UDP заголовок - 8. Следовательно при одной и той же длине пакета с UDP можно передать на 8 байт больше с каждым пакетом.
Для TCP обязательно рассчитывать контрольную сумму (а она считается в том числе и по данным), для UDP контрольную сумму можно не рассчитывать и заполнить нулями (т.е. снизить нагрузку на процессор дополнительными расчетами, однако все эти расчеты может делать сетевая карточка/встроенное MAC-ядро в HPS, если это поддерживается и настраивается).

Так, в случае UDP можно заранее подготовить весь заголовок (если известно куда отправляются данные и получатель не меняется), и только подставлять данные (просто склеивая) и отправлять целый пакет (с Ethernet/IP/UDP заголовками) через RAW сокет.

Разница между TCP и UDP есть. Не думаю, что на HPS UDP НАМНОГО будет быстрее, чем TCP, он немного проще, вот и всё.

Если использовать Jumbo фреймы, то можно немного снизить нагрузку (будет меньше прерываний и пакетов в принципе).
В доке Cyclone V Hard Processor System Technical Reference Manual в разделе про EMAC написано:

Цитата
Programmable frame length supporting standard and jumbo Ethernet frames (with size up to 3800 bytes)


Насколько это работает в этом MAC-ядре я не знаю - не пробовал.

Если данные, которые вы передаетё хорошо сжимаются, то можно попробовать сжимать, а потом передавать sm.gif


--------------------
Go to the top of the page
 
+Quote Post



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

 


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


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