У меня дома установлена гигабитная сеть и несколько коробок на основе Ubuntu. Из полного любопытства я хотел бы проверить скорость между двумя коробками. У меня нет никаких проблем со скоростью или чем-то еще, мне действительно любопытен только гик. Плюс, возможно, результаты дадут мне знать, есть ли место для улучшений, или что я что-то настроил неправильно.
Так как же правильно проверить скорость сети между блоками Ubuntu?
Я использую iperf
. Это клиентский сервер в том смысле, что вы запускаете его в режиме сервера на одном конце и подключаетесь к нему с другого компьютера по другую сторону сети.
На одной из машин запускается:
sudo apt-get install iperf
Мы запустим сервер iperf
на одной из машин:
iperf -s
А на другой машине скажем iperf
, чтобы он подключился в качестве клиента:
iperf -c <address of other computer>
На клиентской машине вы увидите нечто подобное:
oli@bert:~$ iperf -c tim
------------------------------------------------------------
Client connecting to tim, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.0.4 port 37248 connected with 192.168.0.5 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 1.04 GBytes 893 Mbits/sec
Конечно, если вы используете брандмауэр на машине сервера, вам нужно разрешить соединения на порту 5001 или изменить порт с помощью флага -p
.
Вы можете сделать почти то же самое со старым добрым nc
(netcat), если вы склонны к этому. На серверной машине:
nc -vvlnp 12345 >/dev/null
И клиент может пропустить гигабайт нулей через dd
через nc
туннель.
dd if=/dev/zero bs=1M count=1K | nc -vvn 10.10.0.2 12345
Как demod:
$ dd if=/dev/zero bs=1M count=1K | nc -vvn 10.10.0.2 12345
Connection to 10.10.0.2 12345 port [tcp/*] succeeded!
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 9.11995 s, 118 MB/s
Время там задается dd
, но оно должно быть достаточно точным, т.к. оно может выводиться только так быстро, как труба будет его принимать. Если вас это не устраивает, вы можете обернуть все это за вызов time
.
Помните, что результат равен мегабайтам, поэтому умножьте его на 8, чтобы получить мега-биты-секунду скорости. Демонстрация, приведенная выше, работает со скоростью 944 Мбит/с.
Используя этот скрипт , вы можете легко проверить скорость соединения между вашим компьютером и некоторым удаленным хост. Пример использования:
$ scp-speed-test.sh user@remote_host 80000
user @ remote_host
- ваш целевой хост (у вас должен быть ssh-доступ
на этот хост) 80000
- это приблизительный размер тестового файла (в килобайтах), который будет
получен на удаленный хост. Это не обязательный аргумент. Есть также несколько других хороших инструментов командной строки для тестирования пропускной способности между двумя хостами:
server$ nuttcp -S
client$ nuttcp -v -v -i1 1.1.1.1 ;# 1.1.1.1 is server's address
server$ nepim
client$ nepim -d -c 1.1.1.1 ;# 1.1.1.1 is server's address
server$ goben
client$ goben -hosts 1.1.1.1 ;# 1.1.1.1 is server's address
То же, что и рекомендация Оли для iperf. Просто хочу добавить несколько моментов:
-t <секунды>
изменяет длину теста. -P
изменяет количество одновременных подключений. Например, iperf -c [целевой IP] -P 10 -t 30
проверяет 10 подключений вместе в течение 30 секунд и дает агрегированные результаты вместе с 10 отдельными скоростями подключения. wget
, сделайте его исполняемым с помощью chmod
, и вы сможете напрямую запустить двоичный файл. Он работает отлично. Я обнаружил, что при использовании настроек по умолчанию скорость отдельного соединения сильно колеблется. Однако с 3+ параллельными соединениями результаты более стабильны на моем гигабайтном коммутаторе. (постоянно @ 910-920 Мбит / с)
как я указал в своем комментарии в лучшем случае, это решение недостаточно хорошее, потому что клиент / сервер не оптимизирован для ... squeeze каждый бит скорости
мое решение:
сделать ramdisk с обеих сторон (поэтому вы не ограничены скоростью хранения, и я предлагаю вам сделать их с ramfs, а не tmpfs, поэтому они не будут входить swap ... только будьте осторожны, чтобы не оставить как минимум 512 МБ свободной памяти для системы, это ТРЕБУЕТСЯ, если у вас есть гигабайтный Ethernet, на этой скорости даже SSD могут замедлить работу)
установите apache на сервер, затем создайте ссылку на ramdisk, создайте несколько больших файлов на ramdisk (100M-1G, вы можете создать их с помощью dd из / dev / random или скопировать, если они у вас есть под рукой)
затем перейдите на клиентскую сторону и загрузите их (также на ramdisk той стороны) с помощью расширенной программы загрузки, я использовал lftp
да ладно, разница была существенной, от 75 Мбит / с, сообщенных iperf, и 9,5 Мбит / с netcat
до 11,18M / s с моим решением:
1591129421 bytes transferred in 136 seconds (11.18M/s)
Если вы Если вы хотите протестировать свою локальную сеть Ethernet на более низком уровне, вы можете использовать Etherate, бесплатный инструмент для тестирования Ethernet с интерфейсом командной строки Linux:
https://github.com/jwbensley/Etherate
Добавьте его в качестве инструментов, таких как iPerf (что очень хорошо!) работают через IP, TCP или UDP. Etherate тесты напрямую через Ethernet / OSI Layer 2.
Легко подключить компьютер к первой коробке, а вторую коробку - к первой. Затем с компьютера ping первой коробки сохраните результат, ping другой коробки и сделайте вычитание.
Приведенная ниже команда не требует дополнительных пакетов, но требует доступа по SSH:
ssh username@myserver.example.com 'dd if=/dev/zero bs=1GB count=3 2>/dev/null' | dd of=/dev/null status=progress
Пример вывода :
2992238080 bytes (3.0 GB) copied, 27.010250 s, 111 MB/s
5859375+0 records in
5859375+0 records out
3000000000 bytes (3.0 GB) copied, 27.1943 s, 110 MB/s
Команда печатает фиктивный файл размером 3 ГБ (1000 ^ 3 байтов), полный нулей, в стандартный вывод на удаленном сервере, который распечатывается (передается) через SSH на стандартный вывод локального сервера, а затем локально передается по конвейеру на / dev / null
(т.е. игнорируется). Вы даже можете видеть, как проходит тест во время его выполнения.
Конечно, не так точно, как другие инструменты, но моим вариантом использования была отладка процесса резервного копирования, где я хотел проверить, была ли проблема в скорости сети, без установки дополнительных пакетов.