Intereting Posts
Как закрыть терминал, не убивая его детей (без запуска `screen`)? Как я могу распечатать и выйти из bash, если оператор backtick не работает Ограничения Wubi less: переход к концу как можно большего количества буфера, а не фактического конца буфера Статический маршрут в Centos 6 Как добавить определенные каталоги в путь «updatedb» (найти)? Графические драйверы Debian Intel для nuc6i7kyk Объединить несколько строк в строку со специальными символами Как получить общее чтение / запись диска в байтах на устройство hdd из / proc Необходимо установить гостевые дополнения VirtualBox 4.3.8 в CentOS 6.3 Вставка в терминал, включая выдачу комментариев Храните переменную \ in read для отображения пространства Дата реформата для отметки времени unix в таблице csv Почему в верхнем регистре имени пакета NetworkManager? Как реплицировать установленные пакеты из одной системы Debian в другую? (Debian Wheezy)

Отправлять случайные данные через TCP на некоторое время и подсчитывать, сколько байтов было отправлено

Чтобы проверить пропускную способность данных, я хочу: 1) за X секунд 2) отправлять случайные данные 3) через TCP и 4) знать после этого точно, сколько байтов было передано.

Моя лучшая попытка (что не так много)

1) тайм-аут X
2) dd if = / dev / urandom count = 65535 bs = 1500
3)> / dev / tcp / <хост> / <порт>
4) …? Можно ли использовать wc -c ? В противном случае, возможно, мои случайные данные tee через tee в файл и /dev/tcp , а затем, когда таймаут закончился, подсчитайте размер байта файла?

Может ли кто-нибудь предоставить элегантную команду bash для этого?


[Обновить] это для индивидуальной версии Linux. Не все команды могут быть доступны для морских свиней. Я проверю все предложения и вернусь к вам как можно скорее.

Поскольку вы попросили разрешения, я представлю вам тот, который я упомянул, и тот, который был назван @SatoKatsura. Прежде всего, генерация случайной сетевой нагрузки обычно не является наиболее полезным способом при тестировании нагрузки. Обычно вам нужно воссоздать реалистичное состояние высокой рабочей нагрузки. Тем не менее, выбрасывание случайных данных по трубе может иметь смысл, если вы просто пытаетесь найти материал, относящийся к производительности другой рабочей нагрузки при любой конкурирующей нагрузке.

Самая прямая линия для получения того, что вы хотите от того, что вы упомянули, – это то, о чем я упоминал в комментариях с помощью nc . Настройте приемный конец так, чтобы он прослушивал какой-то случайный порт и перенаправлял вывод в /dev/null :

 [root@listeningServerFQDN ~]# nc -l listeningServerFQDN 1023 >/dev/null 

Затем на клиенте снова используйте nc для отправки ваших данных /dev/urandom в удаленный конец:

 [root@transmit ~]# dd if=/dev/urandom count=65535 bs=1500 | nc listeningServerFQDN 1023 

После этого вы можете использовать любые инструменты, которые вы хотели использовать.


Это одно возможное решение, другое – это инструмент iperf, упомянутый @SatoKatsura. Это больше ориентировано на сетевых инженеров, которым по какой-то причине требуется какая- то нагрузка, которая будет работать по сети. Например, если они хотят протестировать политики QoS, которые они пытаются реализовать. В этом случае им все равно, если он не представляет собой рабочую нагрузку, они просто проверяют, что пропускная способность ограничена соответствующим образом.

Основное использование iperf включает настройку серверного процесса:

 [root@listeningServerFQDN ~]# iperf -s ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 85.3 KByte (default) ------------------------------------------------------------ 

Затем выполните тест на клиенте:

 [root@transmit ~]# iperf -c listeningServerFQDN -r bind failed: Address already in use ------------------------------------------------------------ Client connecting to transmit.example.com, TCP port 5001 TCP window size: 2.50 MByte (default) ------------------------------------------------------------ [ 4] local 10.762.40.95 port 54610 connected with 10.762.40.95 port 5001 [ ID] Interval Transfer Bandwidth [ 4] 0.0-10.0 sec 37.1 GBytes 31.8 Gbits/sec 

который дублируется на экземпляре сервера, который добавляет следующее к моему выводу:

 [ 4] local 10.762.40.95 port 5001 connected with 10.762.40.95 port 54610 [ ID] Interval Transfer Bandwidth [ 4] 0.0-10.0 sec 37.1 GBytes 31.7 Gbits/sec ------------------------------------------------------------ Client connecting to 10.762.40.95, TCP port 5001 TCP window size: 4.00 MByte (default) ------------------------------------------------------------ [ 4] local 10.762.40.95 port 54640 connected with 10.762.40.95 port 5001 [ 5] local 10.762.40.95 port 5001 connected with 10.762.40.95 port 54640 [ 4] 0.0-10.0 sec 37.4 GBytes 32.1 Gbits/sec [ 5] 0.0-10.0 sec 37.4 GBytes 32.1 Gbits/sec 

Вы можете разветвиться оттуда, очевидно, но вы получите общую идею и можете посмотреть страницу руководства для всего остального.


Мои два цента: я бы на самом деле придерживался nc решения, если ваши критерии действительно просто «посылают случайные данные по трубе». nc – это обычно полезный инструмент, который вы можете использовать для выполнения большего, чем только этого, и я подозреваю, что iperf использования для iperf довольно узкий.

Я бы использовал nc (или какой бы инструмент вы ни были более удобны) для рудиментарного тестирования, а затем выпускник для моделирования фактической загрузки, а не перехода на iperf который является еще одним испытанием «случайные данные по трубе».