Identifica i colli di bottiglia delle prestazioni di Linux utilizzando strumenti open source
Non molto tempo fa, l’identificazione dei colli di bottiglia hardware richiedeva competenze approfondite. Gli odierni monitor delle prestazioni della GUI open source lo rendono piuttosto semplice.
I computer sono sistemi integrati che funzionano alla stessa velocità del loro componente hardware più lento. Se un componente è meno potente degli altri, ovvero resta indietro e non riesce a tenere il passo, può rallentare l'intero sistema. Questo è un collo di bottiglia nelle prestazioni. La rimozione di un serio collo di bottiglia può far volare il tuo sistema.
Questo articolo spiega come identificare i colli di bottiglia hardware nei sistemi Linux. Le tecniche si applicano sia ai personal computer che ai server. La mia enfasi è sui PC: non tratterò i colli di bottiglia specifici dei server in aree come la gestione LAN o i sistemi di database. Questi spesso coinvolgono strumenti specializzati.
Inoltre non parlerò molto delle soluzioni. Questo è un argomento troppo vasto per questo articolo. Invece, scriverò un articolo di follow-up con modifiche alle prestazioni.
Utilizzerò solo strumenti di interfaccia utente grafica (GUI) open source per portare a termine il lavoro. La maggior parte degli articoli sui colli di bottiglia di Linux sono piuttosto complicati. Usano comandi specializzati e approfondiscono i dettagli arcani.
Gli strumenti GUI offerti dall'open source semplificano l'identificazione di molti colli di bottiglia. Il mio obiettivo è offrirti un approccio semplice e veloce che puoi utilizzare ovunque.
Dove iniziare
Un computer è costituito da sei risorse hardware chiave:
- Processori
- Memoria
- Magazzinaggio
- Porte USB
- connessione internet
- Processore grafico
Se una risorsa dovesse funzionare male, potrebbe creare un collo di bottiglia nelle prestazioni. Per identificare un collo di bottiglia, è necessario monitorare queste sei risorse.
L'open source offre una miriade di strumenti per svolgere il lavoro. Utilizzerò GNOME System Monitor. Il suo output è facile da capire e puoi trovarlo nella maggior parte dei repository.
Avvialo e fai clic sulla scheda Risorse. È possibile identificare subito molti problemi di prestazioni.
Fig. 1. Monitor di sistema rileva i problemi (Howard Fosdick, CC BY-SA 4.0)
Il pannello Risorse mostra tre sezioni: Cronologia CPU, Cronologia memoria e swap e Cronologia rete. Una rapida occhiata ti dice immediatamente se i tuoi processori sono sovraccarichi, se il tuo computer ha esaurito la memoria o se stai utilizzando tutta la larghezza di banda Internet.
Esplorerò questi problemi di seguito. Per ora, controlla prima il Monitor di sistema quando il tuo computer rallenta. Ti informa immediatamente sui problemi di prestazioni più comuni.
Esploriamo ora come identificare i colli di bottiglia in aree specifiche.
Come identificare i colli di bottiglia del processore
Per individuare un collo di bottiglia, devi prima sapere quale hardware possiedi. L'open source offre diversi strumenti a questo scopo. Mi piace HardInfo perché i suoi schermi sono facili da leggere ed è molto popolare.
Avvia HardInfo. Il pannello Computer -> Riepilogo identifica la tua CPU e ti informa sui suoi core, thread e velocità. Identifica anche la scheda madre e altri componenti del computer.
Fig. 2. HardInfo mostra i dettagli dell'hardware (Howard Fosdick, CC BY-SA 4.0)
HardInfo rivela che questo computer ha un chip CPU fisico. Quel chip contiene due processori o core. Ogni core supporta due thread o processori logici. Si tratta di un totale di quattro processori logici, esattamente ciò che è stato mostrato nella sezione Cronologia CPU di System Monitor in Fig. 1.
Un collo di bottiglia del processore si verifica quando i processori non possono rispondere alle richieste di tempo. Sono già occupati.
È possibile identificare questo problema quando Monitor di sistema mostra un utilizzo del processore logico superiore all'80% o al 90% per un periodo prolungato. Ecco un esempio in cui tre dei quattro processori logici sono sommersi al 100% di utilizzo. Questo è un collo di bottiglia perché non lascia molta CPU per qualsiasi altro lavoro.
Fig. 3. Un collo di bottiglia del processore (Howard Fosdick, CC BY-SA 4.0)
Quale app causa il problema?
Devi scoprire quali programmi stanno consumando tutta quella CPU. Fai clic sulla scheda Processi di Monitor di sistema. Quindi fai clic sull'intestazione % CPU per ordinare i processi in base alla quantità di CPU che consumano. Vedrai quali app stanno limitando il tuo sistema.
Fig. 4. Identificazione dei processi illeciti (Howard Fosdick, CC BY-SA 4.0)
I primi tre processi consumano ciascuno il 24% della risorsa totale della CPU. Poiché sono presenti quattro processori logici, ciò significa che ciascuno consuma un intero processore. Questo è proprio come mostra la Fig. 3.
Il pannello Processi identifica un programma denominato analytical_AI come colpevole. Puoi fare clic con il pulsante destro del mouse su di esso nel pannello per visualizzare maggiori dettagli sul consumo di risorse, incluso l'uso della memoria, i file aperti, i dettagli di input/output e altro ancora.
Se il tuo login ha privilegi di amministratore, puoi gestire il processo. Puoi modificarne la priorità e interromperlo, continuarlo, terminarlo o eliminarlo. Quindi, potresti risolvere immediatamente il tuo collo di bottiglia qui.
Fig. 5. Fai clic con il pulsante destro del mouse su un processo per gestirlo (Howard Fosdick, CC BY-SA 4.0)
Come risolvere i colli di bottiglia dell'elaborazione? Oltre a gestire il processo illecito in tempo reale, potresti evitare che si verifichi il collo di bottiglia. Ad esempio, potresti sostituire l'autore del reato con un'altra app, aggirare il problema, modificare il tuo comportamento quando usi quell'app, programmare l'app per gli orari non lavorativi, risolvere un problema di memoria sottostante, modificare le prestazioni dell'app o del software di sistema o eseguire l'aggiornamento il tuo hardware. È troppo da trattare qui, quindi esplorerò queste opzioni nel mio prossimo articolo.
Colli di bottiglia comuni del processore
Incontrerai diversi colli di bottiglia comuni durante il monitoraggio delle CPU con System Monitor.
A volte un processore logico presenta un collo di bottiglia mentre tutti gli altri sono a basso utilizzo. Ciò significa che hai un'app che non è codificata in modo sufficientemente intelligente da sfruttare più di un processore logico e ha esaurito quello che sta utilizzando. L'app richiederà più tempo per essere completata rispetto a quanto impiegherebbe se utilizzasse più processori. D'altra parte, almeno lascia gli altri processori liberi per altri lavori e non prende il controllo del computer.
Potresti anche vedere un processore logico bloccato per sempre al 100% di utilizzo. O è molto occupato oppure un processo è bloccato. Il modo per capire se è bloccato è se il processo non esegue mai alcuna attività del disco (come verrà mostrato nel pannello Processi di Monitor di sistema).
Infine, potresti notare che quando tutti i tuoi processori hanno un collo di bottiglia, anche la tua memoria è completamente utilizzata. Le condizioni di memoria insufficiente a volte causano colli di bottiglia del processore. In questo caso, vuoi risolvere il problema di memoria sottostante, non il problema sintomatico della CPU.
Come identificare i colli di bottiglia della memoria
Data la grande quantità di memoria dei PC moderni, i colli di bottiglia della memoria sono molto meno comuni di quanto lo fossero in passato. Tuttavia puoi comunque incontrarli se esegui programmi ad uso intensivo di memoria, soprattutto se hai un computer che non contiene molta memoria ad accesso casuale (RAM).
Linux utilizza la memoria sia per i programmi che per memorizzare nella cache i dati del disco. Quest'ultimo accelera l'accesso ai dati del disco. Linux può recuperare quella memoria ogni volta che ne ha bisogno per l'utilizzo del programma.
Il pannello Risorse del Monitor di sistema mostra la memoria totale e la quantità di essa utilizzata. Nel pannello Processi puoi visualizzare l'utilizzo della memoria da parte dei singoli processi.
Ecco la parte del pannello Risorse di Monitor di sistema che tiene traccia dell'utilizzo complessivo della memoria:
Fig. 6. Un collo di bottiglia della memoria (Howard Fosdick, CC BY-SA 4.0)
A destra di Memory, noterai Swap. Questo è lo spazio su disco che Linux utilizza quando la memoria è insufficiente. Scrive memoria su disco per continuare le operazioni, utilizzando effettivamente lo swap come estensione più lenta della RAM.
I due problemi di prestazioni della memoria a cui dovrai prestare attenzione sono:
- La memoria sembra ampiamente utilizzata e si nota un'attività frequente o crescente nello spazio di swap.
- Sia la memoria che lo swap sono in gran parte utilizzati.
La situazione 1 significa prestazioni più lente perché lo scambio è sempre più lento della memoria. Se lo consideri un problema di prestazioni dipende da molti fattori (ad esempio, quanto è attivo il tuo spazio di swap, la sua velocità, le tue aspettative, ecc.). La mia opinione è che qualcosa di più del semplice utilizzo dello scambio di token sia inaccettabile per un personal computer moderno.
La situazione 2 è quella in cui sia la memoria che lo swap sono ampiamente utilizzati. Si tratta di un collo di bottiglia della memoria. Il computer non risponde. Potrebbe anche cadere in uno stato di disastro, in cui non fa altro che gestire la memoria.
La Fig. 6 sopra mostra un vecchio computer con solo 2 GB di RAM. Quando l'utilizzo della memoria ha superato l'80%, il sistema ha iniziato a scrivere per lo scambio. La reattività è diminuita. Questa schermata mostra un utilizzo della memoria superiore al 90% e il computer è inutilizzabile.
La risposta definitiva ai problemi di memoria è usarne meno o acquistarne di più. Discuterò le soluzioni nel mio articolo successivo.
Come identificare i colli di bottiglia dello storage
Lo storage oggi è disponibile in diverse varietà di dischi rigidi a stato solido e meccanici. Le interfacce del dispositivo includono PCIe, SATA, Thunderbolt e USB. Indipendentemente dal tipo di archiviazione di cui disponi, utilizza la stessa procedura per identificare i colli di bottiglia del disco.
Inizia con Monitor di sistema. Il pannello Processi mostra le velocità di input/output per i singoli processi. In questo modo puoi identificare rapidamente quali processi stanno eseguendo la maggior parte di I/O su disco.
Ma lo strumento non mostra la velocità di trasferimento dati aggregata per disco. È necessario visualizzare il carico totale su un disco specifico per determinare se quel disco rappresenta un collo di bottiglia dello storage.
Per fare ciò, usa il comando intop. È disponibile nella maggior parte dei repository Linux.
Basta digitare in cima
al prompt della riga di comando. L'output seguente mostra che il dispositivo sdb
è occupato al 101%
. Chiaramente, ha raggiunto il limite di prestazioni e sta limitando la velocità con cui il tuo sistema può portare a termine il lavoro.
Fig. 7. Il comando atop identifica un collo di bottiglia del disco (Howard Fosdick, CC BY-SA 4.0)
Nota che una delle CPU è in attesa sul disco di svolgere il suo lavoro l'85% delle volte (cpu001 w 85%
). Questo è tipico quando un dispositivo di archiviazione diventa un collo di bottiglia. In effetti, molti guardano prima alle attese di I/O della CPU per individuare i colli di bottiglia dello storage.
Quindi, per identificare facilmente un collo di bottiglia dello storage, utilizza il comando atop
. Quindi utilizza il pannello Processi su Monitor di sistema per identificare i singoli processi che causano il collo di bottiglia.
Come identificare i colli di bottiglia della porta USB
Alcune persone usano le porte USB tutto il giorno. Tuttavia, non controllano mai se tali porte vengono utilizzate in modo ottimale. Sia che colleghi un disco esterno, una memory stick o qualcos'altro, ti consigliamo di verificare di ottenere le massime prestazioni dai tuoi dispositivi collegati tramite USB.
Questo grafico mostra il perché. Le potenziali velocità di trasferimento dati USB variano enormemente.
Fig. 8. Le velocità USB variano molto (Howard Fosdick, basato sui dati forniti da Tripplite e Wikipedia, CC BY-SA 4.0)
La scheda Dispositivi USB di HardInfo visualizza gli standard USB supportati dal tuo computer. La maggior parte dei computer offre più di una velocità. Come puoi determinare la velocità di una porta specifica? I fornitori li codificano a colori, come mostrato nella tabella. Oppure puoi consultare la documentazione del tuo computer.
Per vedere le velocità effettive che stai ottenendo, prova utilizzando il programma GNOME Disks open source. Basta avviare GNOME Disks, selezionare la funzione Benchmark Disk ed eseguire un benchmark. Questo indica la velocità reale massima che otterrai per una porta con il dispositivo specifico collegato.
Potresti ottenere velocità di trasferimento diverse per una porta, a seconda del dispositivo che colleghi ad essa. La velocità dei dati dipende dalla particolare combinazione di porta e dispositivo.
Ad esempio, un dispositivo che può volare a velocità 3.1 utilizzerà una porta 2.0, a velocità 2.0, se è quello a cui lo colleghi. (E non ti dirà che funziona alla velocità più lenta!) Al contrario, se colleghi un dispositivo USB 2.0 a una porta 3.1, funzionerà, ma alla velocità 2.0. Quindi, per ottenere un USB veloce, devi assicurarti che sia la porta che il dispositivo lo supportino. GNOME Disks ti offre i mezzi per verificarlo.
Per identificare un collo di bottiglia nell'elaborazione USB, utilizzare la stessa procedura utilizzata per i dischi rigidi e a stato solido. Esegui il comando intop
per individuare un collo di bottiglia nell'archivio USB. Quindi, utilizza System Monitor per ottenere i dettagli sui processi offensivi.
Come identificare i colli di bottiglia della larghezza di banda Internet
Il pannello Risorse di Monitor di sistema ti dice in tempo reale quale velocità di connessione Internet stai riscontrando (vedi Fig. 1).
Esistono ottimi strumenti Python per testare la velocità massima di Internet, ma puoi anche testarla su siti Web come Speedtest, Fast.com e Speakeasy. Per ottenere i migliori risultati, chiudi tutto ed esegui solo lo speed test; disattiva la tua VPN; eseguire test in diversi orari della giornata; e confrontare i risultati di diversi siti di test.
Quindi confronta i risultati con le velocità di download e upload dichiarate dal tuo fornitore. In questo modo, puoi confermare che stai ottenendo le velocità per cui stai pagando.
Se disponi di un router separato, prova con e senza di esso. Questo può dirti se il tuo router è un collo di bottiglia. Se usi il WiFi, prova con e senza (collegando direttamente il tuo laptop al modem). Ho visto spesso persone lamentarsi del proprio fornitore Internet quando in realtà hanno un collo di bottiglia WiFi che potrebbero risolvere da soli.
Se qualche programma consuma l'intera connessione Internet, vuoi sapere quale. Trovalo utilizzando il comando nethogs
. È disponibile nella maggior parte dei repository.
L'altro giorno, il mio monitor di sistema ha improvvisamente mostrato un picco nell'accesso a Internet. Ho appena digitato nethogs
nella riga di comando e ha immediatamente identificato il consumatore di larghezza di banda come un aggiornamento antivirus Clamav.
Fig. 9. Nethogs identifica i consumatori di larghezza di banda (Howard Fosdick, CC BY-SA 4.0)
Come identificare i colli di bottiglia dell'elaborazione grafica
Se colleghi il monitor alla scheda madre sul retro del tuo computer desktop, stai utilizzando la grafica integrata. Se lo colleghi a una scheda sul retro, hai un sottosistema grafico dedicato. Molti la chiamano scheda video o scheda grafica. Per i computer desktop, le schede aggiuntive sono in genere più potenti e più costose della grafica della scheda madre. I laptop utilizzano sempre la grafica integrata.
Il pannello Dispositivi PCI di HardInfo ti informa sulla tua unità di elaborazione grafica (GPU). Visualizza anche la quantità di memoria video dedicata di cui disponi (cerca la memoria contrassegnata come "precaricabile").
Fig. 10. Informazioni sull'elaborazione grafica di HardInfo (Howard Fosdick, CC BY-SA 4.0)
CPU e GPU lavorano a stretto contatto. Per semplificare, la CPU prepara i fotogrammi per il rendering da parte della GPU, quindi la GPU esegue il rendering dei fotogrammi.
Un collo di bottiglia della GPU si verifica quando le CPU sono in attesa di una GPU occupata al 100%.
Per identificarlo, è necessario monitorare i tassi di utilizzo della CPU e della GPU. I monitor open source come Conky e Glances lo fanno se le loro estensioni funzionano con il tuo chipset grafico.
Dai un'occhiata a questo esempio di Conky. Puoi vedere che questo sistema ha molta CPU disponibile. La GPU è occupata solo al 25%. Immagina se quel numero di GPU fosse invece vicino al 100%. Allora sapresti che le CPU stanno aspettando la GPU e avresti un collo di bottiglia della GPU.
Fig. 11. Conky mostra l'utilizzo di CPU e GPU (Immagine per gentile concessione del forum AskUbuntu)
Su alcuni sistemi avrai bisogno di uno strumento specifico del fornitore per monitorare la tua GPU. Sono tutti scaricabili da GitHub e sono descritti in questo articolo sul monitoraggio della GPU e sugli strumenti diagnostici da riga di comando.
Riepilogo
I computer sono costituiti da una raccolta di risorse hardware integrate. Se uno di essi dovesse restare indietro rispetto agli altri nel carico di lavoro, si creerebbe un collo di bottiglia nelle prestazioni. Ciò può trattenere l'intero sistema. È necessario essere in grado di identificare e correggere i colli di bottiglia per ottenere prestazioni ottimali.
Non molto tempo fa, l’identificazione dei colli di bottiglia richiedeva competenze approfondite. Gli odierni monitor delle prestazioni della GUI open source lo rendono piuttosto semplice.
Nel mio prossimo articolo, discuterò modi specifici per migliorare le prestazioni del tuo PC Linux. Nel frattempo condividete le vostre esperienze nei commenti.