Quando parli di prestazioni su un server, ci sono alcuni modi diversi di vederle. C'è il tempo di risposta apparente (simile alla latenza di rete) e la velocità effettiva (simile alla larghezza di banda della rete).
Alcune versioni di Windows Server vengono fornite con impostazioni di alimentazione bilanciata abilitate per impostazione predefinita. Come ha sottolineato Jeff. Windows 2008 R2 è uno di questi. Al giorno d'oggi pochissime CPU sono single core, quindi questa spiegazione si applica a quasi tutti i server Windows in cui ti imbatterai ad eccezione delle VM single-core. (più su quelli più tardi).
Quando il piano di alimentazione bilanciata è attivo, la CPU tenta di ridurre la quantità di energia utilizzata. Il modo in cui lo fa è disabilitando metà dei core della CPU in un processo noto come "parcheggio". Solo la metà delle CPU sarà disponibile alla volta, quindi consuma meno energia durante i periodi di traffico ridotto. Questo non è un problema in sé e per sé.
Ciò che è un problema è il fatto che quando le CPU non sono parcheggiate, hai raddoppiato i cicli di CPU disponibili disponibili per il sistema e improvvisamente sbilanciato il carico sul sistema, portandolo (per esempio) dal 70% di utilizzo al 35% di utilizzo. Il sistema lo guarda e dopo che lo scoppio del traffico è stato elaborato, pensa "Ehi, dovrei ricominciare un po 'per risparmiare energia". E così fa.
Ecco la parte cattiva. Al fine di prevenire una distribuzione irregolare di calore ed energia all'interno dei core della CPU, tende a parcheggiare le CPU che non sono state parcheggiate di recente. E affinché funzioni correttamente, la CPU deve scaricare tutto dai registri CPU (cache L1, L2 e L3) in un'altra posizione (molto probabilmente memoria principale).
Come esempio ipotetico, supponiamo che tu abbia una CPU a 8 core con C1-C8.
- Attivo: C1, C3, C5, C7
- Parcheggiato: C2, C4, C6, C8
Quando ciò accade, tutti diventano attivi per un certo periodo di tempo, quindi il sistema li parcheggerà come segue:
- Attivo: C2, C4, C6, C8
- Parcheggiato: C1, C3, C5, C7
Ma nel fare ciò, c'è una buona quantità di overhead associato con lo svuotamento di tutti i dati dalla cache L1-L3 per far sì che ciò accada in modo che non accadano strani errori ai programmi che sono stati scaricati dalla pipeline della CPU.
Probabilmente c'è un nome ufficiale per questo, ma mi piace spiegarlo come un thrashing della CPU. Fondamentalmente, i processori stanno impiegando più tempo a lavorare intensamente spostando i dati internamente di quanto non stiano rispondendo alle richieste di lavoro.
Se si dispone di qualsiasi tipo di applicazione che richiede bassa latenza per le sue richieste, è necessario disabilitare le impostazioni di Potenza bilanciata. Se non sei sicuro che si tratti di un problema, procedi come segue:
- Apri il "Task Manager"
- Fai clic sulla scheda "Prestazioni".
- Fai clic su "Apri monitoraggio risorse"
- Seleziona la scheda "CPU"
- Guarda sul lato destro della finestra le varie CPU.
Se vedi qualcuno di loro parcheggiato, noterai che metà di loro sono parcheggiati in un dato momento, si accenderanno tutti e poi l'altra metà verrà parcheggiata. Si alterna avanti e indietro. Pertanto, le CPU di sistema si stanno schiantando.
Macchine virtuali: questo problema è ancora peggiore quando si esegue una macchina virtuale perché c'è l'overhead aggiuntivo dell'hypervisor. In generale, affinché una VM possa funzionare, l'hardware deve disporre di uno slot nel tempo disponibile per ciascuno dei core in ciascuna sezione temporale.
Se si dispone di un componente hardware di 16 core, è possibile eseguire VM utilizzando più di 16 core totali ma per ogni intervallo di tempo, solo un massimo di 16 CPU virtuali saranno idonee per tale intervallo di tempo e l'hypervisor deve adattarsi a tutti i core di una VM in quella fascia oraria. Non può essere distribuito su più intervalli di tempo. (Un timeslice è essenzialmente un insieme di cicli CPU X. Potrebbe essere 1000 o potrebbe essere 100k cicli)
Es: 16 core hardware con 8 VM. 6 hanno 4 CPU virtuali (4C) e 2 hanno 8 CPU virtuali (8C).
Timeslice 1: 4x4C Timeslice 2: 2x8C Timeslice 3: 2x4C + 1x8C Timeslice 4: 1x8C + 2x4C
Ciò che l'hypervisor non può fare è dividere la metà dell'assegnazione per un timeslice alle prime 4 CPU di una VM 8 vCPU e quindi al successivo timeslice, dare il resto alle altre 4 vCPU di quella VM. È tutto o niente in un intervallo.
Se si utilizza Hyper-V di Microsoft, le impostazioni di controllo dell'alimentazione potrebbero essere abilitate nel sistema operativo host, il che significa che si propagherà ai sistemi client, incidendo così anche su di essi.
Una volta che vedi come funziona, è facile vedere come l'utilizzo delle impostazioni di Controllo alimentazione bilanciata causi problemi di prestazioni e server lenti. Uno dei problemi sottostanti è che la richiesta in arrivo deve attendere il completamento del processo di parcheggio / sblocco della CPU prima che il server sia in grado di rispondere alla richiesta in arrivo, che si tratti di una query del database, di una richiesta del server Web o altro .
A volte, il sistema parcheggerà o annullerà il parcheggio delle CPU nel mezzo di una richiesta. In questi casi, la richiesta verrà avviata nella pipeline della CPU, verrà scaricata da essa e quindi un diverso core della CPU prenderà il processo da lì. Se si tratta di una richiesta abbastanza pesante, ciò potrebbe accadere più volte nel corso della richiesta, cambiando quella che avrebbe dovuto essere una query di database di 5 secondi in una query di database di 15 secondi.
La cosa più grande che vedrai dall'utilizzo di Balanced Power è che i sistemi si sentiranno più lenti a rispondere a quasi tutte le richieste che fai.