Я хочу сделать резервную копию 1 терабайта данных на внешний диск.
Я использую эту команду: tar cf /media/MYDISK/backup.tar mydata
ПРОБЛЕМА: мой плохой ноутбук зависает и вылетает всякий раз, когда я использую 100% ЦП или 100% диск (если вы хотите отреагировать на это, напишите здесь ) . Поэтому я хочу, чтобы максимальная загрузка процессора составляла 50%, а диска - 50%.
Мой вопрос: как дросселировать процессор и диск с помощью tar
команды?
В Rsync есть опция --bwlimit, но я хочу архив, потому что 1) есть много маленьких файлов 2) я предпочитаю управлять одним файлом, а не деревом. Вот почему я использую tar
.
nice
не помешает 100% загрузки процессораОтветы:
Вы можете использовать
pv
для регулирования пропускной способности канала. Так как ваш сценарий использования строго связан с вводом-выводом, дополнительные накладные расходы ЦП при прохождении канала не должны быть заметны, и вам не нужно выполнять какое-либо регулирование ЦП.источник
apt-get install pv
. Я рекомендую добавлять `-b` после-L 1m
: таким образом будет напечатан инкрементный счетчик байтов, который обновляется каждую секунду. Таким образом, вы знаете, сколько байтов было записано до сих порtar czf
вместоtar cf
) ограничение относится к сжатому выводу (поэтому при-L 1m
записи на диск не будет превышать 1 МБ / с .... но чтение с диска будет, вероятно, между 1 МБ / с. и 5 МБ / с, в зависимости от типа вашего контента)Вы можете попробовать инструмент cpulimit, который ограничивает процент загрузки процессора. Это не стандартный инструмент, поэтому вам придется установить его. Вот краткая выдержка из README:
Тогда я бы порекомендовал ionice для ограничения использования ввода-вывода, хотя именно параллельный доступ будет ограничен, а не максимальная пропускная способность ... Тем не менее, вот как это использовать:
источник
Вы не можете заставить процесс работать меньше . Вы можете использовать
nice
его для более низкого приоритета, но это связано с другими процессами. Способ запуска процессорного кулера во время выполнения процесса состоит в том,usleep(3)
чтобы вывести процесс из состояния запуска на определенное время, но это может включать либо исправление,tar
либо использованиеLD_PRELOAD
механизма для предоставления исправленной функции, котораяtar
использует много (например,fopen(3)
).Я подозреваю, что ваши лучшие обходные пути - это те аппаратные средства, которые вы упомянули в SuperUser: поддержание охлаждения ноутбука и / или снижение тактовой частоты процессора.
Раздражающий, но, возможно, жизнеспособный обходной путь (на самом деле клудж) работает на «макроскопическом» уровне. Вместо того, чтобы
tar
запускать 100 мс каждые 200 мс, вы можете сделать так, чтобы он запускал одну секунду из каждых двух. Примечание: это ужасный, ужасный клудж. Но эй, это может даже сработать!Первая
sleep
регулирует время сна, вторая - время работы. В настоящее время он имеет 50% -ный рабочий цикл. Чтобы поддерживать температуру на низком уровне, вам, скорее всего, потребуется уменьшить рабочий цикл до 25% или ниже (1 секунда бега, 3 секунды сна = 1 из каждых 4 секунд = 25% рабочего цикла).sleep
Кстати, команда оболочки может занимать немного времени. Так что вы могли бы даже сказатьsleep 0.1
. Держите его более 0,001, чтобы быть уверенным, и не забывайте, что выполнение скрипта также увеличивает время.источник
Более общий способ ограничения использования ЦП - использование
/sys
. В любом случае это похоже на то, что вам нужно, поскольку другие вещи, кромеtar
способных выполнять вычислительно дорогостоящие задачи, просто то, что вы видите,tar
делает это больше всего.Способ сделать это состоит в том, чтобы:
/sys/devices/system/cpu/cpuX/cpufreq
каждому из ваших процессоров (заменитеcpuX
каждый процессор).scaling_available_frequencies
чтобы увидеть, какие частоты поддерживает ваш процессор.echo 1234567 > scaling_max_freq
Это предотвратит превышение процессором частоты выше указанной частоты.
источник