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