Recientemente he estado tratando de entender los recursos compartidos de CPU y los límites de CPU después de ver que mi aplicación se estrangulaba en la CPU mientras se ejecutaba en Kubernetes. He leído muchos artículos, pero todavía tengo cierta confusión. Trataré de explicar mi entendimiento.
Recursos compartidos de CPU : los recursos compartidos de CPU son pesos relativos que definen cuánto tiempo de CPU puede obtener un proceso en particular si hay varios procesos ejecutables en el sistema .
Límites de CPU : en un período de tiempo definido (digamos 100 ms), cuál es la cuota (tiempo máximo) que un proceso puede ejecutar dentro de ese período. Una vez que el proceso agota su cuota, tiene que esperar al siguiente período y permanecerá limitado en el período existente incluso si se encuentra en estado ejecutable .
Supongamos una máquina de 1 CPU con procesos A y B en estado ejecutable con cuotas de CPU respectivas de 2048 y 1024 y sin límites de CPU establecidos. Según esto, cuando ambos procesos son ejecutables, el tiempo de la CPU se dividirá en una proporción de 2:1 y el proceso A se ejecutará el 66,66 % del tiempo (o 666 ms en 1 segundo) y el proceso B se ejecutará el 33,33 % del tiempo. (o 333 ms en 1 segundo).
Dado que un proceso en ejecución también puede entrar en un estado de espera (E/S de disco, E/S de red), el tiempo de espera en realidad se desperdiciaría y durante este tiempo si cualquier otro proceso en el sistema está en estado ejecutable y está esperando CPU , se le asignaría la CPU y se le permitiría ejecutarse.
En este caso, ¿se respetará la relación 2:1 de tiempo de CPU? Si es así, ¿cómo?
Las cuotas de CPU se denominan con frecuencia "límites flexibles". ¿Es porque si algún proceso que ha agotado su tiempo de CPU según las cuotas de CPU pero otro proceso que aún no ha agotado su CPU entra en un estado de espera y de repente hay una pérdida de ese tiempo de CPU asignado?
¿Cómo no puede establecer límites de CPU para los procesos privar a un proceso de tiempo de CPU si los recursos compartidos de CPU tienen el trabajo de asignar el tiempo de CPU para que no ocurra la inanición de CPU?