Perché i server non funzionano sempre al massimo?


12

Questa è una domanda che mi ha infastidito per un po 'e non riesco a trovare nulla online che ne parli. Ho un server che esegue VMware Hypervisor ESXi. Quando avvio su macchine virtuali, di solito impiegano 2-3 minuti per avviarsi; non un tempo terribilmente lungo, ma non istantaneo. Tuttavia, quando guardo i registri delle prestazioni sul server, nessuno dei due processori, RAM o utilizzo del disco è di circa il 100%; di solito hanno una media di circa il 60% -80% Quindi se il server ha del lavoro da fare, perché non lo fa al 100%?

Mi sembra che in qualsiasi momento, il componente che sta limitando le prestazioni dovrebbe funzionare al 100%. Ad esempio, se ho un disco rigido molto lento, dovrebbe quasi sempre funzionare al 100%. Pertanto, almeno una delle aree (processore, RAM, disco e rete) dovrebbe essere sempre al 100%, a meno che il server non sia completamente inattivo.

Perché non è così?


Le vecchie distribuzioni Linux, non basate su systemd, non potevano parallelizzare in modo efficiente l'avvio. I * BSD ne soffrono ancora. Avvia una moderna distribuzione Linux e vedi come differisce.
Michael Hampton

Risposte:


18

La latenza sarà una delle ragioni. Il ritardo tra "il disco mi dà questi dati di cui ho bisogno prima di poter fare qualsiasi altra cosa" e il tempo in cui i dati tornano lasceranno la CPU inattiva per quel tempo.

Le risorse probabilmente funzionano al 100%, ma per periodi molto brevi. L'avvio di un sistema operativo seguirà il modello generale di "elaborare o decidere qualcosa, recuperare qualcosa dal disco, fare qualcosa in memoria, fare qualcosa con un dispositivo", ripetendo più volte al secondo. Quindi, quando vedi un disco al 25% in un periodo di 2 secondi, ciò significa probabilmente che era in esecuzione al 100% per 0,5 secondi, quindi resta inattivo per il resto del tempo.

Come sottolineato da EEAA, i sistemi multicore lo rendono un po 'più complesso. Un singolo software con thread su una CPU in grado di eseguire quattro thread può raggiungere il 25% solo alla massima velocità. Anche il software multithread può raramente raggiungere il 100%, poiché i dati devono fluire (di solito) dal disco rigido, alla RAM, alla cache, alla CPU. Mantenere piena la pipeline è difficile e tende ad accadere principalmente con carichi di lavoro prevedibili come la codifica video. In questo caso il sistema operativo può osservare i modelli di lettura e recuperare i dati prima che siano necessari, inserendoli nelle cache appropriate, come la cache del disco nella RAM.


16

Ci stai pensando in un modo molto semplicistico, il che ti sta facendo fare delle ipotesi errate, che proverò a chiarire.

Innanzitutto, e potenzialmente più semplicemente, su un sistema multicore, al fine di comprendere l'utilizzo della CPU, è necessario tenere conto del fatto che il carico di processo sia multithread o meno e progettato per sfruttare più core. In caso contrario, a seconda del mix di processi in esecuzione, è possibile che non venga mai visualizzato il 100% di utilizzo. Mai.

In secondo luogo, è necessario considerare le prestazioni dell'IO Device. Come fa il tuo sistema a sapere, ad esempio, quanti IOps sono in grado di supportare i tuoi dispositivi? Non Una metrica più significativa da osservare è il iowaitvalore durante l'avvio (che può essere difficile da ottenere durante il processo di avvio) o le code / latenza del disco durante l'avvio (che dovrebbe essere più facile da ottenere dall'hypervisor). Se vedi code o picchi di latenza, è probabile che i tuoi IO Device siano un fattore che contribuisce ai tuoi problemi di prestazioni.


11

Lavoro con il server da circa 20 anni, di solito non è una buona cosa quando un componente funziona sempre al 100%.

Ad esempio, supponiamo che tu abbia un database SQL che non desideri scambiare su disco ma che desideri invece esaurire completamente la memoria.

Se il tuo database ha 24 GB e il sistema operativo ha bisogno di 8 GB, non vorresti allocare solo 32 GB di RAM per la macchina, ci sono molte "cose" che possono andare storte, codice errato, DDOS, utilizzo intenso delle applicazioni, chissà, non avendo spazio per la testa come sapresti che il server è in difficoltà?

Abbiamo circa 2000 server nel nostro data center, ci piace vederli tutti in esecuzione con circa il 75% di CPU e RAM, lo spazio hhd è sulla nostra SAN, quindi una sfera di cera completamente diversa. Abbiamo anche avvisi per segnalarci quando colpiscono l'85% di CPU o RAM e allarmi per segnalarci quando colpiscono il 90%.


Penso che tu sia un po 'fuori strada qui. Ho detto che sto eseguendo macchine virtuali, quindi esiste un carico coerente che è molto diverso da un server di database, che viene eseguito quando riceve richieste e alloca le risorse. Ero più preoccupato di qualunque sia il fattore limitante delle prestazioni, non del modo in cui tali risorse sono allocate. Ma grazie per la risposta!
Kernel Stearns,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.