GNU/Linux >> Tutoriales Linux >  >> Linux

3 consejos para mejorar el rendimiento de los procesos de Linux con prioridad y afinidad

[ Nota del editor:existen limitaciones conocidas para la fijación de CPU en algunos entornos, así que asegúrese de leer los detalles de su entorno antes de seguir este tutorial. ]

Las CPU ejecutan todas las aplicaciones y es mejor si entiende cómo funciona y cómo puede ajustar el uso de la CPU para aumentar el rendimiento de sus aplicaciones.

Los sistemas modernos suelen tener varias CPU y núcleos, que el programador del kernel comparte entre todo el software en ejecución. Entonces, normalmente, no le preocupa qué CPU/núcleo ejecuta su aplicación o proceso, siempre que se ejecute.

Hay varias formas de obtener más CPU y hacer que su aplicación funcione mejor y se ejecute de manera más eficiente. Una forma es usar el ajuste de prioridad usando el nice /renice comando.

[ También te puede interesar: La unidad central de procesamiento (CPU):sus componentes y funcionalidad]

La segunda forma es vincular la aplicación a una o más CPU, lo que se denomina "fijación de CPU" o "afinidad de CPU". Vincular la aplicación a una CPU o CPU específicas hace que todos los subprocesos o procesos secundarios relacionados con la aplicación se ejecuten en CPU/CPU definidas. De esta manera, limitar el proceso/aplicación a una o más CPU da como resultado más "calor de caché" o "accesos de caché", lo que aumenta el rendimiento general. El primer beneficio de la afinidad de la CPU es optimizar el rendimiento de la memoria caché. El segundo beneficio de la afinidad de la CPU es que si varios subprocesos acceden a los mismos datos, tiene sentido ejecutarlos todos en el mismo procesador, lo que nos ayuda a minimizar los errores de caché.

Método 1:ajuste de prioridad

Cambiando la prioridad del proceso usando un nice dominio. Esta es quizás la forma más común conocida de mejorar el uso de la CPU de aplicaciones/procesos.

Unix siempre ha proporcionado un nice() llamada al sistema para ajustar la prioridad del proceso, que establece una amabilidad valor. Positivo nice valores dan como resultado una prioridad de proceso más baja (mejor ), y los valores negativos, que solo puede establecer el superusuario (raíz), dan como resultado una prioridad más alta.

El nice El valor sigue siendo útil hoy en día para ajustar la prioridad del proceso. Su tarea es identificar el trabajo de baja prioridad, que puede incluir agentes de supervisión y copias de seguridad programadas, que modifica para comenzar con un nice valor. También puede realizar un análisis para verificar que el ajuste sea efectivo y que la latencia del programador permanezca baja para el trabajo de alta prioridad.

¿Cómo funciona?

Cada proceso tiene una cantidad específica de tiempo para ejecutarse en la CPU. El tiempo real durante el cual el proceso se ejecuta en la CPU se denomina tiempo de ejecución virtual  del proceso Por cierto, la CPU tiende a actuar como un padre y tiene la costumbre de dividir el tiempo por igual entre todos los hijos (los procesos).

El tiempo total que un proceso pasa "en la CPU" es el tiempo de ejecución virtual del proceso. El sistema operativo (SO) mantiene un registro de este tiempo de ejecución virtual e intenta dar el mismo tiempo a todos los procesos en la cola de ejecución.

El nicerenice las utilidades manipulan este tiempo de ejecución virtual.

Cuando alimentas valores positivos con renice /nice comandos, por ejemplo - renice +10 PID está agregando manualmente más tiempo de ejecución virtual al proceso. El sistema operativo cree que el proceso ha tomado más tiempo de ejecución virtual que otros procesos en la cola de ejecución. Entonces, en el próximo ciclo, la CPU le da menos tiempo al proceso. El proceso finaliza tarde ya que está pasando menos tiempo "en la CPU" ahora, después de la renice comando.

Pero cuando alimentas valores negativos con renice /nice comandos, por ejemplo - renice -10 PID , está reduciendo manualmente el tiempo de ejecución virtual del proceso. El sistema operativo cree que el proceso no tiene suficiente tiempo "en la CPU" que otros procesos en la cola de ejecución. Entonces, en el próximo ciclo, la CPU le da más tiempo "en la CPU" a ese proceso en comparación con otros procesos en la cola de ejecución. El proceso terminará rápido.

Método 2:vinculación de procesos

Un proceso puede estar vinculado a una o más CPU, lo que puede aumentar su rendimiento al mejorar la calidez de la memoria caché o accesos de caché y localidad de memoria . En Linux, esto se realiza usando el taskset comando, que puede usar una CPU máscara o rangos para establecer la afinidad de la CPU.

Usando el taskset , había vinculado el proceso 6197 para que se ejecutara solo en la CPU 1. Esto dará como resultado más accesos a la memoria caché o al calor de la memoria caché. Otros procesos también pueden ejecutarse en la CPU 1, pero el proceso solo se ejecuta en la CPU 1 y la CPU 2. Esta configuración no es permanente. Si el servidor se reinicia o el proceso se reinicia, el PID cambiará. Entonces esta configuración se pierde.

Una mejor manera es usar un archivo "drop-in".

Método 3:afinidad de CPU a través de un archivo desplegable

Según Wikipedia, Afinidad del procesadorfijación de CPU o "afinidad de caché", permite vincular y desvincular un proceso o un subproceso a una unidad central de procesamiento (CPU) o un rango de CPU, de modo que el proceso o el subproceso se ejecute solo en la CPU o CPU designadas en lugar de en cualquier CPU .

Normalmente, es el núcleo el que determina las CPU que ejecuta un proceso. Cada vez que el planificador reprograma un proceso, puede ir a cualquiera de las CPU disponibles. Si bien esto está bien para la mayoría de las cargas de trabajo, a veces es deseable limitar qué CPU (s) puede ejecutar un proceso. Por ejemplo, limitar un proceso que consume mucha memoria a solo una o dos CPU aumenta las posibilidades de un golpe de caché, lo que aumenta el rendimiento general.

¿Cómo funciona?

En la imagen, tiene tres aplicaciones:X, Y y Z. El comportamiento predeterminado del programador es usar todas las CPU disponibles para ejecutar los subprocesos de las aplicaciones X, Y y Z. Usando la configuración predeterminada, puede ver que Obtendrá una buena cantidad de errores de caché ya que la aplicación se distribuye en todas las CPU. Lo que conduce a menos aciertos de caché y más errores de caché.

Cuando las aplicaciones están ancladas a CPU específicas, se ven obligadas a ejecutarse en CPU específicas, por lo que utilizan la memoria caché de la CPU de manera más efectiva:más código en la misma CPU. Hacerlo da como resultado más calor de caché/accesos de caché y, por lo tanto, una aplicación con mejor rendimiento.

Para explorar cómo puede usar la afinidad de CPU/fijación de CPU para vincular un proceso a ciertos procesadores, fije el sshd proceso a CPU 0.

Comprobar el estado actual de sshd Servicio. Está comprobando a qué CPU se vincula.

Según el taskset páginas del comando man, valor f significa "cualquier CPU". Por lo tanto, no hay vinculación o fijación de CPU configurada para sshd servicio.

Vincular el sshd servicio a CPU 0—creando un drop-in archivo que utilizará para controlar el comportamiento de sshd Servicio. El archivo desplegable controla muchas cosas relacionadas con un proceso, pero actualmente, se limita a la afinidad/fijación de CPU.

Puede ver cómo el taskset el comando muestra la CPU como "1", que de acuerdo con el taskset La página man es la primera CPU disponible.

Puede confirmar aún más el archivo desplegable comprobando el estado de sshd servicio.

Resumir

Puedes usar nice renice para cambiar la prioridad de un proceso. Tanto el nicerenice Los comandos pueden manipular el "tiempo de ejecución virtual" del proceso. Entonces, según los valores, el proceso pasa más o menos tiempo en la CPU.

Puede vincular/fijar un proceso a una o más CPU. Esto aumenta las posibilidades de más calor de caché/accesos de caché, lo que da como resultado un rendimiento mucho mejor. Puedes usar el taskset herramienta de línea de comandos para este propósito. Pero el efecto es sólo temporal. Si quiere que la configuración sea persistente, tiene que usar un archivo "drop-in".

[ Curso gratuito en línea:Descripción general técnica de Red Hat Enterprise Linux. ]


Linux
  1. Los 5 mejores podcasts sobre noticias y consejos sobre Linux

  2. Consejos y trucos para usar CUPS para imprimir con Linux

  3. Introducción a las interrupciones de Linux y CPU SMP Affinity

  4. ¿Cómo configurar la afinidad de la CPU para un proceso de C o C++ en Linux?

  5. ¿Recuperar el uso de la CPU y el uso de la memoria de un solo proceso en Linux?

Monitoreo de hosts Linux y Windows con Glances

Sugerencias para enumerar archivos con ls en la línea de comandos de Linux

Consejos para la parte superior:Monitoreo de la carga de la CPU en Linux

Tutorial de comandos de tareas de Linux para principiantes (con ejemplos)

Solucionar problemas y monitorear el rendimiento del sistema Linux con nmon

Introducción a la supervisión y el ajuste del rendimiento de Linux