Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ethernet: насколько распространена поддержка Flow control?
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Fast Ethernet/Gigabit Ethernet/FibreChannel
Koluchiy
Здравствуйте, уважаемые гуру.

Делаю девайс, который, если в общих чертах, принимает пакеты Ethernet, кладет их в FIFO, вынимает из FIFO и без изменения кидает дальше.

Возможна проблема - переполнение FIFO из-за разницы частот входящего и выходящего трафика, различных значений IPG и прочих факторов.

Один из путей решения проблемы - использование механизма Flow Control - а именно, слать передающему девайсу Pause фреймы в случае, если FIFO почти заполнилось.

Собственно, вопрос: а насколько распространена поддержка этого механизма в оборудовании различных производителей?
Прежде всего интересуют различные свичи и прочее "магистральное" оборудование.

Насколько велика вероятность того, что посланный Pause фрейм найдет понимание в оборудовании, сопряженном с моим.

Заранее спасибо за ответы.
vitan
В больших свитчах даже есть отдельные интерфейсы для управления потоком со стороны, не говоря уж о поддержке встроенного. Так что все там в порядке.
d1n1s
Наличи режима Flow Control, на сколько я помню можно оценить в режиме "автопереговоров". И кстаи он создовался именно для ограничения скоростип риёма данных от комутаторов в режиме Full duplex и поддерживается соответсвенно всеми комутаторами. А вот наличие его в конечных устройствах, потребителях данных весьма редко встречается, разработчики редко заморачиваются на счёт этого.
AndreiUS
Цитата
Наличи режима Flow Control, на сколько я помню можно оценить в режиме "автопереговоров".

Совершенно верно. Во время автопереговоров трансиверы портов уточняют возможность друг друга управлять потоком с помощью пакета-паузы. Далее результат можно прочесть в соответствующих регистрах PHY.

Теперь и у меня возник вопрос - допустим имеются две машины (A и Б), соединенные через свитч. На свитч от машины A приходит пакет-пауза, как тогда должен поступить свитч - пробросить этот пакет-паузу до машины Б, или же приостановить трафик от машины Б (просто отбрасывать пакеты) ???
Aprox
Цитата(AndreiUS @ Dec 26 2011, 17:07) *
должен поступить свитч - пробросить этот пакет-паузу до машины Б, или же приостановить трафик от машины Б (просто отбрасывать пакеты) ???

Зависит от MAC-адреса назначения в пауз-пакете. Им можно тормознуть все девайсы, подключенные к свитчу, а можно указать конкретный девайс для притормаживания.
Rst7
QUOTE
Теперь и у меня возник вопрос - допустим имеются две машины (A и Б), соединенные через свитч. На свитч от машины A приходит пакет-пауза, как тогда должен поступить свитч - пробросить этот пакет-паузу до машины Б, или же приостановить трафик от машины Б (просто отбрасывать пакеты) ???


Т.к. в любом свиче есть буфер, то алгоритм должен быть следующий.

Со стороны свич<->B:
При приеме пакета определить, куда он направляется. Допустим, в А. Если буфер передачи свич->A у свича близок к заполнению, то передать в B пакет PAUSE. По освобождению буфера передать пакет PAUSE с нулевым таймером (разрешить передачу B->свич). Если место в буфере есть - положить туда пакет.

Со стороны свич<->A:
Если A прислал пакет PAUSE, прекратить передачу из буфера (а если состояния PAUSE нет, то передавать что есть в буфере). По окончанию таймера PAUSE (или по приему пакета PAUSE(0)) возобновить передачу из буфера в A.

Естественно, алгоритм одинаков на всех портах.

Все.

А MAC-адрес в пакете PAUSE не используется - ибо соединение у 100/1000/1G/10G - точка-точка.
AndreiUS
Спасибо, теперь разобралсяsm.gif
Aprox
Цитата(Rst7 @ Dec 27 2011, 16:51) *
А MAC-адрес в пакете PAUSE не используется - ибо соединение у 100/1000/1G/10G - точка-точка.

Странно. Я вот читаю описание PAUSE пакета и вижу, что MAC адреса, и Dst, и Src, очень даже используются. Причем, Dst может указывать на конкретный хост в сети, который надо тормозить. Также Dst может быть равным 01-80-С2-00-00-01, что означает- тормозить все устройства в сегменте сети. В этой связи выглядит неубедительным ваше описание работы свитча. По-моему, ему нет никакой нужды реализовать какой-либо Flow-Control внтури себя, достаточно тупо пересылать PAUSE пакеты по назначению хостам. Или я что-то неправильно понял?
VslavX
Цитата(Aprox @ Jan 7 2012, 10:05) *
Причем, Dst может указывать на конкретный хост в сети, который надо тормозить.

Тормозить хосты в других сегментах (под сегментом я понимаю в данный момент соединение точка-точка между MAC-контроллерами - грубо говоря один прямой или кросс-кабель) нет никакого смысла - удаленный хост вполне себе может меняться с другими хостами, а не только с тем на котором затык и который высылает PAUSE. Также на маршруте может быть буферизация (например, в свичах) - тогда блокировка выглядит вообще вредной - не дает нормально пользоваться буферизацией. Поэтому пакет PAUSE именно имеет фиксированное значение dst адреса, и предназначен для приостановки передачи именно в непосредственно подсоединенном полнодуплексном сегменте (для полудуплекса там другие методы типа back pressure используются)

Цитата(Aprox @ Jan 7 2012, 10:05) *
тупо пересылать PAUSE пакеты по назначению хостам. Или я что-то неправильно понял?

ЕМНИП, никуда PAUSE свичами не пересылается - а просто употребляется по назначению на принявшем его порту - только этот конкретный порт временно приостанавливает передачу. Другие порты банально могут быть полудуплексными - пакет PAUSE там просто не будет иметь смысла.

Вот выдержка из википедии (стандарты лень копать - они там неохватные):
Цитата(Wiki)
Pause frame

The overwhelmed network element can send a PAUSE frame, which halts the transmission of the sender for a specified period of time. Media Access Control (MAC) frames to carry the PAUSE commands using Control opcode 0x0001 (hexadecimal). Only stations configured for full-duplex operation may send PAUSE frames. When a station wishes to pause the other end of a link, it sends a MAC Control frame to the 48-bit destination reserved multicast address of 01-80-C2-00-00-01. The use of a well-known address makes it unnecessary for a station to discover and store the address of the station at the other end of the link.

Another advantage of using this multicast address arises from the use of flow control between network switches. The particular multicast address used is selected from a range of address which have been reserved by the IEEE 802.1D standard which specifies the operation of switches used for bridging. Normally, a frame with a multicast destination sent to a switch will be forwarded out all other ports of the switch. However, this range of multicast address is special and will not be forwarded by an 802.1D-compliant switch. Instead, frames sent to this range are understood to be frames meant to be acted upon only within the switch.

Вывод - адрес хоть и малтикастовый, но из зарезервированного диапазона, и если свич "правильный", то никуда PAUSE дальше не пойдет.
Rst7
QUOTE
Я вот читаю описание PAUSE пакета и вижу, что MAC адреса, и Dst, и Src, очень даже используются. Причем, Dst может указывать на конкретный хост в сети, который надо тормозить.


Простите, где Вы такое читаете? DST там всегда равен служебному адресу, что и определяет, что пакет есть PAUSE.
Aprox
Цитата(Rst7 @ Jan 7 2012, 13:20) *
Простите, где Вы такое читаете? DST там всегда равен служебному адресу, что и определяет, что пакет есть PAUSE.

Чтаю здесь. Вот выдержка оттуда:
Цитата
The destination address of the frame may be set to either the unique DA of the station to be paused, or to the globally assigned multicast address 01-80-C2-00-00-01 (hex). This multicast address has been reserved by the IEEE 802.3 standard for use in MAC Control PAUSE frames. It is also reserved in the IEEE 802.1D bridging standard as an address that will not be forward by bridges. This ensures the frame will not propagate beyond the local link segment.

Кроме того, не согласен, что dst_адресс =01-80-C2-00-00-01 определяет PAUSE пакет. Вот, что определяет (взято оттуда же):
Цитата
The "Type" field of the PAUSE frame is set to 88-08 (hex) to indicate the frame is a MAC Control frame.
The MAC Control opcode field is set to 00-01 (hex) to indicate the type of MAC Control frame being used is a PAUSE frame.




Цитата(VslavX @ Jan 7 2012, 12:19) *
Тормозить хосты в других сегментах (под сегментом я понимаю в данный момент соединение точка-точка между MAC-контроллерами - грубо говоря один прямой или кросс-кабель) нет никакого смысла - удаленный хост вполне себе может меняться с другими хостами, а не только с тем на котором затык и который высылает PAUSE. Также на маршруте может быть буферизация (например, в свичах) - тогда блокировка выглядит вообще вредной - не дает нормально пользоваться буферизацией. Поэтому пакет PAUSE именно имеет фиксированное значение dst адреса, и предназначен для приостановки передачи именно в непосредственно подсоединенном полнодуплексном сегменте (для полудуплекса там другие методы типа back pressure используются)

Я говорю не о p2p, а о некоторой локальной сети из хостов, обьединенных через свитч(и)- наиболее типичный случай для небольших фирм и офисов. Здесь
текущая конфигурация хостов без проблем отслеживается в таблице MAC адресов свитча. Блокировку порта свитча через пауз- пакет считаю неправильной и нереальной, т.к. хост-источник потока данных ничего не будет занать о такой блокировке и продолжит накачивать буфер свитча, пока тот не переполнится. Поэтому, единственно возможный вариант выровнять скорости приема-передачи- это Flow-Control непосредственно на источнике данных. Вывод- свитч должен тупо пересылать PAUSE пакеты по назначению. И никакой самодеятельности.
Цитата
Вывод - адрес хоть и малтикастовый, но из зарезервированного диапазона, и если свич "правильный", то никуда PAUSE дальше не пойдет.

Каким поставить dst_адрес в PAUSE пакете- это дело хоста-приемника данных. Если он в состоянии определить MAC-адрес источника, который на него навалися, то ставим именно его адрес в поле назначения. Если же не можем определить откуда навал- ставим универсальный мультикастовый. В последнем случае будут заторможены все хосты данной локальной сети, поскольку свитч разошлет паузу им всем.
Rst7
QUOTE
Чтаю здесь.


Чтото не то Вы читаете. Надо бы курить непосредственно IEEE802.3, благо они открыто доступны.
Aprox
Цитата(Rst7 @ Jan 8 2012, 12:10) *
Чтото не то Вы читаете. Надо бы курить непосредственно IEEE802.3, благо они открыто доступны.

Странный совет. Я представил именно смысловую выжимку из стандарта IEEE802.3.
VslavX
Цитата(Aprox @ Jan 8 2012, 10:41) *
Читаю здесь.

ИМХО, там какое-то народное творчество. "Не читайте до обеда советских газет" ©. Смотрим IEEE Std 802.3™-2008, Section 2, Annex 31B, называется MAC Control PAUSE operation (специально не поленился скачать редакцию 2008 года, до этого ковырялся в 2002):

Цитата
31B.1 PAUSE description
The PAUSE operation is used to inhibit transmission of data frames for a specified period of time. A MAC Control client wishing to inhibit transmission of data frames from another station on the network generates a MA_CONTROL.request primitive specifying:
a) The globally assigned 48-bit multicast address 01-80-C2-00-00-01,
b) The PAUSE opcode,
c) A request_operand indicating the length of time for which it wishes to inhibit data frame transmission.
(See 31B.2.)

The PAUSE operation cannot be used to inhibit transmission of MAC Control frames. PAUSE frames shall only be sent by DTEs configured to the full duplex mode of operation. The globally assigned 48-bit multicast address 01-80-C2-00-00-01 has been reserved for use in MAC Control PAUSE frames for inhibiting transmission of data frames from a DTE in a full duplex mode IEEE 802.3 LAN. IEEE 802.1D-conformant bridges will not forward frames sent to this multicast destination address, regardless of the state of the bridge’s ports, or whether or not the bridge implements the MAC Control sublayer. To allow generic full duplex flow control, stations implementing the PAUSE operation shall instruct the MAC (e.g., through layer management) to enable reception of frames with destination address equal to
this multicast address.


Цитата( @ Jan 8 2012, 10:41) *
Я говорю не о p2p, а о некоторой локальной сети из хостов, обьединенных через свитч(и)- наиболее типичный случай для

В случае если используется BASE-TX, то сеть на L2 именно и состоит из набора P2P.

Цитата(Aprox @ Jan 8 2012, 10:41) *
хост-источник потока данных ничего не будет занать о такой блокировке и продолжит накачивать буфер свитча

"И это хорошо!" ©. А зачем хосту-источнику знать о блокировке приема хоста приемника, если источник как раз может чудно слать данные в буфер свича? Есть возможность - данные из хоста отправляем, ничего не ждем, а оборудование на маршруте само разберется. Я вот чудный гигабитный свичик SLM2008 прикупил - никак не могу определить сколько у него памяти на борту - по разным источникам от 4 до 32 Мегабайт. "Это жжжж - наспроста" © - имхо, Циско что-то знает, раз столько памяти в свич ставит.

Цитата(Aprox @ Jan 8 2012, 10:41) *
пока тот не переполнится. Поэтому, единственно возможный вариант выровнять скорости приема-передачи- это Flow-Control
непосредственно на источнике данных.

Такое было бы единственно возможным вариантом, если бы у нас был тупой провод между источником и приемником, а когда у нас посередине умное оборудование с приличным буфером, то глупо им не пользоваться.

Цитата(Aprox @ Jan 8 2012, 10:41) *
Вывод- свитч должен тупо пересылать PAUSE пакеты по назначению. И никакой самодеятельности.


Нет, не так - по стандарту PAUSE тут же в свиче и умирает:
Цитата(802.3 Section 2 Annex 31B)
The globally assigned 48-bit multicast address 01-80-C2-00-00-01 has been reserved for use in MAC Control
PAUSE frames for inhibiting transmission of data frames from a DTE in a full duplex mode IEEE 802.3
LAN. IEEE 802.1D-conformant bridges will not forward frames sent to this multicast destination address,


Upd: редакция стандарта 2002 говорит тоже самое. Возможно еще более старые стандарты допускали отправку индивидуального DA, но на сегодня это не так.

Upd2: просмотрел Ethernet MAC контроллеры для которых писал код (SAM7X, LPC17/23, MPC83xx, STM32F2xx) нигде не нашел в регистрах как задавать DA - везде PAUSE фреймы генерируются автоматически, с фиксированным в стандарте малтикастом. На прием аналогично - проверяется именно малтикаст. Так что - на упомянутых контроллерах фрейм PAUSE с уникальным DA это типа "закат солнца вручную" - только искусственно сформировать и отослать как обычный пакет.


Цитата(Aprox @ Jan 8 2012, 10:41) *
В последнем случае будут заторможены все хосты данной локальной сети, поскольку свитч разошлет паузу им всем.

Это вообще шедевр. У меня такой свич на следующий день на помойке был бы. Типа домашние смотрят с NAS-а по DLNA фильм, а я в той же домашней сетке устройство на микроконтроллере отлаживаю, как там затык - расступись море получите фриз вместо фильма?
Rst7
QUOTE
Upd: редакция стандарта 2002 говорит тоже самое. Возможно еще более старые стандарты допускали отправку индивидуального DA, но на сегодня это не так.


И не было никогда. Так что господину Aprox'у настоятельно рекомендую таки курить IEEE802.3, а не что попало в этих интернетах.
Aprox
Цитата(VslavX @ Jan 8 2012, 21:43) *
В случае если используется BASE-TX, то сеть на L2 именно и состоит из набора P2P.

Не совсем так. В одноранговых сетях peer-to-peer каждый хост должент выполнять административные функции и отслеживать общую конфигурацию сети. Например средства MS-сети, встроенные в Windows, так называемые "подключения". В принципе, пользоваться услугами такой сети, где все равны в правах, неправильно из соображений элементарной безопасности. В более-менее серьезных организациях не используется. Поэтому вы ошибаетесь насчет повсеместного p2p.
Цитата
"И это хорошо!" ©. А зачем хосту-источнику знать о блокировке приема хоста приемника, если источник как раз может чудно слать данные в буфер свича? Есть возможность - данные из хоста отправляем, ничего не ждем, а оборудование на маршруте само разберется. Я вот чудный гигабитный свичик SLM2008 прикупил - никак не могу определить сколько у него памяти на борту - по разным источникам от 4 до 32 Мегабайт. "Это жжжж - наспроста" © - имхо, Циско что-то знает, раз столько памяти в свич ставит.

Вы снова ошибаетесь. Вот типичный пример. Есть некий источник данных, который может формировать UDP пакеты и отправлять их по гигабитному Ethernet каналу в сеть со скоростью примерно 800 mbps. В этой сети, имеется приемник этих UDP-пакетов, который может принимать и обрабатывать поток данных не быстрее, например 400 mbps. Хосты соединены через гигабитный свитч. Теперь прикиньте, за какое время переполнится 32 Мегабайт буфер вашего хваленого свитча, если торомозить порт свитча и не торомозить непосредственно источник данных? Правильный ответ- за 1 минуту.
Цитата
Нет, не так - по стандарту PAUSE тут же в свиче и умирает:

Ничего личного, но криво читаете стандарты. Там говорится, что PAUSE умирает в bridge, но не в switch. Это сильно разные вещи. и для разных целей. Еще предлагаю подумать- откуда в свитчах на портах вдруг взялся MAC? Его там нет по определению. А раз нет, то и управления на уровне MAC устройства- тоже нет. Свитч воспринимает все входящие пакеты одинаково, включая пакеты FlowControl.
Цитата
Upd2: просмотрел Ethernet MAC контроллеры для которых писал код (SAM7X, LPC17/23, MPC83xx, STM32F2xx) нигде не нашел в регистрах как задавать DA - везде PAUSE фреймы генерируются автоматически, с фиксированным в стандарте малтикастом. На прием аналогично - проверяется именно малтикаст. Так что - на упомянутых контроллерах фрейм PAUSE с уникальным DA это типа "закат солнца вручную" - только искусственно сформировать и отослать как обычный пакет.

Я занимаюсь отправкой UDP-пакетов в гигабитный Ethernet используя в качестве контроллера FPGA. Скорости формирования и отправки данных примерно такие, как я представил в живом примере выше. Эта задача решена только за счет того, что в PAUSE пакте проставляется конкретный MAC-адрес источника данных. И представьте, этот пакет прекрасно проходит через свитч и достигает именно источника!


vitan
Цитата(Aprox @ Jan 9 2012, 13:00) *
Еще предлагаю подумать- откуда в свитчах на портах вдруг взялся MAC? Его там нет по определению.

Читал-читал, но на этом перле уж не сдержался. lol.gif
Уважаемый! Вы хоть немного теории почитайте для начала, ну нельзя же так, только по своим представлениям о мире судить. Эдак можно и до земли на трех китах дойти!
VslavX
Цитата(Aprox @ Jan 9 2012, 11:00) *
Не совсем так. В одноранговых сетях peer-to-peer каждый хост должент выполнять административные функции и отслеживать общую конфигурацию сети. Например средства MS-сети, встроенные в Windows, так называемые "подключения".

Мда, "смешались в кучу люди, кони" (с).
Есть такая вещь - OSI - Open Systems Interconnection. Она описывает уровни сетевого взаимодействия, классической считается 7-уровневая модель. Так вот, обсуждаемый в данном топике Flow Control относится к уровню L2 (канальный, Data Link Layer). А все что Вы написали - администрирование, конфигурирование и прочее - как минимум парой-тройкой уровней модели выше и к топику имеет очень и очень слабое отношение.
Цитата(Aprox @ Jan 9 2012, 11:00) *
Поэтому вы ошибаетесь насчет повсеместного p2p.

Повторюсь - p2p на канальном уровне (L2). Если используется Ethernet на витых парах, то порт каждого хоста на канальном уровне общается непосредственно с портом другого хоста или свича. И каждое такое соединение на канальном уровне - точка-точка, отдельный сетевой физический сегмент.

Цитата(Aprox @ Jan 9 2012, 11:00) *
Вы снова ошибаетесь. Вот типичный пример. Есть некий источник данных, который может формировать UDP пакеты и отправлять их по гигабитному Ethernet каналу в сеть со скоростью примерно 800 mbps.

ИМХО, это не типичный пример, а сложности FPGA-шников при реализации нормального надежного транспортного протокола типа TCP.

Цитата(Aprox @ Jan 9 2012, 11:00) *
В этой сети, имеется приемник этих UDP-пакетов, который может принимать и обрабатывать поток данных не быстрее, например 400 mbps. Хосты соединены через гигабитный свитч. Теперь прикиньте, за какое время переполнится 32 Мегабайт буфер вашего хваленого свитча, если торомозить порт свитча и не торомозить непосредственно источник данных? Правильный ответ- за 1 минуту.

Оставляя в стороне типичность примера и соответствие выбранной топологии задаче, а кто Вам сказал что источник не будет тормозиться? Тормозится он будет - но не конечным приемником, а по переполнению буфера в свиче. То есть - когда буфер в свиче (а не в приемнике данных) начинает переполняться - свич сам выдаст источнику PAUSE.

Цитата(Aprox @ Jan 9 2012, 11:00) *
Ничего личного, но криво читаете стандарты. Там говорится, что PAUSE умирает в bridge, но не в switch. Это сильно разные вещи.

Нет, вот именно ethernet switch на витых парах и является bridge - поскольку он соединяет физически отдельные сетевые сегменты на уровне L2. То что эти сегменты используют физику одного стандарта (а не разных) не имеет ровно никакого значения - все равно это bridge.

Цитата(Aprox @ Jan 9 2012, 11:00) *
Я занимаюсь отправкой UDP-пакетов в гигабитный Ethernet используя в качестве контроллера FPGA. Скорости формирования и отправки данных примерно такие, как я представил в живом примере выше. Эта задача решена только за счет того, что в PAUSE пакте проставляется конкретный MAC-адрес источника данных. И представьте, этот пакет прекрасно проходит через свитч и достигает именно источника!

Он проходит и достигает, поскольку Вы нарушили стандарт и засунули в пакет не требуемое фиксированное малтикастовое значение DA, а индивидуальное. А ведь вполне может попасться такой свич который еще и на управляющее поле пакета смотреть будет - от тогда PAUSE может и не дойти. И Вы хотите сказать, что если указать фиксированный DA в PAUSE, то возникают проблемы? ИМХО, тогда это не очень хорошее оборудование (свич).

Итого, для меня результаты дискуссии такие:

1. Стандарт четко описывает чего в PAUSE посылается, и как PAUSE на уровне L2 коммутируется.
2. Распространенные микроконтроллеры не имеют средств задания индивидуального DA в отсылаемом PAUSE и не понимают индивидуальный DA в принимаемом PAUSE.
3. Просто здравый смысл (пример с NAS, DLNA-телевизором и тестовым девайсом)

Дальше, в-общем-то, обсуждать нечего.

Когда я реализовывал свой сетевой стек, вопрос Flow Control на уровне L2 обдумывал тщательно, в итоге его не использую вообще. Все функции FC возложены на транспортный уровень - в моем случае TCP. Правильный выбор размера окна решает(_в общем случае_, а не только при использовании ethernet) проблему переполнения и прекрасно масштабируется, например HTTP-сервер на 8 сокетов, живет на 4К буферной памяти с окнами по 512 байт на LPC23, а искази-таргет выжимает по TCP 70Мбайт/сек с мегабайтным окном на MPC8347.

У Вас в FPGA нет TCP (по крайней мере такого же быстрого как аппаратный UDP), отсюда и желание использовать Flow Control на нижних уровнях сетевой модели. Я думаю, если сделаете по стандарту (фиксируете DA в PAUSE) и возьмете нормальный свич, то ситуация хуже не станет.
Aprox
Цитата(VslavX @ Jan 9 2012, 13:11) *
Дальше уже, в-общем-то, обсуждать нечего.

Вы правы. У нас сильно разные практические задачи. Найти общий язык и доказать что-либо вряд-ли получится.
Цитата
У Вас в FPGA нет TCP (по крайней мере такого же быстрого как аппаратный UDP), отсюда и желание использовать Flow Control на нижних уровнях. Я думаю, если сделаете по стандарту (фиксируете DA в PAUSE) и возьмете нормальный свич, то ситуация хуже не станет.

Даже пробовать, и потом плясать с бубном вокруг зависшей системы,- я не стану. У меня прекрасно работает, как я написал- с DA, равным MAC адресу источника данных. И обычная сетевая карта с включенной опцией FlowControl в хосте-источнике прекрасно понимает PAUSE-пакеты, которые пришли к ней через свитч. Несмотря на то, что адрес назначения стоит не мультикастовый. Узнает по значению поля FrameType и коду операции FlowControl.

Честно говоря, я не понимаю о чем мы спорим. Я представил Вам живой работающий пример высокоскоростной передачи данных ( до 860 mbps). Все работает на jumbo-пакетах в протоколе UDP с притормаживанием на MAC уровне. В любимом вами TCP такой поизводительности достичь невозможно, Да и проблема FlowControl в TCP вообще не актуальна. TCP было отвергнуто с самого начала. А FPGA было выбрано потому, что софтовый стек на микроконтроллере не обеспечивает требуемую производительность на гигабитном канале Ethernet. Не о чем спорить.
Костян
QUOTE (Aprox @ Jan 9 2012, 07:00) *
Я занимаюсь отправкой UDP-пакетов в гигабитный Ethernet используя в качестве контроллера FPGA. Скорости формирования и отправки данных примерно такие, как я представил в живом примере выше. Эта задача решена только за счет того, что в PAUSE пакте проставляется конкретный MAC-адрес источника данных.

У меня к Вам практический вопрос. Нужно ли PHY конфигурировать на enable pause ?
VslavX
Цитата(Костян @ Jan 9 2012, 18:43) *
У меня к Вам практический вопрос. Нужно ли PHY конфигурировать на enable pause ?

ИМХО, конфигурировать PHY нужно в той части, в которой оно сообщает своему Link Partner о поддержке Flow Control. Я понимаю это так, что самому PHY принимаемые-передаваемые фреймы PAUSE безразличны и в самом PHY ни на что не влияют. Но при установлении линка два PHY между собой проводят negotiations - меняются между собой специальными фреймами (которые на MAC не транслируются), и вот там передается информация о поддержке Flow Control MAC-ом каждой стороны. Поскольку PHY о возможностях имеющегося на его стороне MAC ничего не знает, то обычно внутри PHY имеется регистр, куда софт до разрешения линка и проведения negotiations записывает информацию о том как имеющийся в наличии MAC и его драйвер будут поддерживать PAUSE. Потом линк разрешается, PHY проводят между собой negotiations и софт на удаленном хосте может прочитать из своего PHY результаты "переговоров" и узнать, будет ли наш MAC передавать и принимать PAUSE-фреймы.

Aprox
Цитата(Костян @ Jan 9 2012, 19:43) *
У меня к Вам практический вопрос. Нужно ли PHY конфигурировать на enable pause ?

Признаться, специально такой конфигурацией PHY не занимался. Использую PHY autonegotiation, которая происходит автоматически при вкл.питания. По его окончании всегда можно прочесть в регистрах PHY, на что способно данное подключение. У PHY-источника при autonegotiation по-моему всегда установлено enable flow control по умолчанию. Эту опцию можно изменить потом программно на disable. Но тогда, вслед за этим, придется также программно запускать и autonegotiation, чтобы дать знать приемнику на другой стороне канала связи- мол, не шли мне пауз-пакеты, я их все равно не понимаю.

Сами же пауз-пакеты формирует MAC. PHY же только их отправляет, ему до лампочки.
VslavX
Цитата(Aprox @ Jan 10 2012, 09:21) *
У PHY-источника при autonegotiation по-моему всегда установлено enable flow control по умолчанию.

Нет, надо смотреть даташит на конкретный PHY чип. Например, MV88E1111 конфигурируется внешними ножками, что именно декларировать при negotiation. А у KSZ8031 - по дефолту после сброса стоит "No PAUSE".

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.