cómo comprobar si un proceso con un uso intensivo de io se está ejecutando correctamente

cómo comprobar si un proceso con un uso intensivo de io se está ejecutando correctamente

Ahora dirijo un grupo de ordenadores para informática científica. Algunos procesos del clúster necesitan un uso intensivo de io. Ahora encuentro tal proceso:

  1. Su estado cambia rápidamente entre DOWN y RUN y el uso de su CPU cambia rápidamente entre 1% y 100%.
  2. En topsalida, iowait es 0% y inactivo es aproximadamente 90%

Creo que este proceso puede tener algunos problemas, pero el propietario del proceso afirma que se está ejecutando correctamente porque todavía está escribiendo datos en los discos.

Más información:

  1. El proceso consiste en escribir datos en un disco remoto montado en /home.
  2. El proceso se basa en un código ligeramente modificado. El software original es capaz de ejecutar subprocesos múltiples pero necesita una gran cantidad de memoria. El código modificado usa más disco y menos memoria, pero quien modifica el código no sabe nada sobre subprocesos múltiples.
  3. Pequeñas pruebas muestran que el código puede dar el resultado correcto

Preguntas:

  1. ¿Por qué el proceso no utiliza el 100% de la CPU y si eso se debe a la espera de io, por qué iowait es 0%?
  2. ¿Cómo juzgar si el proceso tiene algún problema y qué tipo de problemas es ese?

Respuesta1

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

Probablemente ahí esté tu respuesta. El estado del proceso Dno esABAJO, essueño ininterrumpidoy normalmente significa algunas E/S para finalizar. Como tiene un recurso compartido de red, dependiendo de las condiciones, es posible que no se muestre como espera de E/S y que no consuma mucha CPU mientras su sistema está esperando.

Sin embargo, para usted y su aplicación, las cosas van muy lentamente si el recurso compartido de red es lento debido a la forma en que escribe la aplicación, a la red o al rendimiento del servidor de archivos.

¿Cómo saber si el motivo es su aplicación o el recurso compartido de red? Simple: pruebe el rendimiento compartido de la red con otras herramientas y otros patrones de uso. Copie muchos datos de un lado a otro desde /home a alguna otra ubicación y viceversa, ejecute algunos puntos de referencia como iozone, pruebe el rendimiento de la red sin procesar con iperfcosas así.

Si le dan resultados razonables, vaya y vea qué está haciendo su aplicación.

Sin embargo, muchas veces la razón está en otra parte; Sin saber nada sobre su sistema, supongo que necesita ajustar la configuración de montaje NFS. Pero, por ahora, sigue siendo sólo una suposición, ya que no sé si tienes NFS en uso.

Respuesta2

Si la CPU no está ocupada, es probable que su proceso esté esperando algo externo. Me imagino que hay muchas posibilidades de que le entiendas si observas qué llamadas al sistema tardan más con strace.

En ese caso, intente utilizar un generador de perfiles para descubrir qué está haciendo el código.

¿Su código utiliza IO mmap? Estoy pensando que es posible que eso no se informe como tiempo de espera en su proceso, pero aparecería como un proceso del sistema que utiliza una gran cantidad de disco a medida que vacía las páginas en el disco.

información relacionada