
No puedo encontrar ninguna buena información sobre los kernels rt
de lowlatency
Linux.
Me pregunto por qué alguien lo haríanoQuiere utilizar un kernel de baja latencia.
Además, si alguien puede decir cuáles son las diferencias específicas, también sería genial.
Respuesta1
Las diferentes configuraciones, "genérica", "baja latencia" (como se configura en Ubuntu) y RT ("en tiempo real"), tienen como objetivo equilibrar el rendimiento frente a la latencia. Los núcleos genéricos favorecen el rendimiento sobre la latencia, los demás prefieren la latencia sobre el rendimiento. Por lo tanto, los usuarios que necesitan más rendimiento que baja latencia no elegirían un kernel de baja latencia.
En comparación con la configuración genérica, el kernel de baja latencia cambia las siguientes configuraciones:
- Las IRQ tienen subprocesos de forma predeterminada, lo que significa que se pueden agregar más IRQ (aún no).todoIRQ) se pueden adelantar y también se pueden priorizar y controlar la afinidad de su CPU;
- la preferencia está habilitada en todo el kernel (
CONFIG_PREEMPT
en lugar deCONFIG_PREEMPT_VOLUNTARY
); - eldepuración de latencialas herramientas están habilitadas para que el usuario pueda determinar qué operaciones del kernel están bloqueando el progreso;
- la frecuencia del temporizador está configurada en1000Hzen lugar de250Hz.
Los núcleos RT agreganuna serie de parchesal kernel principal y algunos ajustes de configuración más. El propósito de la mayoría de esos parches es permitir más oportunidades de preferencia, eliminando o dividiendo bloqueos, y reducir la cantidad de tiempo que el kernel dedica a manejar tareas ininterrumpibles (en particular, mejorando los mecanismos de registro y usándolos menos). . El objetivo de todo esto es permitir que el kernelcumplir con las fechas de entrega,es decirasegurarse de que, cuando se le requiera manejar algo, no esté ocupado haciendo otra cosa; Esto no es lo mismo que alto rendimiento o baja latencia, pero solucionar los problemas de latencia ayuda.
Los núcleos genéricos, configurados de forma predeterminada en la mayoría de las distribuciones, están diseñados para ser un compromiso "sensible": intentan garantizar que ninguna tarea pueda monopolizar el sistema durante demasiado tiempo y que las tareas puedan cambiar con una frecuencia razonable, pero sin comprometer el rendimiento. — porque cuanto más tiempo pasa el kernel considerando si cambiar de tarea (dentro o fuera del kernel) o manejando interrupciones, menos tiempo puede pasar el sistema en su conjunto "trabajando". Ese compromiso no es lo suficientemente bueno para cargas de trabajo sensibles a la latencia, como el procesamiento de audio o vídeo en tiempo real: para ellas, los núcleos de baja latencia proporcionan latencias más bajas a expensas de cierto rendimiento. Y para los requisitos en tiempo real, los núcleos en tiempo real eliminan tantos bloqueadores de baja latencia como sea posible, a expensas de un mayor rendimiento.
Las distribuciones principales de Linux se instalan principalmente en servidores, donde tradicionalmente la latencia no se ha considerado tan importante (aunque si realiza un análisis de rendimiento percentil y se preocupa por el rendimiento percentil superior, es posible que no esté de acuerdo), por lo que los núcleos predeterminados son bastante conservador. Los usuarios de escritorio probablemente deberían usar kernels de baja latencia, como lo sugiere la propia documentación del kernel. De hecho, cuanto más núcleos de baja latencia se utilicen, más comentarios habrá sobre su relevancia, lo que ayuda a obtener mejoras de aplicación general en las configuraciones predeterminadas del núcleo; Lo mismo ocurre con los kernels RT (muchos de los parches RT están destinados, en algún momento, al kernel principal).
Esta presentación sobre el tema.proporciona bastantes antecedentes.
Desde la versión 5.12 del kernel de Linux,“prevención dinámica”se puede habilitar; esto permite anular el modelo de preferencia predeterminado en la línea de comandos del kernel, utilizando elpreempt=
parámetro. Actualmente, esto admite none
(servidor), voluntary
(escritorio) y full
(escritorio de baja latencia).
Respuesta2
Stephen Kitt explicó las configuraciones y el equilibrio y todo bien en parámetros técnicos. Me gustaría ofrecer sólo una pequeña distinción intuitiva:
Estás de safari, recorriendo el terreno en un jeep. Tu presa está huyendo. Cuando la presa está en el punto de mira, aprietas el gatillo y el rifle dispara; el cálculo es simple: presa en el punto de mira=golpe, presa no en el punto de mira=falla; necesitas desesperadamentebaja latencia- luego te recuperas, recargas el rifle, encuentras otra presa - no hay necesidad de velocidad extra, no hay necesidad de regularidad.Latenciaes todo.
Estás convirtiendo un vídeo de ese safari. Es largo, lleva horas. No le importa cuándo se procesa un fotograma en particular y si algunos fotogramas tardan más en procesarse que otros. Necesitas terminar el proceso lo más rápido posible - mejorrendimientosignifica menos horas, nada más importa
Obtendrá telégrafo (solo cortos, largos y espacios). Morse es fácil de descifrar y no necesita saber exactamente cuándo comenzó o terminó cada pulso, pero necesita ungarantizar, eso que hacesNo se pierdacualquiera de ellos - necesitastiempo real(puede que sea lento, el telégrafo no es tan rápido, perodebe ser regular
En estos tres ejemplos, usted selecciona claramente solo uno delatencia,rendimientooregularidad, sacrificando otros dos, por razones obvias. Y sólo en uno realmente quieres baja latencia, si no puedes tener los tres al mismo tiempo.
Respuesta3
En términos sencillos:
- Si no le da trabajo a su PC con regularidad, entonces el kernel de baja latencia es para usted.
- Si constantemente asignas tareas intensivas a la CPU de tu PC, entonces el kernel genérico es para ti.
- Si utiliza su PC de forma casual para navegar, reproducir vídeos, música... entonces la baja latencia es para usted.
- Si estás jugando, la diferencia teórica entre baja latencia y genérico sería que la baja latencia ganaría en todos los escenarios excepto en uno; nivel de carga, pero esto depende más de si tiene un SSD o no, y de la calidad del SSD, porque su SSD básico funciona a una velocidad de 1X, mientras que su SSD PCI-Express más alto tiene una velocidad de 6X. Un disco duro tradicional tiene una velocidad de 0,1X. Entonces, sí, un SSD puede ser 60 veces más rápido que un disco duro tradicional.
Básicamente, el kernel genérico realiza la mayor parte del trabajo en el menor tiempo, mientras que el kernel de baja latencia hace que la PC tenga mejor capacidad de respuesta; suponiendo que no se encuentren errores en el kernel o el sistema.
Para la mayoría de las personas, el kernel de baja latencia tiene más sentido. Pero si siempre le estás dando mucho trabajo a tu PC, entonces el kernel genérico es para ti.
Otra forma de decirlo, si el 90% del tiempo la carga de su CPU en todos los núcleos es <60%, entonces el kernel de baja latencia es para usted. Si, por otro lado, la carga de su CPU en todos los núcleos es superior al 80%, 90% o más del tiempo, entonces el kernel genérico es para usted.
Prueba: ¿Qué kernel obtendría una mejor puntuación en un punto de referencia? Mientras se ignore la latencia como parámetro de referencia, lo genérico siempre gana la carrera, pero una latencia baja es como tener un pulpo a tu lado listo para delegar.
Respuesta4
Porque hay una compensación. Cambiar de proceso o entrar/salir de interrupciones lleva tiempo. Por ejemplo, ejecutar el programador a 1000 Hz en lugar de 250 Hz significa que tendrá una interrupción del temporizador y potencialmente cambiará los procesos cuatro veces más a menudo. Esto puede permitir que un proceso reaccione más rápido porque se le permite ejecutarse con mayor regularidad. Sin embargo, como humano probablemente no notarás ninguna diferencia (250 Hz significa cada 4 ms, lo que ya es mucho más rápido que cualquier tiempo de reacción humano).
La cantidad total de potencia de procesamiento o rendimiento de E/S es limitada y llamar al programador con más frecuencia sólo significa que desperdiciará una parte.