Juzujka 0 22 декабря, 2015 Опубликовано 22 декабря, 2015 · Жалоба Имеется 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 ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
johan 0 23 декабря, 2015 Опубликовано 23 декабря, 2015 · Жалоба Вы используете TCP или UDP? Вы хотите использовать большие (jumbo) фреймы для передачи (packet_size = 8192)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 23 декабря, 2015 Опубликовано 23 декабря, 2015 · Жалоба Есть ли пути увеличить скорость Ethernet и уменьшить загрузку процессора на Cyclone V HPS ? Думаю можно, только надо отказаться от использования стандартных функций и копать в сторону DMA. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
web-nitrex 0 23 декабря, 2015 Опубликовано 23 декабря, 2015 · Жалоба Вы используете TCP или UDP? Вы хотите использовать большие (jumbo) фреймы для передачи (packet_size = 8192)? А есть разница в скорости при использовании UDP или TCP? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
johan 0 24 декабря, 2015 Опубликовано 24 декабря, 2015 · Жалоба А есть разница в скорости при использовании 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-ядре я не знаю - не пробовал. Если данные, которые вы передаетё хорошо сжимаются, то можно попробовать сжимать, а потом передавать :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Juzujka 0 24 декабря, 2015 Опубликовано 24 декабря, 2015 (изменено) · Жалоба Я использую UDP. Хотелось бы вписаться в стандартные MTU=1500. В SoC имеется Gigabit Ethernet, а тут получаются какие-то десятки-сотни Мбод при значительной загрузке процессора. Хотелось бы использовать это более эффективно. Изменено 24 декабря, 2015 пользователем Juzujka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dimidrol 0 24 декабря, 2015 Опубликовано 24 декабря, 2015 · Жалоба У вас процессор сам занимается пересылкой данных? Может поручить это DMA? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Juzujka 0 25 декабря, 2015 Опубликовано 25 декабря, 2015 · Жалоба Тот тест запускал в Linux, пользуясь стандартными средствами. Ожидал, что ОС воспользуется DMA для выполнения sendto(), но теперь мне не понятно, то-ли много накладных расходов на пересылку по DMA, то-ли ОС не использует DMA. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Koluchiy 0 21 января, 2016 Опубликовано 21 января, 2016 · Жалоба Хотите скорость - отказывайтесь от пересылки данных через Qsys, неважно через процессор или через DMA (dj 2v случае все равно процессор все инициализирует, а еще и чексумы считает). Подумайте на тему формирования UDP в логике с перезапросом потерянных пакетов через собственный протокол верхнего уровня. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться