если у меня есть 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