Назад | Перейти на главную страницу

Измерение пропускной способности сети с помощью netcat в сравнении со скоростью передачи данных CIFS / SMB

Я пытался измерить и оценить пропускную способность нашей локальной сети в рамках более крупного проекта. Наша локальная сеть построена с использованием коммутаторов Cat5e и HP ProCurve 1800-24G, которые поддерживают автоматическое определение скорости 10/100/1000 Мбит / с. Физическая топология довольно проста. У нас есть ProCurve в нашей серверной стойке, к которой подключены все серверы (я неправильно называю его «магистральным» коммутатором). Каждый из наших трех коммутаторов, к которым подключены все клиентские машины, затем подключается к «магистральному» коммутатору с помощью отдельного кабеля / порта для каждого коммутатора. По сути, это конструкция «ступицы». Рабочая станция, с которой я тестирую, находится в двух коммутаторах от «магистрального» коммутатора, и в ней установлен старый диск IDE. Я использовал HDTune, чтобы измерить скорость моего диска примерно на 60 МБ / с. Наши серверы - это HP DL380 G5 с массивом RAID6 из 72 ГБ однопортовых дисков SAS 15K и двумя процессорами Intel Xeon Duo Core с тактовой частотой 3,0 ГГц.

Я прочитал несколько других (Вот, и Вот) вопросы по этой теме, а также Tom's Hardware статья поэтому я знаю, что моя фактическая пропускная способность будет намного меньше теоретической максимальной пропускной способности сети 1 Гбит (например, скорость передачи 124 МБ / с). Однако на самом деле меня озадачивает расхождение между числами, которые я получаю с помощью netcat, и временем передачи файлов с использованием CIFS / SMB.

Я использую версию netcat для cygwin так:

На «сервере»:

nc -vv -l -p 1234 > /dev/null

О «клиенте»:

time yes|nc -vv -n 192.168.1.10 1234

Чтобы проверить скорость передачи файлов с использованием CIFS / SMB, я просто делаю что-то вроде этого с помощью cygwin:

time cp local_file.iso /remote_dir/

Теперь, если я не выполнил свои математические вычисления (разделить передаваемые байты на секунды, чтобы получить байты в секунду и преобразовать оттуда), совершенно неправильная передача с помощью netcat действительно очень медленная. Вроде 4-8 Мбайт / с медленно. С другой стороны, используя файл .iso размером 120 МБ в качестве файла передачи, я рассчитал, что пропускная способность сервера CIFS / SMB составляет около 30–35 МБ / с. Все еще намного медленнее, чем я ожидал, но совершенно другое число, чем то, что я получаю с помощью netcat.

Я должен упомянуть, что на самом деле я использую два разных сервера для тестирования netcat и CIFS / SMB. Я использую хост XenServer для netcat и Windows 2003 Server для CIFS (у меня нет возможности установить netcat на сервере Windows). Аппаратно они идентичны. Теперь я знаю, что это может быть чем-то вроде сравнения яблока с апельсинами, но если я выполняю передачу CIFS на хост XenServer, я получаю скорость передачи около 30 МБ / с, что, похоже, согласуется с результатом, который я получаю на Windows 2003 Server.

Полагаю, у меня действительно есть два вопроса: 1) Почему разные числа между netcat и временем передачи файлов общего доступа CIFS / SMB? и 2) Почему у меня такая низкая фактическая пропускная способность? Я знаю, что мои диски могут так быстро передавать столько данных на сетевую карту, но наверняка я должен увидеть что-то около 60 МБ / с?

На самом деле у меня нет однозначного ответа, кроме как быть очень внимательным, какой инструмент вы используете для измерения фактической пропускной способности. Я использовал netcat (обе версии cygwin и GNU), синхронизированные передачи CIFS / SMB, синхронизированные передачи SCP, iperf и NetCPS на множестве хостов в обоих направлениях, И, конечно же, я получил сильно расходящиеся ответы. Однако я обнаружил, что при осторожном и методичном использовании одного и того же инструмента я получаю аналогичные числа на разных хостах.

Еще стоит упомянуть, что многие из этих инструментов тестируют только пропускную способность сети. Их полезная нагрузка фактически отправляется из памяти непосредственно в сеть (я считаю, что это делают и iperf, и NetCPS). Хотя это полезно для тестирования производительности сети и выявления проблем с инфраструктурой, оно не дает четкого представления о том, как будет выглядеть производительность на ваших клиентских конечных узлах. В моем случае я могу получить со своей рабочей станции около 25-30 МБ / с, используя что-то вроде передачи файлов по времени, но iperf сообщит, что я могу получить 45-50 МБ / с.

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

Что касается второй части моего вопроса, я понятия не имею. Скорость передачи около 25–30 МБ / с кажется ужасной для конечных узлов, пока вы не поймете, что они могут передавать данные в сеть только с такой скоростью, с которой будут работать их диски и шины (а моя рабочая станция медленная). Хотел бы я использовать более 25% своей теоретической пропускной способности? Да, но судя по тому, что я прочитал, мои результаты не являются чем-то необычным. Я обнаружил, что серверы, конечно, были намного быстрее (60-70 МБ / с), что примерно соответствует их измеренной максимальной скорости диска (HDTune сообщает об этом около 1 ГБ / с ... кажется медленным для одноканального 15K RPM RAID-6 SAS диски?). Но странным было то, что некоторые серверы казались намного медленнее и существовала асимметричная скорость передачи в зависимости от того, какая машина действовала как клиент, а какая как сервер. Например: я бы получил 45 МБ / с в одном направлении и 12 МБ / с в другом. Я подозреваю, что виноват тот факт, что эти серверы находятся в разных подсетях, но я этого не подтвердил. Я даже зашел так далеко, что протестировал сетевую карту, порт коммутатора и кабель, чтобы попытаться найти неисправность. Я думаю, что ошибка связана с топографией сети и, возможно, с маршрутизатором, но я не могу быть уверен, поскольку до моего приезда сюда не проводилось тестирование. Короче говоря ... некоторые вещи работают намного медленнее, чем остальная сеть. Действительно странно.

Физическая топография сети:

       ----- 146.63.205.65 ----|--------|
       |                       | "Main" |---- [Client Switch # 1]
 <--[NetWare 6.5]              | Switch |---- [Client Switch # 2]
       |                       |        |---- [Client Switch # 3]
       ----- 192.168.61.1 -----|--------| 
                                 |
                                 |
                             "Servers"

посмотрите, насколько быстро выполняется чтение на xen - используйте что-то вроде hdparam или просто сделайте локальную копию, которая даст представление о производительности диска

для передачи файлов попробуйте Другой инструмент, такой как dd, странно, почему nc медленный - например, для меня очень быстро