Хорошо, в этой истории есть нечто большее, чем предполагает название.
Предпосылки и среда : я копирую несколько ТБ со старого сервера Ubuntu на новый сервер Windows 2012 через SMB. (Технически, это стандартное оборудование, но они здесь серверы.) Все находятся в гигабитной локальной сети, а более старая версия Ubuntu имеет связанный интерфейс. Я полагаю, что на сервере Ubuntu есть две карты Ethernet Rosewill PCI-e 1x, а на сервере Windows - одна достаточно хорошая карта PCI Intel Ethernet.
На конечном компьютере (на сервере Windows) работает пул хранения с четностью более 4х2 ТБ дисков. Это работает новый ReFS от Microsoft. Исходный компьютер (сервер Ubuntu) работает с программным зеркалом RAID. Это хорошо работает EXT4.
Два сервера работают через один гигабитный коммутатор. Я экспериментировал с разрывом соединения на исходном компьютере (Ubuntu) без каких-либо улучшений.
Проблема : у меня нет проблем с передачей на разумных скоростях с других компьютеров на сервер Windows. Другие компьютеры могут хранить 50-80 МБ / с без особых затруднений, но скорость передачи с этого сервера Ubuntu достигает не более 20 МБ / с. 4 + ТБ со скоростью 20 МБ / с занимает много времени (примерно 2,3 дня), и мне интересно, что я могу сделать, чтобы выяснить, где находится узкое место.
Симптомы : ЦП на обоих компьютерах минимален и, конечно, не слишком загружен. Жесткие диски на обоих компьютерах активны, но не забиты, и IOwait ЦП составляет почти 0% как минимум на сервере Ubuntu.
Я провел трассировку Wireshark в течение 35 секунд (предположительно, достаточно долго, чтобы убедиться, что все ACK были для новых пакетов) и заметил, что было довольно много вещей, которых я не ожидал. (1) Не было никаких контрольных сумм для ACK (и НЕКОТОРЫХ SMB-пакетов) от Windows до Ubuntu. Однако Wireshark утверждает, что это может быть связано с «разгрузкой контрольной суммы IP». Хорошо, у меня там очень хорошая карта. Я полагаю, возможно, что сетевая карта может делать вычисления контрольной суммы. Хорошо. Двигаемся дальше ... (2) "TCP ACKed невидимый сегмент". С этим у меня проблема. Номер ACK находится в допустимом диапазоне от того, что я могу сказать, и часто есть огромные блоки этих сообщений. Возможно, Wireshark слишком медленный?
Резюме : Скорость передачи отстой (20 МБ / с по гигабитному Ethernet), и я не знаю почему. Wireshark утверждает, что Windows ACKing вещи, которые никогда не были отправлены Ubuntu.
Угадайте : мое первоначальное предположение состоит в том, что более дешевые карты Розвилла заболочены. Мое второе предположение состоит в том, что программные RAID-подобные вещи на одном конце или другом заполняются чем-то, что нужно делать.
sshd
поглощает 60% одного процессора на стороне Knoppix. В любом случае мой перевод близок к завершению. @Dom: Теперь, когда вы упомянули об этом, я не помню, чтобы все эти данные помещались туда гораздо быстрее, чем 30 Мбит / с.Ответы:
Ваш разрыв в производительности совпадает с обычным опытом, когда Samba (не уверен, что это все еще значение по умолчанию; это было в течение длительного времени) настроен с размером буфера сокета чтения и записи по умолчанию 1024 байта.
Я часто видел это на компьютерах с Linux и Mac. Надеюсь, это еще не тот случай.
В конфигурационном файле samba есть аргумент сокета, в котором вы можете установить размер буфера сокета для чтения и записи. Предложите вам установить 8192 байта (8 КиБ). 4 или 8 КБ часто похожи, но я не проверял это на гигабитной ссылке.
Кроме того, не ожидайте, что одно соединение TCP получит выгоду от связанной ссылки, трафик почти всегда будет проходить через одну из ссылок; в противном случае вы получите много неупорядоченных пакетов; так что ожидайте преимущества балансировки нагрузки только при обслуживании нескольких клиентов. Даже тогда вы должны посмотреть на разные режимы соединения и знать, что по крайней мере для соединения в «режиме 4» (IEEE 802.3ad), в основном, есть два режима хэширования передачи, которые определяют, на какой подчиненный интерфейс отправлять сообщения. Существует хеширование слоя 2 (по умолчанию) и хеширования слоя 3. Если вы отправляете большую часть ваших данных через шлюз, хэш уровня 2 не будет хорошо распределяться, так как MAC-адрес шлюза будет таким же. Попробуйте использовать слой 3 вместо.
источник
Однажды у меня было две карты Ethernet на одном компьютере с Ubuntu, и по какой-то причине он не работал должным образом - они оба соперничали за одинаковые пакеты, как мне казалось, поэтому иногда я получал ответ, иногда нет, в зависимости от того, захватила ли другая сетевая карта упакованный. Это было странно. Должно быть, я как-то неправильно его настроил, но я бы подумал, что это сработает. Карты, конечно, имели уникальные IP-адреса.
В любом случае, вам было бы просто попробовать это с ОДНОЙ Ethernet-картой в машине, подключенной к сети, просто чтобы исключить это.
источник