linux limit cpu fedora systemd

linux - Uso de CPUQuota en systemd



limit fedora (5)

Accidentalmente encontré otra respuesta válida dada en https://unix.stackexchange.com/questions/213903/linux-cgroups-limit-cpu-usage-in-absolute-values-which-do-not-depend-on-cpu-spe

Si desea un límite estricto en el ancho de banda de la CPU, puede usar cpu.cfs_quota_us y cpu.cfs_period_us. De los documentos de CFS de Kernel:

El ancho de banda permitido para un grupo se especifica mediante una cuota y un período. Dentro de cada "período" dado (microsegundos), a un grupo se le permite consumir solo hasta "cupos" de microsegundos de tiempo de CPU. Cuando el consumo de ancho de banda de la CPU de un grupo supera este límite (para ese período), las tareas que pertenecen a su jerarquía se limitarán y no podrán volver a ejecutarse hasta el siguiente período.

Estoy tratando de poner un límite duro en el uso de la CPU para un comando dd. He creado el siguiente archivo de unidad

[Unit] Description=Virtual Distributed Ethernet [Service] ExecStart=/usr/bin/ddcommand CPUQuota=10% [Install] WantedBy=multi-user.target

que llaman al siguiente script simple

#!/bin/sh dd if=/dev/zero of=/dev/null bs=1024k

Como he visto en esta guía: http://www.freedesktop.org/software/systemd/man/systemd.resource-control.html El uso de la CPU para mi servicio de dd no debe exceder el 10%. Pero cuando ejecuto el comando system-cgtop, el uso es aproximadamente del 70-75%.

¿Alguna idea de qué estoy haciendo mal y cómo puedo solucionarlo?

PS Cuando ejecuto systemctl show dd obtengo los siguientes resultados con respecto a la CPU

CPUShares=18446744073709551615 StartupCPUShares=18446744073709551615 CPUQuotaPerSecUSec=100ms LimitCPU=18446744073709551615


Formas alternativas de limitar el uso de la CPU: 1. Utilice el comando de conjunto de tareas. 2. Utilizar grupos de control. 3. Use la ventana acoplable y limite la utilización de la CPU utilizando cpuset. 4. Reduzca el número de hilos en la aplicación. Se requiere algún cálculo con este enfoque.


Implica "CPUAccounting = true" Así que debería ser

[Service] ExecStart=/usr/bin/ddcommand CPUAccounting=true CPUQuota=10%


La opción " CPUQuota = " depende de la cantidad de CPU en el sistema, porque garantiza que los procesos ejecutados nunca obtendrán más que el% de tiempo de CPU en UNA CPU ; y creo que el% de uso de CPU que se obtiene con el sistema cmd d -cgtop está en todas las CPU del sistema.


Otra cosa que podrías intentar es ejecutar cpulimit como un demonio. No he probado esto; es solo una idea

Está en los repositorios de ubuntu:

sudo apt install cpulimit

Usa systemd si quieres. Esto debería limitar todas las instancias de dd al 20% de CPU.

[Unit] Description=dd CPU Limiter [Service] ExecStart=/usr/bin/cpulimit -e dd -l 20 [Install] WantedBy=multi-user.target

source