Цитата(xyzzy @ Jun 22 2007, 08:21)

Ну, коль уж 1Гбит захотелось, то это что-то в районе 1.4Мппс при 64-байтных пакетах.
В принципе, любой MAC и PHY соответствующий стандарту вполне способен и принять и отослать все на полной скорости.
Т.е. с точки зрения самого интерфейса практически любой удовлетворяет требованием и основная сложность в обеспечении нужной пропускной способности именно в обработке/генерации?
Цитата
Если ваши условия позволяют вам подготовить все данные для уходящих пакетов в памяти перед началом отсылания, то и проц особо мощный не понадобится. Подготовил данные и дескрипторы и сказал "поехали".
Думаю да. Вычисления для такого рода передач не сильно много: crc для ip пакета, для ethernet кадра, я так понимаю это будет делать MAC. Хэш по адресу, и поиск в таблице состояний по этому хэшу. Больше пока вычислений не вижу. Все остальное тупая передача дескрипторов.
Цитата
Если же вам надо все непрерывным потоком, да еще с меняющимися данными, то без FPGA тут, пожалуй, тяжко будет. Скажем, есть у нас 2ГГц проц. При 1Мппс у нас есть примерно 2000 циклов на прием и передачу одного пакета. Кажется - не так-то и мало. Но. Работать мы будем с большим количеством данных, которое в кэш точно не влазит, значит вероятность того, что процессору придется лезть в память довольно велика. Типичное время доступа к памяти - в районе 50-100нс. Существенная часть вашего бюджета уйдет на простой в ожидании памяти, но, в принципе, что-нибудь не сильно сложное сделать возможно. Если вам производительность при малых пакетах не критична, то в принципе, можно и нетривиальные вещи делать.
А вот здесь, если можно, поподробнее. Чем мне поможет fpga, если все равно нужно будет обращаться к памяти? Я так понимаю что скорость доступа к DDR ниже? Например ddr 333MHz 32 bit получаем что-то типа 1s/(333MHz*32bit)= 0.7 нс даже если попадется плохой кусок то задержка будет максимум 15 тактов. Т.е. получается на 2 порядка меньше ваших цифр? Хотя я не исключаю что у меня плохо с арифметикой в 4 часа ночи

. Хотя я изначально думал что без fpga вообще ничего не сделаешь при приеме/передачи + какой-нить обработки пакетов без того чтоб не задушить процессор прерываниями.
Цитата
Из вариантов MAC неплохо себя зарекомендовали интеловские 8254* и Broadcom BCM5706/BCM5708.
Оба позволяют откладывать прерывания, чтоб не дергать проц на каждый пакет. Оба с адекватным scatter/gather DMA и позволяют выполнять кое-какие операции полезные в сетевых стеках, но вам, это, наверное, поможет не сильно.
Помоему для меня это не реальные варианты

. Я на это дело так и не смог найти даташитов, когда правил драйвера к сетевухам броадкомовским для фриибсд. Думаю что с интелом будет тоже самое.
Цитата
Броадкомовские маки особенно интересны, что у них "на борту" у МАКа есть пара собственных процессоров, которые-то уже и занимаются раскладыванием принятых пакетов в память процессору. Несколько лет назад народ из FreeBSD сделал zero-copy прием пакетов.
http://people.freebsd.org/~ken/zero_copy/Однако, в обоих случаях - проблема найти документацию. Что интел, что броадком страдают изрядным геморроем в этом плане.
Вот-вот.