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

как проверить, правильно ли работает процесс с интенсивным использованием io

Сейчас я управляю компьютерным кластером для научных вычислений. Некоторые процессы в кластере требуют интенсивного использования io. Сейчас нахожу такой процесс:

  1. Его состояние быстро меняется между DOWN и RUN, а использование процессора быстро меняется от 1% до 100%.
  2. В top выход , iowait составляет 0%, а в режиме ожидания около 90%

Я думаю, что у этого процесса могут быть некоторые проблемы, но владелец процесса утверждает, что он работает правильно и все еще записывает данные на диски.

Больше информации:

  1. Процесс записывает данные на удаленный диск, установленный в / home
  2. Процесс основан на немного измененном коде. Исходное программное обеспечение поддерживает многопоточность, но требует огромного количества памяти. Модифицированный код использует больше диска и меньше памяти, но тот, кто изменяет код, ничего не знает о многопоточности.
  3. Небольшие тесты показывают, что код может дать правильный результат

Вопросы:

  1. почему процесс не использует 100% процентов процессора, и если это из-за ожидания io, почему iowait составляет 0%?
  2. Как определить, есть ли у процесса проблемы и что это за проблемы?
 The process is writing data to a remote disk mounted on /home

Наверное, есть ваш ответ. Состояние процесса D не является ВНИЗ, это непрерывный сон и обычно означает завершение ввода-вывода. Поскольку у вас есть общий сетевой ресурс, в зависимости от условий он может не отображаться при ожидании ввода-вывода и может не потреблять много ресурсов ЦП, поскольку ваша система ожидает.

Однако для вас и вашего приложения все происходит очень медленно, если общий сетевой ресурс медленный из-за того, как приложение пишет, из-за сети или из-за производительности файлового сервера.

Как узнать ваше приложение или сетевой ресурс? Просто - проверьте производительность сетевого ресурса с помощью других инструментов и других шаблонов использования. Скопируйте много данных туда и обратно из / home в другое место и обратно, запустите некоторые тесты, такие как iozone, проверьте чистую производительность сети с помощью iperf, вроде того.

Если они дают разумные результаты, посмотрите, что делает ваше приложение.

Однако часто причина кроется в другом; ничего не зная о вашей системе, я предполагаю, что вам нужно настроить параметры монтирования NFS. Но пока это остается только предположением, поскольку я не знаю, используется ли у вас вообще NFS.

Если ЦП не занят, то ваш процесс, вероятно, ожидает чего-то внешнего. Я полагаю, есть большая вероятность, что вы сможете разобраться в этом, посмотрев, какие системные вызовы занимают больше всего времени с помощью strace.

Если это не так, попробуйте использовать профилировщик, чтобы узнать, что делает код.

Использует ли ваш код ввод-вывод mmap'd? Я думаю, что это может не отображаться как время ожидания для вашего процесса, но будет отображаться как системный процесс, использующий много диска, поскольку он сбрасывает страницы на диск.