Linux: Ограничение пропускной способности (канал) в байтах в секунду?

Я блуждал, если существует программа Linux, которая может ограничить пропускную способность канала - в фактических байтах в секунду?.

Из того, что я собираюсь, применимый в целях был бы

То, что я хотел бы, должно смочь указать что-то как

cat example.txt | ratelimit -Bps 100 > /dev/ttyUSB0

... и на самом деле имейте единственный байт из example.txt, отправленного каждый 1/100 = 0,01 секунды (или 10 мс) для 'произведения'..

4
задан 17.02.2014, 21:15

2 ответа

Ну, я решил исправить cpipe, можно найти патч здесь: cpipe-3.0.1-singlebyte.patch; это относительно текущего'apt-get source cpipe'в Lucid (который получает меня cpipe_3.0.1.orig.tar.gz и cpipe_3.0.1-1.diff.gz); когда источник загружает и распаковывает cpipe-3.0.1 dir, просто сделайте:

$ cp -a cpipe-3.0.1 cpipe-3.0.1B
$ cd cpipe-3.0.1B
$ patch -p1 < /path/to/cpipe-3.0.1-singlebyte.patch
$ make

Добавленный переключатель командной строки - бакалавр наук для 'байта, единственного', который может теперь поддерживать единственные побайтовые записи вниз к 1 байт/с; таким образом, теперь может сделать:

$ echo "hello" | ./cpipe -vt -vw -bs 1 | cat 
./cpipe: period 1 sec, 1000.000000 ms, 1000000000 ns, 0.000000 nsrem 
h out: 1000.122ms at       0B/s (      6B/s avg)       6B
e out: 2000.343ms at       0B/s (      2B/s avg)       6B
l out: 3000.536ms at       1B/s (      1B/s avg)       6B
l out: 4000.730ms at       1B/s (      1B/s avg)       6B
o out: 5000.925ms at       1B/s (      0B/s avg)       6B

 out: 6001.100ms at       1B/s (      0B/s avg)       6B
 out: 6001.155ms at       1B/s (      0B/s avg)       6B
thru: 6001.209ms at       1B/s (      1B/s avg)       6B

$ echo "hello" | ./cpipe -vt -vw -bs 5 > /dev/null
./cpipe: period 0 sec, 200.000000 ms, 200000000 ns, 200000000.000000 nsrem 
 out: 200.120ms at       0B/s (     30B/s avg)       6B
 out: 400.323ms at       2B/s (     10B/s avg)       6B
 out: 600.507ms at       3B/s (      5B/s avg)       6B
 out: 800.690ms at       4B/s (      3B/s avg)       6B
 out: 1000.870ms at       4B/s (      2B/s avg)       6B
 out: 1201.049ms at       4B/s (      1B/s avg)       6B
 out: 1201.098ms at       5B/s (      1B/s avg)       6B
thru: 1201.142ms at       5B/s (      5B/s avg)       6B

... однако, это не будет работать слишком хорошо на более высокие уровни кБайт/с - так в этом случае, лучше использовать обычное cpipe -s буферизированная техника...

$ cat /etc/X11/rgb.txt | ./cpipe -vt -vw -bs 102400 > /dev/null
....
 out: 2675.206ms at    6.3kB/s (      1B/s avg)   17.0kB
 out: 2675.240ms at    6.3kB/s (      1B/s avg)   17.0kB
thru: 2675.832ms at    6.3kB/s (   6.3kB/s avg)   17.0kB

$ cat /etc/X11/rgb.txt | ./cpipe -vt -vw -s 100 > /dev/null
 out:   0.011ms at    1.5GB/s (   1.5GB/s avg)   17.0kB
thru: 166.630ms at  101.9kB/s ( 101.9kB/s avg)   17.0kB

..., как это говорит также в man cpipe:

С тех пор в большинстве систем существует определенное минимальное время usleep () сны, например, 0,01 с, невозможно достигнуть высоких пределов с маленьким размером буфера

Хорошо.. надежда услышать существует лучший способ управлять этим,
Удачи!

0
ответ дан 07.12.2019, 20:25

Вы могли попробовать mbuffer (не знайте, находится ли это в Debian по умолчанию):

cat example.txt | mbuffer -R 100 > /dev/ttyUSB0
3
ответ дан 07.12.2019, 20:25

Теги

Похожие вопросы