Почему передача по одному файлу не быстрее, чем 50 МБ / с по гигабитной локальной сети?
Я провел несколько тестов в нашей гигабитной сети.
Когда я передаю большой файл (10 ГБ) с компьютера под управлением Windows 7 на другой, объем обработки никогда не превышает 50 МБ (он начинается с 80 МБ / с в течение одной секунды, а затем замедляется до 32 МБ / с).
Используя одновременные передачи с нескольких компьютеров, клиент может максимально использовать свое соединение Gb. Предположим, что при одновременном использовании нескольких клиентов исходный компьютер достигает пропускной способности около Gb.
Тесты проводились на очень быстрых дисках (2 велоцираптора в Raid 0, 4 WD красного цвета на LSI мегараде RAID5, SSD, Revodrive X3...). Так что они не являются узким местом.
Когда я передаю данные с сервера Windows, пропускная способность немного лучше, но далека от ожидаемых 112 МБ / с локальной сети.
Любая идея?
Редактировать после странного комментария ходячего: Мы используем встроенную NIC (Intel) на материнских платах ASUS и DELL Workstation. Коммутаторы являются управляемыми Cisco SG 300-20, SF 300-08 и Netgear GS 108.
2 ответа
Я предполагаю, что вы используете TCP/IP для передачи файла, хотя вы также не упомянули, какой протокол вы используете.
Ответом на это будет заполнение большой книги - и их много. Но среди возможных причин:
управление перегрузкой: ваш сетевой стек ограничивает пропускную способность, постепенно увеличивая скорость в течение срока службы соединения (до тех пор, пока он не столкнется с потерей пакетов, и в этот момент скорость резко упадет). Использование больших пакетов тоже помогает.
размер окна: конечная точка TCP/IP будет отправлять только столько данных, сколько, по ее мнению, удаленная система может буферизовать. Принимающая сторона должна иметь возможность буферизовать, по крайней мере, пропускную способность x RTT. Хотя RTT здесь низкий, пропускная способность велика. Когда IPV4 был разработан, он не ожидал, что справится с такими большими буферами. Существует решение, которое включает масштабирование окна.
Ваш компьютер не предназначен для цели отправки данных - это многозадачные задачи. Для обработки данных NIC генерирует прерывание - это добавляет задержку. Вы можете смягчить влияние этого на хорошие сетевые карты, включив буферизацию на карте (объединение прерываний)
компьютеру все еще предстоит проделать значительную работу по упаковке данных в кадры и распределению их по проводам - опять же, это можно уменьшить - в этом случае с помощью разгрузки TCP, если ваша ОС / оборудование поддерживает это.
.... и это прежде, чем рассмотреть особенности Ethernet и / или протокола, который вы используете для передачи файлов.
Мне, наконец, удается получить скорость передачи файлов выше 100 МБ / с.
Я удалил NIC из периферийного менеджера и переустановил его. Я думаю, что был беспорядок с параметрами драйвера Intel. Вероятно, из-за попытки установить высокий MTU.