sviluppo-web-qa.it

Quanti Switch di contesto è "normale" (in funzione dei core della CPU (o altro))?

Ciao Linux/UNIX Overlords,

Qualcuno di voi ha una regola empirica su quanti switch di contesto (per core del processore) è Normale su un server Linux?

Il mio college qui lo ha sollevato e sta vedendo 16K su un 8 core x86_64 macchina.

Ecco alcune statistiche di sarface negli ultimi giorni ...

testo alternativo http://src.autonomy.net.au/imagebin/81895e338fae67d3d205c09db44a81e6-Picture_10.png

E per vedere le statistiche di creazione del processo, ecco una vista logaritmica dello stesso grafico ...

testo alternativo http://src.autonomy.net.au/imagebin/7481f7e52bead4effc90248fc23c72fe-Picture_11.png

E gli 8 core sono annoiati a morte ...

testo alternativo http://src.autonomy.net.au/imagebin/0e94326652e977fd74edcd840f94200f-Picture_12.png

CS vs IOwait (scala x10000)

testo alternativo http://src.autonomy.net.au/imagebin/a52a2a8a120394849c0da4045933e306-Picture_13.png

Ulteriori informazioni inutili nel caso qualcuno chieda ..

  • La memoria su cui lavora il server è 0,5 TB SAN tramite FC
  • Ci sono 8 GB di RAM, principalmente cache - nessuno scambio.
37
Xerxes

Questo dipende molto dal tipo di applicazione che esegui. Se hai applicazioni che sono le scale di sistema WRT che sono molto stimolanti, 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 
 #Include 
 
 Ssize_t write (int fd, const void * buf, size_t count); 
 
 DESCRIPTION 
 write () scrive fino a contare i byte dal buffer buf puntato nel file 
 riferito dal descrittore di file fd. [..] 
 
 RETURN VALUE 
 In caso di successo, viene restituito il numero di byte scritti (zero indica che 
 Non è stato scritto). In caso di errore, viene restituito -1 e errno è impostato correttamente 
. 
 [..] 

Questo in pratica dice al kernel di subentrare nell'operazione dal processo, passare a count byte, a partire dall'indirizzo di memoria indicato da *buf al descrittore di file fd del processo corrente, quindi torna al processo e digli come è andata.

Un bell'esempio per mostrare questo è il server di gioco dedicato per i giochi basati su Valve Source, hlds . http://nopaste.narf.at/f1b22dbc9 mostra un syscall 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 rappresentata dai 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 esegue 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 annotazione su cosa sono switch di contesto e chiamate di sistema . Wikipedia ha informazioni generiche e una raccolta di collegamenti Nice sulle chiamate di sistema.

26
Michael Renner

il mio server web moderatamente caricato si trova a circa 100-150 switch al secondo il più delle volte con picchi in migliaia.

Le alte percentuali di cambio di contesto non sono esse stesse un problema, ma possono indicare la strada a un problema più significativo.

modifica: i cambi di contesto sono un sintomo, non una causa. Cosa stai cercando di eseguire sul server? Se si dispone di una macchina multiprocessore, è possibile provare a impostare l'affinità cpu per i processi del server principale.

In alternativa, se stai eseguendo X, prova a scendere in modalità console.

modifica di nuovo: a 16k cs al secondo, ogni CPU ha una media di due interruttori per millisecondo, ovvero da metà a un sesto della fascia oraria normale. Potrebbe eseguire molti IO thread associati?

modifica di nuovo post grafici: Sicuramente sembra IO associato. il sistema sta trascorrendo la maggior parte del suo tempo in SYS quando gli switch di contesto sono alti?

modifica ancora una volta: alto iowait e sistema nell'ultimo grafico - eclissando completamente lo spazio utente. Hai IO problemi.
Quale carta FC stai usando?

modifica: hmmm. qualsiasi possibilità di ottenere alcuni parametri di riferimento sul tuo SAN con bonnie ++ o dbench durante i tempi morti? Sarei interessato a vedere se hanno risultati simili.

modifica: ci ho pensato durante il fine settimana e ho visto schemi di utilizzo simili quando Bonnie sta eseguendo il passaggio "scrivi un byte alla volta". Ciò potrebbe spiegare la grande quantità di commutazione in corso, poiché ogni scrittura richiederebbe una scala di sistema separata.

7
jay_dubya

Cose come queste sono le ragioni per cui dovresti provare a mantenere le prestazioni di base per i tuoi server. In questo modo, puoi confrontare cose che noti all'improvviso con cose che hai registrato in passato.

Detto questo, ho server in esecuzione (principalmente server Oracle non molto occupati), che sono fissi intorno a 2k con alcuni picchi di 4k. Per i miei server, è normale, per i server di altre persone che potrebbero essere troppo bassi o troppo alti.

Quanto lontano puoi tornare indietro nei tuoi dati?

Che tipo di informazioni sulla CPU puoi fornirci?

1
wzzrd

Sono più propenso a preoccuparmi del tasso di occupazione della CPU dello stato del sistema. Se è vicino al 10% o più, ciò significa che il tuo sistema operativo impiega troppo tempo a fare i cambi di contesto. Anche se spostare alcuni processi su un altro computer è molto più lento, merita di farlo.

1
hashei

Non esiste una regola empirica. Un interruttore di contesto è solo la CPU che si sposta dall'elaborazione di un thread all'altro. Se esegui molti processi (o alcuni processi altamente threaded) vedrai più switch. Fortunatamente, non devi preoccuparti di quanti cambi di contesto ci sono: il costo è piccolo e più o meno inevitabile.

0
Alex J