Hola Overlords Linux / UNIX,
¿Alguno de ustedes tiene una regla general sobre cuántos cambios de contexto (por núcleo de procesador) es Normal en un servidor Linux?
Mi universidad aquí lo mencionó, y él está viendo 16K en una x86_64
máquina de 8 núcleos .
Aquí hay algunas estadísticas de sarface en los últimos días ...
Y para ver las estadísticas de creación de procesos, aquí hay una vista logarítmica del mismo gráfico ...
Y los 8 núcleos están aburridos de morir ...
CS vs IOwait (escala x10000)
Más información inútil en caso de que alguien pregunte.
- El almacenamiento en el que trabaja el servidor es una SAN de 0.5 TB a través de FC
- Hay 8 GB de RAM, principalmente caché, sin intercambio.
linux
performance
context-switch
Jerjes
fuente
fuente
Respuestas:
Esto depende mucho del tipo de aplicación que ejecute. Si tiene aplicaciones que son llamadas de sistema WRT muy fáciles de activar, puede esperar ver grandes cantidades de cambio de contexto. Si la mayoría de sus aplicaciones están inactivas y solo se activan cuando ocurren cosas en un socket, puede esperar ver bajas tasas de cambio de contexto.
Sistema de llamadas
Las llamadas al sistema provocan cambios de contexto por su propia naturaleza. Cuando un proceso realiza una llamada al sistema, básicamente le dice al kernel que se haga cargo de su punto actual de tiempo y memoria para hacer cosas que el proceso no tiene el privilegio de hacer, y que regrese al mismo lugar cuando haya terminado.
Cuando miramos la definición de syscall write (2) desde Linux, esto queda muy claro:
Básicamente, esto le dice al kernel que se haga cargo de la operación del proceso, se mueva a
count
bytes, comenzando desde la dirección de memoria señalada por*buf
el descriptorfd
de archivo del proceso actual y luego regrese al proceso y dígale cómo fue.Un buen ejemplo para mostrar esto es el servidor de juegos dedicado para juegos basados en Valve Source, hlds . http://nopaste.narf.at/f1b22dbc9 muestra un segundo valor de syscalls realizadas por una sola instancia de un servidor de juegos que no tenía jugadores. Este proceso requiere aproximadamente un 3% de tiempo de CPU en un Xeon X3220 (2.4Ghz), solo para darle una idea de lo caro que es.
Multitarea
Otra fuente de cambio de contexto podrían ser los procesos que no realizan llamadas al sistema, pero que necesitan moverse de una CPU determinada para dejar espacio para otros procesos.
Una buena manera de visualizar esto es cpuburn . cpuburn no hace ninguna llamada al sistema, solo itera sobre su propia memoria, por lo que no debería causar ningún cambio de contexto.
Tome una máquina inactiva, inicie vmstat y luego ejecute un burnMMX (o cualquier prueba diferente del paquete cpuburn) para cada núcleo de CPU que tenga el sistema. Debería tener una utilización completa del sistema para entonces, pero casi ningún cambio de contexto aumentado. Luego intente iniciar algunos procesos más. Verá que la velocidad de cambio de contexto aumenta a medida que los procesos comienzan a competir por los núcleos de la CPU. La cantidad de conmutación depende de la relación procesos / núcleo y la resolución multitarea de su núcleo.
Otras lecturas
linfo.org tiene un buen resumen de los cambios de contexto y las llamadas al sistema . Wikipedia tiene información genérica y una buena colección de enlaces sobre llamadas del sistema.
fuente
System calls cause context switches by their very own nature
parece incorrecta. Las llamadas del sistema causan el cambio de modo como lo indica linfo.org/context_switch.htmlmi servidor web moderadamente cargado se encuentra entre 100 y 150 conmutadores por segundo la mayor parte del tiempo con picos de miles.
Las altas tasas de cambio de contexto no son en sí mismas un problema, pero pueden señalar el camino a un problema más significativo.
editar: los cambios de contexto son un síntoma, no una causa. ¿Qué intentas ejecutar en el servidor? Si tiene una máquina multiprocesador, puede intentar configurar la afinidad de la CPU para los procesos del servidor principal.
Alternativamente, si está ejecutando X, intente desplegarse en modo consola.
edite de nuevo: a 16k cs por segundo, cada CPU tiene un promedio de dos interruptores por milisegundo, es decir, entre la mitad y la sexta parte del intervalo de tiempo normal. ¿Podría estar ejecutando una gran cantidad de hilos IO?
editar nuevamente publicar gráficos: Ciertamente se ve obligado a IO. ¿El sistema pasa la mayor parte de su tiempo en SYS cuando los cambios de contexto son altos?
edite una vez más: Alto iowait y sistema en ese último gráfico, eclipsando por completo el espacio del usuario. Tienes problemas de IO.
¿Qué tarjeta FC estás usando?
editar: hmmm. ¿Alguna posibilidad de obtener algunos puntos de referencia en su acceso SAN con bonnie ++ o dbench durante el tiempo muerto? Me interesaría ver si tienen resultados similares.
editar: He estado pensando en esto durante el fin de semana y he visto patrones de uso similares cuando Bonnie está haciendo el pase "escribir un byte a la vez". Eso puede explicar la gran cantidad de conmutación que está ocurriendo, ya que cada escritura requeriría una llamada al sistema por separado.
fuente
Estoy más inclinado a preocuparme por la tasa de ocupación de CPU del estado del sistema. Si está cerca del 10% o más, eso significa que su sistema operativo está pasando demasiado tiempo haciendo los cambios de contexto. Aunque mover algunos procesos a otra máquina es mucho más lento, merece hacerlo.
fuente
Cosas como esta son las razones por las que debería intentar mantener las líneas de base de rendimiento para sus servidores. De esa manera, puedes comparar cosas que notas de repente con cosas que has grabado en el pasado.
Dicho esto, tengo servidores en ejecución (servidores Oracle no muy ocupados, principalmente), que son constantes alrededor de 2k con algunos picos de 4k. Para mis servidores, eso es normal, para los servidores de otras personas que pueden ser demasiado bajos o demasiado altos.
¿Hasta dónde puede retroceder en sus datos?
¿Qué tipo de información de CPU nos puede dar?
fuente
No hay una regla general. Un cambio de contexto es solo la CPU que pasa de procesar un hilo a otro. Si ejecuta muchos procesos (o algunos procesos altamente enhebrados) verá más interruptores. Afortunadamente, no necesita preocuparse por la cantidad de cambios de contexto que existen: el costo es pequeño y más o menos inevitable.
fuente