Questo dipende molto dal tipo di applicazione che esegui. Se disponi di applicazioni che sono syscalls WRT molto felici di innescare, puoi aspettarti di vedere grandi quantità di cambio di contesto. Se la maggior parte delle applicazioni è inattiva e si riattiva solo quando si verificano problemi su un socket, è possibile che si verifichino basse velocità di commutazione del contesto.
Chiamate di sistema
Le chiamate di sistema causano cambi di contesto per loro stessa natura. Quando un processo fa una chiamata di sistema, in pratica dice al kernel di prendere il posto del momento e della memoria attuali per fare cose che il processo non ha il privilegio di fare e tornare allo stesso punto quando è fatto.
Quando guardiamo la definizione di syscall write (2) da Linux, questo diventa molto chiaro:
NOME
write - scrive su un descrittore di file
SINOSSI
#includere
ssize_t write (int fd, const void * buf, size_t count);
DESCRIZIONE
write () scrive fino a contare i byte dal buf puntato al buffer nel file
a cui fa riferimento il descrittore di file fd. [..]
VALORE DI RITORNO
In caso di successo, viene restituito il numero di byte scritti (zero indica
non è stato scritto nulla). In caso di errore, viene restituito -1 e viene impostato errno
appropriatamente.
[..]
Questo in sostanza dice al kernel di riprendere l'operazione dal processo, passare ai count
byte, a partire dall'indirizzo di memoria indicato dal *buf
descrittore fd
di file del processo corrente e quindi tornare al processo e dirgli come è andato.
Un bell'esempio per dimostrarlo è il server di gioco dedicato per i giochi basati su Valve Source, hlds . http://nopaste.narf.at/f1b22dbc9 mostra un syscalls del valore di un secondo eseguito da una singola istanza di un server di gioco che non aveva giocatori. Questo processo richiede circa il 3% del tempo CPU su un Xeon X3220 (2.4Ghz), solo per darti un'idea di quanto sia costoso.
Multitasking
Un'altra fonte di cambio di contesto potrebbe essere i processi che non eseguono i syscall, ma devono essere spostati da una determinata CPU per fare spazio ad altri processi.
Un bel modo per visualizzarlo è cpuburn . cpuburn non fa alcun syscalls in sé, scorre solo sulla propria memoria, quindi non dovrebbe causare alcun cambio di contesto.
Prendi una macchina inattiva, avvia vmstat ed esegui un burnMMX (o qualsiasi altro test dal pacchetto cpuburn) per ogni core della CPU che ha il sistema. A quel punto dovresti avere un pieno utilizzo del sistema ma quasi nessun aumento del cambio di contesto. Quindi prova ad avviare qualche altro processo. Vedrai che la velocità di commutazione del contesto aumenta man mano che i processi iniziano a competere sui core della CPU. La quantità di commutazione dipende dal rapporto processi / core e dalla risoluzione multitasking del kernel.
Ulteriori letture
linfo.org ha una bella descrizione di quali sono gli switch di contesto e le chiamate di sistema . Wikipedia ha informazioni generiche e una bella raccolta di collegamenti sulle chiamate di sistema.