El proceso que se ejecuta como demonio systemd tiene un alto uso de CPU

El proceso que se ejecuta como demonio systemd tiene un alto uso de CPU

Tengo un ejecutable compilado en C++ programque se puede ejecutar como proceso en segundo plano a través de systemd.

También se puede ejecutar como un proceso normal a través de la línea de comandos (utilizada principalmente para depurar).

El proceso realiza operaciones IO regulares entre otras aplicaciones y un dispositivo externo. La comunicación del dispositivo se produce a través de Ethernet TCP/IP, mientras que las comunicaciones de la aplicación son todas comunicaciones entre procesos.

El problema es que la aplicación, cuando se ejecuta como un ejecutable independiente, se ejecuta con un uso de CPU de aproximadamente 0,7% - 1,3%.

Cuando la misma aplicación se ejecuta como un proceso en segundo plano de systemd, el% de uso de la CPU salta para ejecutarse aproximadamente al máximo CPUQuotapermitido en las configuraciones. En este caso lo tenemos fijado en el 5%.

¿Por qué es esto? ¿Está sucediendo algo en systemd que esté causando este problema? La única diferencia desde la perspectiva del código entre ejecutarse como una aplicación o un demonio es que cuando se ejecuta como un demonio enviamos un latido a intervalos enviados.

Respuesta1

Aplique estos ajustes:

1. Cambie su programador de E/S a mq-deadline, como se muestra:

Asegúrese de que elplanificador de fechas límite mqse carga al inicio agregando una entrada en /etc/modules-load.d/modules.conf:

echo mq-deadline >> /etc/modules-load.d/modules.conf

Luego edite /etc/default/gruby asegúrese de que el programador de fechas límite de colas múltiples esté habilitado:

GRUB_CMDLINE_LINUX_DEFAULT="scsi_mod.use_blk_mq=1 elevator=mq-deadline"

Cuando termine, emita:

sudo update-grub

Luego reinicie. Tenga en cuenta queLos programadores de cola única se eliminaron a partir de Linux 5.x..

El objetivo de esto es garantizar que se anule CFQ (Cola completamente justa). Este puede ser el programador predeterminado en su distribución de Linux, aunque últimamente, elgustos de OpenSUSEHemos comenzado a configurar el programador de fechas límite de colas múltiples como predeterminado. La principal ventaja del programador de fechas límite de colas múltiples es su muy baja sobrecarga de CPU.

2. Lo más importante:Deshabilite la función de grupo automático (que está habilitada de forma predeterminada) y modifique los valores de la variable sched_migration_cost en /etc/sysctl.conf.

Introduzca estas líneas en /etc/sysctl.conf:

kernel.sched_autogroup_enabled=0
kernel.sched_migration_cost_ns = 5000000

Luego ejecute sysctl -py reinicie.

Me encontré con un problema similar hace un tiempo en producción, que se solucionó con los ajustes anteriores. Las explicaciones de las distintas opciones enestehilo fueron extremadamente útiles, al igual que el seguimiento de uncaso similar con Proxmox.

información relacionada