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:
NOMBRE
escribir: escribir en un descriptor de archivo
SINOPSIS
#incluir
ssize_t write (int fd, const void * buf, size_t count);
DESCRIPCIÓN
write () escribe para contar bytes desde la memoria intermedia apuntada al búfer en el archivo
referido por el descriptor de archivo fd. [..]
VALOR DEVUELTO
En caso de éxito, se devuelve el número de bytes escritos (cero indica
nada fue escrito). En caso de error, se devuelve -1 y se establece errno
apropiadamente.
[..]
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 descriptor fd
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.