Назад | Перейти на главную страницу

Большая задержка начала записи «dd» в фоновом режиме в bash даже при использовании nohup

Я написал небольшой скрипт для печати использования памяти во время большой последовательной записи файла.

#!/bin/bash
rm result
echo 3 > /proc/sys/vm/drop_caches
sync;
echo start
nohup time dd if=/dev/zero of=mem bs=1M count=2000 & 
for i in {1..200}
do
  sleep 0.2
  cat /proc/meminfo | grep Dirty >> result
  cat /proc/meminfo | grep Dirty
done
cat nohup.out
cat result

Я должен увидеть увеличение размера «грязного» с начала пробега. Но когда я запускал скрипт, я часто вижу большую задержку (до нескольких секунд), во время которой размер «Dirty» не увеличивается, что, возможно, означает, что запуск программы «dd» задерживается. Пример проблемного вывода:

Dirty:                20 kB
Dirty:                20 kB
Dirty:                20 kB
Dirty:                20 kB
Dirty:                20 kB
Dirty:                24 kB
Dirty:                24 kB
Dirty:                24 kB
Dirty:                24 kB
Dirty:                28 kB
Dirty:                28 kB
Dirty:                28 kB
Dirty:                28 kB
Dirty:                28 kB
Dirty:             16528 kB
Dirty:            140608 kB
Dirty:            277228 kB
Dirty:            311768 kB
Dirty:            434308 kB
Dirty:            563352 kB
Dirty:            690952 kB
...

Продолжительность задержки неизвестна, иногда задержки вообще нет. И наоборот, когда я бежал

time dd if=/dev/zero of=mem bs=1M count=2000

с помощью некоторого средства просмотра meminfo в реальном времени, например:

#!/bin/bash
clear
while true
do
  sleep 0.2
  tput home
  cat /proc/meminfo
done

Я всегда вижу, что размер «грязного» сразу увеличивается. Что-то не так с моим сценарием? Я также сомневаюсь в том, как операция «запись» выполняется ОС, потому что я также тестировал чтение файла и обнаружил поле «Cached» в / proc / meminfo, и, похоже, у него вообще нет задержки.

Спасибо,

Не могли бы вы перезагрузить систему и убедиться, что после перезапуска не происходит слишком много записи, по крайней мере, со стороны приложения, теперь попробуйте выполнить команду dd, причина в том, что если вы хотите протестировать операции записи, система должна быть чистой и стабильной. Ваша задержка будет зависеть от того, какие параметры fs и тип файловой системы вы собираетесь использовать. Надеюсь, это поможет.

Вы можете определить, что занимает дополнительное время, вызвав скрипт с помощью

/bin/bash -x /path/to/script

и наблюдаем за выходом. Это будет печатать каждую строку кода скрипта по мере его выполнения. В качестве альтернативы вы можете предварять каждую команду командой time, и то, что требует дополнительного времени, станет очевидным.

nohup time dd if=/dev/zero of=mem bs=1M count=2000 & 

есть ли в вашей системе двоичный файл "времени"? в противном случае nohup не знал бы, как запустить внутренний bash, и он потерпит неудачу