Pipe limit data in bytes

Поместите процесс в контрольную группу net_cls , используйте контрольную группу для установки класса пакетов, а затем используйте классовый фильтр в tc для ограничения скорости пакетов в этом классе. Например:

cgcreate -g net_cls:slow
echo 0x10001 > /sys/fs/cgroup/net_cls/slow/net_cls.classid
cgclassify -g net_cls:slow <pid of the process you want to limit>
tc qdisc add dev eth0 root handle 1: htb
tc filter add dev eth0 parent 1: handle 1: cgroup
tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbps

Это должно означать, что указанный вами процесс (и любой из его дочерних процессов) ограничен пропускной способностью 1 мегабайт в секунду - настройте параметр последней команды на любую желаемую пропускную способность.

2
11.09.2017, 19:57
1 ответ

dd bs=1 очень неэффективен, так как выполняет один read()и один write()системный вызов на байт. В любом случае не имеет особого смысла использовать ddна блочном устройстве (, если только вы не хотите использовать специальные флаги, такие как conv=noerror,sync..., для обработки ошибок или смещений )

.

Здесь можно сделать:

offset=$(($(cat /sys/class/block/sda3/start) * 512)) &&
 pv -trabSs "$offset" < myfile > /dev/sda

(или используйте head -c "$offset", если вам не нужна информация о ходе выполнения ).

pvи headвыберут подходящий размер буфера для оптимизации производительности.

(обратите внимание, что, поскольку вы записываете данные в начало диска, вы фактически перезаписываете таблицу разделов! ).

Другой альтернативой может быть создание нового блочного устройства, отображающего только те разделы /dev/sda, которые вы хотите перезаписать

Нравится:

echo "0 $(cat /sys/class/block/sda3/start) linear /dev/sda 0" |
  dmsetup create writable_sda &&
cp myfile /dev/mapper/writable_sda
1
27.01.2020, 22:18

Теги

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