
Estoy ejecutando un servidor básico de Ubuntu con dos procesos: - proceso 1: realizo cálculos del 100% del tiempo de actividad y que uso para compartir la potencia informática con la comunidad (está ejecutando @ prio 19) - proceso 2: realizo cálculos durante 5 a 10 minutos, desde de vez en cuando, que uso para calcular por mí (está ejecutando @prio -19)
Quiero que el proceso 2 se proporcione con el 100% de la potencia informática (el proceso 1 en ese momento debería acercarse al 0% de la CPU).
Intenté usar nice/renice y el proceso 1 se da con el prio 19 (el más bajo posible) y el proceso 2 se da con el prio -19 (el más alto posible). Pero lo mejor que obtengo es el 50% de la CPU para el proceso 1 y el 50% de la CPU para el proceso 2 (verificado con htop), lo que me sorprendió un poco...
Ambos procesos son multiproceso y, cuando se ejecutan solos, consumen el 100% de todos los núcleos de la CPU. Ningún otro recurso (E/S, memoria, ancho de banda, ...) puede influir en este uso.
No quiero detener/iniciar manualmente ningún proceso cuando necesito potencia informática (ambos procesos deben estar ejecutándose todo el tiempo); El 100% de la CPU para el proceso 2 debe entregarse automáticamente.
¿Qué debo hacer para lograr mi objetivo? Gracias.
Respuesta1
Gracias a @ubfan1 he explorado diferentes estrategias de programación y este es el mejor resultado que he logrado hasta ahora:
El proceso 1 se está ejecutando con la política SCHED_BATCH.
El proceso 2 se está ejecutando con la política SCHED_RR.
resultados: cuando ambos procesos se ejecutan simultáneamente: - el proceso 1 se da con ca. 5% de la CPU - el proceso 2 se da con ca. 95% de la CPU
y cuando solo el proceso 1 está realizando cálculos (el proceso 2 está esperando mi entrada para iniciar los cálculos), el proceso 1 está usando el 100% de la CPU
Si a alguien le interesa más, lea esto: