Если у меня есть proc1 | proc2
, есть ли способ точно измерить битрейт, протекающий по трубе, без изменения поведения, как если бы измерительного устройства не было? будет что-то вроде работы с тифом? я хотел бы proc1 | tee proc2 > flow_measurement_thing
или proc1 | tee flow_measurement_thing > proc2
? если я правильно понимаю каналы, unix-каналы по умолчанию могут пережевывать 4096 байт, и они могут блокировать, если приемник не считывает данные так быстро, как это происходит, поэтому я обеспокоен тем, что само измерительное устройство может вызвать "ламинарный" поток труба станет "турбулентной", если я не реализую ее правильно.
фактический пример использования склеивается в python с именованными каналами из os.. здесь очень упрощенный пример
import os, subprocess
os.mkfifo('pipe')
subprocess.Popen(['convert', '-i', 'pipe', '-o', 'somewhere_else'])
subprocess.Popen(['capture', '-o', 'pipe'])
для простоты предположим, что преобразователь не изменяет битрейт, тогда я хочу убедиться, что capture | convert | /dev/null
- это перекачка битов с той же скоростью, что и capture | /dev/null
Как сказал Кори Голдберг, вы должны использовать pv
. Это очень хороший инструмент и доступен на большинстве систем * nix. Вы можете сделать следующее:
capture | pv > /dev/null
capture | convert | pv > /dev/null
pv
сообщит вам пропускную способность для каждого случая.
Или, если вывод capture
является детерминированным, просто используйте таймер.
pv
выразить пропускную способность в б / с? Я пытаюсь измерить пропускную способность WLAN на разных позициях, используя netcat
. В настоящее время я просто использую Gnome System Monitor для измерения пропускной способности интерфейса WiFi, но в будущем я бы хотел использовать инструмент командной строки, такой как pv
.