¿Cómo es posible cambiar la frecuencia de cambio de contexto de Linux (linaro, ubuntu, debian)?
Estoy de acuerdo en cambiar un sistema menos sensible por uno más eficiente.
EDITAR1: Tengo un proceso principal que quiero ejecutar lo más rápido posible (ciclos de reloj máximos por segundo), así que pensé en reducir la frecuencia de cambio de contexto (= aumentar el intervalo de tiempo). La pregunta es cómo hacerlo, y habría un efecto significativo. ¿Puedo calcular el costo del cambio de contexto? Es decir, si puedo aumentar el intervalo de tiempo en dos, ¿cuál será mi ganancia de rendimiento en% para el proceso principal que me interesa?
linux
linux-kernel
process
Nadav B
fuente
fuente
Respuestas:
Si su tarea es el único proceso que solicita tiempo en una CPU específica, no habrá cambios de contexto entre tareas :-). Pero la CPU aún puede ser interrumpida, causando un cambio de contexto en el núcleo y viceversa. Y una posible causa es el temporizador de prevención, que verifica si hay otra tarea para ejecutar en esta CPU ...
Linux puede evitar generar interrupciones de temporizador preventivo en la CPU cuando no haya razón para hacerlo. Ver
CONFIG_NO_HZ_FULL
. Para usar esta función, debe habilitarse cuando se compiló el núcleo y debe habilitarse mediante una opción de arranque.LWN.net dice "según Ingo Molnar, se ahorrará hasta el 1% del tiempo de la CPU" para las CPU de tics adaptativos. El documento del núcleo dice que esto tiene seis costos diferentes, y también hay una lista de "PROBLEMAS CONOCIDOS".
Esta ganancia es relativamente pequeña, particularmente en comparación con las ganancias potenciales de rendimiento de reducir la frecuencia de cambios de contexto entre múltiples tareas, como se menciona en esta respuesta: ¿Cómo cambiar la duración de los segmentos de tiempo utilizados por el programador de CPU de Linux?
Letra pequeña: estas medidas son anteriores a Spectre, Meltdown, KPTI y soporte ASID x86 :-(. Y supongo que también se aplican a hardware algo más antiguo. Pregúntele a un experto en kernel o ejecute sus propias mediciones sobre el costo de los cambios de contexto cambió en su versión y hardware específicos del kernel ... Se suponía que el PID era mitigado en gran medida por ASID, excepto por el software que llama al kernel con mucha frecuencia, el ejemplo principal son las bases de datos. Pero no entiendo bien los números .
La esperanza de Molnar en el parche RFC original era que con el tiempo, "probablemente será habilitado por la mayoría de las distribuciones de Linux". Noto que Fedora 28 proporciona un núcleo predeterminado construido con
NO_HZ_FULL
soporte. Debian 9 no lo hace, sin embargo.Más recientemente, Linux v4.17 elimina un tic de temporizador residual de 1 Hz de las
nohz_full
CPU . Me imagino que el efecto en el rendimiento es bastante pequeño :-), pero he estado tratando de seguir el estado de losNO_HZ_FULL
beneficios cuando hay múltiples procesos ejecutables en una CPU:Esto es un poco confuso ya que la preferencia ya comenzó a usar una marca separada más precisa en v2.6.25-rc1, commit 8f4d37ec073c, "sched: marca de preferencia de alta resolución" . Encontrado a través de este comentario en el mismo artículo de LWN.net: https://lwn.net/Articles/549754/ ).
fuente