запись должна замедлить устройство хранения данных в nohup режиме, блокирующем процесс?

Ubuntu минимальная установка командной строки от mini.iso и apt-get install gnome-shell gdm gnome-terminalfirefox возможно).

0
14.01.2013, 11:19
2 ответа

nohup режим не имеет никакой уместности на том, является ли процессом связанный ввод-вывод. Таким образом да, медленное устройство хранения данных, вероятно, замедлит процесс.

Если процесс имеет пульсирующий вывод (например, 10 строк каждый 1 час), но пропускная способность ниже, чем Ваше "медленное" устройство хранения данных, то можно улучшить производительность, например, пишущий в канал или FIFO (который затем копируется в медленное устройство хранения данных другим процессом), пока один пакет вывода не превышает буфер канала.

mkfifo /tmp/fifo
nohup prog >/tmp/fifo &
cat </tmp/fifo >slow_log_file &

или

nohup prog | buffer -s 16k >slow_log_file &

где буфер является специальной программой (доступный на Debian с apt-get install buffer) это поддерживает многочисленную внутреннюю очередь, чтобы не блокировать устройство записи.

Или если Вы управляете исходным кодом, Вы могли бы реализовать буферизацию себя и возможно использовать отдельный процесс регистратора для записи в медленное устройство хранения данных. Я знаю, что djbdns (известный его устойчивостью) использует процесс регистратора.

1
28.01.2020, 02:53
  • 1
    является там некоторой утилитой, которая может сделать это? что-то как мишень, но это буферизовало бы вход в память и записало бы в файл с помощью отдельного потока или такого –  Petr 14.01.2013, 15:19
  • 2
    , я могу изменить источники, но мне не нравится идея, что само приложение обработало бы это, потому что в случае катастрофического отказа (или уничтожают) приложение не закончило бы писать для входа, и могли быть некоторые данные missig –  Petr 14.01.2013, 15:21
  • 3
    OK, предложенный процесс регистратора вместо потока. Или просто пойдите с mkfifo или с буфером –  dan3 14.01.2013, 16:26

Как нормальный процесс, которые производят огромный IO, он будет заблокирован. Но обычно блоки файловой системы кэшируются в памяти. И когда попытка ОС записать грязные блоки в диск, Вы будете видеть, что ожидают столбец в главном выводе, становится 100%

0
28.01.2020, 02:53
  • 1
    , я думаю, что кэширование ОС зависит от типа файловой системы, все же. С такой пропускной способностью это - вероятно, не обычное устройство хранения данных, но что-то как nfs (или могло быть столь же экзотичным как sshfs) –  dan3 14.01.2013, 14:01
  • 2
    , который я писал "обычно".:) Конечно, мы можем использовать directio или O_DIRECT в open() для отключают кэширующийся –  dchirikov 14.01.2013, 14:40
  • 3
    Право :) но мы не находимся в "обычно" сценарий (10 строк в 2 минуты). Я подозреваю сетевую файловую систему, но OP не говорит. Я знаю, что существуют решения для NFS, кэширующегося в этом случае –  dan3 14.01.2013, 16:29

Теги

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