Duda sobre las prioridades en Linux
-
Buenas.
Estoy haciendo cosas con el Ryzen 9 9900X (12 núcleos con SMT desactivado) y quiero priorizar procesos. He estado leyendo sobre el concepto de niceness en Linux que traducido como amabilidad, es bastante intuitivo (cuando más amable es el proceso, más deja pasar a los demás y cuando más incívico y maleducado, se cuela todo lo que puede). Tiene un valor de -20 (más prioritario) a 19 (menos prioritario). Nice lo he usado en el pasado y nunca he tenido problemas, pero al ver el comportamiento que veo ahora, he tenido que documentarme un poco. Aunque no encuentro una solución al tema.
En esta máquina se ejecutan tres tipos de procesos:
- ffpmeg que está configurado para acaparar un hilo de ejecución con un niceness de 19.
- whisper que está configurado para consumir 4 hilos con un niceness de 0.
- python que está configurado para consumir todos los hilos disponibles con un niceness de 19.
Esos valores de prioridad no son casuales: ffmpeg funciona muy rápido con esta CPU, por lo que no me importa que pueda consumir muy pocos recursos. whisper es bastante más demandante y quiero que consuma siempre todo lo que haya disponible. Y Python es muy demandante, pero sencillamente quiero que consuma lo que les sobra a los demás, compartiendo lo que sobre con ffmpeg.
Esta es una caputura de top:

Cuando también hay un proceso de ffmpeg y la CPU está ocupada, consume muy poca CPU (menos del 30%), que es lo que quiero que haga. Pero como veis en la imagen, python está consumiendo prácticamente 6 núcleos mientras que cada proceso de whisper no llega a 2. Y las prioridades, como se puede ver, están correctamente configuradas.
¿Por qué sucede esto y cómo lo podría solucionar?
Gracias.
-
Esto está mal a varios niveles. Estoy viendo que cuando python se está ejecutando, todo lo demás va lentísimo y viceversa. Por ejemplo, si hay un proceso de ffmpeg consumiendo un solo núcleo, la velocidad de python (consumiendo 11 en vez de 12 núcleos) cae en picado. Igual pasa al revés.
Sospecho que hay un cuello de botella importante con la memoria y esta no es precisamente lenta (6400MT/s 30-37-37-96 en dual channel). Pero es que el modelo de traducción se dedica a machacar 20GB de RAM, así que es normal que el equipo flaquee por ahí.
Lo que voy a hacer es hacer que python se pause automáticamente cuando vea que hay algún proceso de ffmpeg o whisper en marcha. Creo que es la forma más eficiente de hacerlo todo y de sacarle todo el jugo a la CPU.
Lo de las prioridades lo voy a olvidar ya que parece que el tema no va por ahí, aunque tengo curiosidad sobre por qué no hace caso.
-
@cobito Me parece super interesante pero no sabría como ayudarte... Pero sí que me surge una duda, ¿se podría usar la gráfica integrada RDNA2 para codificar en ffmpeg utilizando VAAPI? No sé si peertube lo permite y ni siquiera si es más eficiente que utilizar la fuerza bruta de la CPU, porque la gráfica integrada no es muy potente y yo la he usado para codificar OBS pero, claro, no a demasiado bitrate...
Nada, solo quería plantear esa duda pero que tampoco es que crea que es una buena opción...
