¿Existe alguna manera de realmente priorizar los procesos o hacer que Linux respete sus prioridades?

¿Existe alguna manera de realmente priorizar los procesos o hacer que Linux respete sus prioridades?

Sé que hay prioridades de proceso como en otros sistemas operativos, que van de -20 (mayor prioridad) a 19 (menos prioridad), pero Linux parece ignorarlas.

En este momento estaba construyendo el kernel en segundo plano (aunque makelos procesos tienen prioridad 0) y como me tomó bastante tiempo decidí mirar algo. Entonces abrí un video H264 bastante exigente (~30% del tiempo de CPU de un Core2 2.6GHz) en VLC solo para descubrir que había desgarros, pérdida de fotogramas y artefactos visuales (supongo que como resultado del anterior), aunque el audio parecía ser bien.

Entonces decidí cambiar la prioridad de uso de VLC renice, concretamente viendo que tenía PulseAudio -11decidí ponerlo a la par y así lo hice sudo renice -11 -p VLC_PROC_#.

Lo mismo siguió sucediendo, así que seguí y lo configuré en -20, pero seguía viendo artefactos visuales.

Entonces me pregunto, ¿por qué Linux en realidad no priorizó un proceso -20 sobre algunos procesos 0 y no le dio todo lo que necesitaba? ¿Existe alguna forma de priorizar realmente los procesos en Linux?

En caso de que sea importante, estoy ejecutando un Arch de 64 bits aquí, XFCE como entorno de escritorio.

EDITAR:Se realizó la compilación del kernel en /tmpla cual tengo tmpfssus fuentes y todas ya estaban en la RAM. El uso de RAM ni siquiera alcanzó el 60% y no se implementaron operaciones de paginación.

El escenario detallado anteriormente es sólo unacaso de prueba, Estoy más interesado en por qué Linux funcionó como lo hizo y si hay alguna manera de obtener prioridades reales.

Respuesta1

reniceafecta la prioridad de un proceso. Pero, como habrá experimentado, el hecho de que un proceso tenga mayor prioridad no implica que tendrá todos los recursos que necesita. Una prioridad más alta simplemente le da al proceso una mayor oportunidad de captar recursos.

renicesolo afecta el tiempo de CPU. Por lo tanto, solo tiene efecto si dos o más procesos compiten por el tiempo de CPU. Si el factor limitante no es el tiempo de CPU sino el ancho de banda de E/S, el valor agradable no tiene impacto. Tal vez en su caso la compilación esté usando mucho ancho de banda del disco y vlc no pueda leer los datos lo suficientemente rápido desde el disco. Intentarioniceen lugar o además de nice.

Si hace esto con frecuencia, obtendrá mejores resultados si el vídeo y la compilación están en discos separados. Además, puede obtener mejores resultados si carga previamente el vídeo en la caché del disco ( cat /path/to/video.file >/dev/nullo tail -c +456m | head -c 123m /path/to/video.file >/dev/nullsi lee 123 MB comenzando con un desplazamiento de 456 MB), pero a menos que tenga mucha RAM, es probable que la compilación reclame el espacio de la caché. Si quieres estar seguro de tener el vídeo en la memoria, crea un disco RAM y copia el vídeo en él.

Respuesta2

La prioridad del proceso no es lo único que entra en juego cuando intentas modificarexperiencia de usuario. Compilar el kernel requiere bastante E/S: mucha lectura/escritura desde/hacia archivos pequeños, lo que puede estirar bastante el sistema de archivos (hay una razón por la que a veces es necesario).utilizado como punto de referencia por derecho propio), especialmente en una máquina multiprocesador. Si tiene suficiente RAM, le sugiero que intente compilar el kernel en tmpfs, al menos en parte: coloque el árbol fuente allí (que efectivamente actuará como una búsqueda previa en el caché) o envíe la salida allí usando

make O=/dev/shm ...

o donde decida montar su tmpfsinstancia lo suficientemente grande como para contener los archivos de objetos del kernel (que pueden estar fácilmente en el rango de gigabytes).

Aparte de eso, también puedes comprobar si VLC tiene una función de almacenamiento en caché (supongo que sí, por ejemplo, MPlayer tiene la -cacheopción) con la que puedes solicitar el almacenamiento en caché de los datos internamente. Entonces no necesita obtener los datos cuando los necesita, sino cuando estén disponibles.

Otra cosa es que la visualización se realiza a través del servidor X; su prioridad también debería aumentarse (consulte el comentario de Wumpus Q. Wumbley debajo de la pregunta).

Dos opciones más son usar cgroups y/o el programador RT (para la primera ver, por ejemplocontrolar la prioridad de las aplicaciones utilizando cgroups, para este último véase, por ejemplo, elinstrucciones gentoo).

Lo último es que quizás quieras optimizar un poco tu sistema, desactivando servicios innecesarios. Personalmente, consideraría que PulseAudio es el indicado para empezar.

Sin embargo, lo que usted describe suena más como una E/S de alta prioridad. Supongo que experimentó un intercambio intenso. ¿Está seguro de que su tmpfs no se vio obligado a cambiarse? En ese caso me temo que al menos iorenice no será de mucha ayuda.

Respuesta3

Como han dicho otros, hay muchas partes de un sistema que pueden verse afectadas, incluido el ancho de banda de la memoria, y estas otras partes del sistema también tendrán su propia programación y prioridades.

Siempre puedes usar chrt -i 0para darle a la compilación una verdadera prioridad inactiva. http://linux.die.net/man/1/chrt

O acelera la compilación usando cgroups. http://kennystechtalk.blogspot.co.uk/2015/04/throttling-cpu-usage-with-linux-cgroups.html

O tirarle todo:

eatmydata cgexec -g cpu:throttled chrt -i 0 ionice -c3 nice -n19 /path/to/compile-script >/dev/null

Nota: nice -n19no debería hacer ninguna diferencia si chrt -i 0se usa, pero tampoco dañará nada.

Mi antiguo P4 puede hacer lo mismo sin que VLC se moleste.

información relacionada