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

 
 
> Ограничение скорости Ethernet канала, Flow Control
DuHast
сообщение Apr 12 2009, 08:24
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 314
Регистрация: 13-07-06
Из: Москва
Пользователь №: 18 797



Схема устройства в первом приближении такая RJ-45 -> PHY -> FPGA -> PHY-> RJ-45. К разъёмам RJ-45 могут подключаться любые сетевые устройства (компы, свитчи и т.д.). В FPGA MII интерфейсы двух PHY просто соединены друг с другом. Встала задача ограничивать скорость Ethernet потока через такое устройство с заданным шагом. Сначала рассуждал так: k интервалов времени пропускаю пакеты через FPGA, n не пропускаю, получаю скорость k/(n+k) от начальной. На практике получил такой результат: UDP поток ограничивается за счёт потери пакетов, TCP еле поднимается на очень низкой скорости, не зависимо от значений n и k. Теперь хочу попробовать Flow Control и использованием Pause фреймов. Вопросы следующие:

1 Подходит ли этот механизм для решения моей задачи (будем считать, что все подключаемые устройства его потдерживают);

2 Если да, то какой выставлять MAC-адрес в поле отправителя pause фрейма, ведь MAC уровень в моём устройстве не реализован и у его портов нет MAC адресов.

3 Какие ещё есть варианты для решения этой задачи.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rst7
сообщение Apr 12 2009, 11:53
Сообщение #2


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Начнем с последнего - варианты Вы сами перечислили - один из них - полисинг - Вы его и реализовали. Только немного неправильно - надо дропать пакеты только тогда, когда средняя скорость превышает заданную. Но результаты Вы сами видите. Правильное решение - это организовывать шейпер, т.е. плавное ограничение. Обычно оно выглядит так:

Код
приемник -> буфер FIFO -> передатчик


Из буфера FIFO пакеты передаются с таким расчетом, чтобы не превысить требуемую скорость передачи.

Приемнику при заполнении FIFO говорится о невозможности приема - например, посылкой pause-фрейма.

В поле отправителя pause-фрейма Вы можете поставить любой MAC. Однако, Вам надо обрабатывать pause-фреймы с обеих сторон - минимум - не пропускать их через себя.

Для простоты, кстати, можно перейти на Half-Duplex (с двух сторон) - там проще обрабатывать, не надо разбирать фреймы.

Кстати, а какое Вам ограничение по скорости нужно? Если устроит ряд
Код
128 кбит/с
256 кбит/с
512 кбит/с
1 Мбит/с
2 Мбит/с
4 Мбит/с
8 Мбит/с
нет ограничения

, то можно взять любой свич-мыльницу на RTL8316,8318,8324 и прошить в нем eeprom с ограничением из данного ряда на нужные порты. Дешевле Вы девайс не разработаете smile.gif


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
DuHast
сообщение Apr 12 2009, 19:00
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 314
Регистрация: 13-07-06
Из: Москва
Пользователь №: 18 797



Цитата(Rst7 @ Apr 12 2009, 15:53) *
Правильное решение - это организовывать шейпер, т.е. плавное ограничение. Обычно оно выглядит так:
приемник -> буфер FIFO -> передатчик
А какие требования к размеру FIFO?

Цитата(Rst7 @ Apr 12 2009, 15:53) *
Однако, Вам надо обрабатывать pause-фреймы с обеих сторон - минимум - не пропускать их через себя.
Спасибо, дельное замечание, об этом я как-то сразу не подумал.

Цитата(Rst7 @ Apr 12 2009, 15:53) *
Если устроит ряд...
К сожалению не устроит.
Go to the top of the page
 
+Quote Post



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

 


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


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