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

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

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

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

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

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

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

Вопросы:

  1. почему процесс не использует 100% ресурсов процессора, и если это из-за ожидания io, то почему iowait равен 0%?
  2. Как определить, есть ли в процессе какие-либо проблемы и какого типа это проблемы?

решение1

 The process is writing data to a remote disk mounted on /home

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

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

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

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

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

решение2

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

В таком случае попробуйте воспользоваться профайлером, чтобы выяснить, что делает код.

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

Связанный контент