
Il sistema funziona lentamente? In tal caso, il tuo sistema sarà vincolato alla memoria, alla CPU o all’I/O. Questo articolo ti mostrerà un modo rapido per scoprire quale dei tre è, consentendoti di apportare miglioramenti informati alle prestazioni del sistema.
Memoria, elaborazione (CPU) o I/O vincolati?
Ogni volta che il tuo sistema funziona lentamente, è quasi sempre dovuto al componente o alla catena di componenti più lenti nel tuo sistema. Questo a volte può essere causato dal software, ma spesso è l’hardware il colpevole.
Ad esempio, se si dispone di un disco molto vecchio e lento, ad esempio un disco rotante a 5400 RPM ancora piuttosto comune, spesso indicato come HDD o unità disco rigido, tale disco potrebbe essere il collo di bottiglia nel tuo sistema.
Pensaci come tubi con l’acqua che li attraversa. Immagina la memoria del tuo sistema, l’unità di calcolo (la tua CPU o Central Processing Unit – il chip/processore principale nel tuo sistema) e i dischi (come parte del sistema I/O o Input/Output) tutti come tubi dell’acqua. Ora, immagina che i componenti più lenti siano un tubo più piccolo e che i componenti più veloci siano un tubo più grande. Se hai bisogno di trasferire 10 litri attraverso ogni tubo, il tubo più lento impiegherà molto più tempo di quello più grande.
Su Linux, i colli di bottiglia principali sono la memoria (RAM), il calcolo (CPU) o l’I/O (operazioni del disco). Nel caso della memoria, la velocità può essere un fattore, ma l’esaurimento è un grosso problema. Per la CPU, se utilizzi hardware meno recenti, ogni core della CPU funziona molto più lentamente e potrebbe non essercene abbastanza. Per l’I/O, il problema può essere la lettura da dischi rigidi lenti e scritture su disco eccessive.
Ci sono strumenti che puoi usare per scoprire facilmente se un sistema è Memory, Compute (CPU) o I/O Bound. Tutto ciò che serve è htop e iotop, due strumenti semi-grafici, che possono essere facilmente installati su Linux.
Installazione di htop e iotop

Per installare htop e iotop sulla tua distribuzione Linux basata su Debian/Apt (come Ubuntu e Mint), fai:
sudo apt install htop iotop
Per installare htop e iotop sulla tua distribuzione Linux basata su RedHat/Yum (come RedHat e Fedora), fai:
sudo yum install htop iotop
Limite CPU

È facile vedere se un sistema è vincolato alla CPU o meno. Digita semplicemente `htop` nella riga di comando e premi invio. Quindi guarda le barre colorate della CPU nella parte superiore dello schermo. Se il tuo processore ha 16 thread, ci saranno 16 barre.
La semplice domanda a cui rispondere è se sono tutti quasi “pieni” (quasi il 100%) o se c’è molto spazio per muoversi:

Se le barre sono piene, il sistema è chiaramente vincolato alla CPU. Nota anche che la memoria (Mem) e le barre di scambio (Swp) non sono affatto piene: questo non è un problema di prestazioni relativo alla memoria.
Per un po’ più di informazioni e tendenze, puoi ora guardare il numero di “Caricamento medio”. Sebbene questo numero sia altamente arbitrario, un po’ di familiarità con il tuo sistema e la comprensione generale che se uno qualsiasi di questi tre numeri supera il doppio del numero di thread nel tuo sistema, il sistema sta lottando per tenere il passo qui.
Il primo numero medio di caricamento è una media di 1 minuto, il successivo una media di 5 minuti e l’ultimo numero una media di 15 minuti. In questo caso, il carico di 1 minuto è 270, che è quasi 17 volte il numero di thread: il nostro sistema è fortemente vincolato alla CPU.
Infine, un numero interessante da verificare è il numero di attività (e in misura minore di thread). Sebbene l’esatto contrassegno minimo e massimo dipenda dalle capacità dell’hardware/macchina sottostante, se il numero di attività è eccessivamente alto, la CPU potrebbe cambiare contesto (passando dall’elaborazione di un’attività a un’altra) pesantemente.
Se desideri saperne di più su cosa indicano i vari colori in htop, consulta Barre dei colori in htop: cosa significano?
Limitato alla memoria
Immediatamente accedendo a htop, è facile vedere se un sistema è vincolato alla memoria o meno. Basta guardare le barre di memoria (Mem) e di scambio (Swp) menzionate in precedenza.
Se la barra della memoria è completamente piena e la barra di scambio è, ad esempio, piena al 50%, il sistema sta quasi sicuramente effettuando uno scambio pesante. Lo scambio è il processo di scambio dei contenuti della memoria principale con il disco (usando uno speciale file di scambio o partizione di scambio) perché è pieno e generalmente è molto lento. Una volta che un sistema si avvia e continua a scambiare, diventerà proibitivamente lento.
È facile vedere quando inizi a esaurire la memoria, poiché la barra si riempirà. Tuttavia, l’utilizzo dello spazio di swap a volte può essere un po’ ambiguo.
Ad esempio, il 20% potrebbe essere in uso, ma è rimasta molta memoria. Ciò potrebbe indicare che il sistema operativo ha spostato alcune aree di memoria a bassa frequenza sul disco per ottimizzare la memoria principale. Poiché molta memoria rimane libera, questa situazione va bene e non è motivo di preoccupazione.
C’è anche un’eccezione a una barra della memoria che sembra abbastanza piena e che è la memorizzazione nella cache. Il tuo sistema potrebbe essere impostato per riservare x quantità di memoria per la memorizzazione nella cache.
Un altro modo per verificarlo rapidamente è eseguendo free -g alla riga di comando (o free -m per macchine con minori quantità di memoria come un Raspberry Pi):

Questo è facile da leggere: 62 Gigabyte di memoria, 25 in uso, 12 liberi e 24 attualmente assegnati a buffer e cache. I 32 disponibili sono un totale approssimativo di effettivi liberi (12) e tutto ciò che è assegnato a buffer e cache (24) meno ciò che è già in uso (non mostrato), ovvero 12 + 24 = 36 e 32 è disponibile, quindi circa 4 gigabyte vengono utilizzati dai buffer e dalla memorizzazione nella cache.
Nota che possiamo anche vedere quanto spazio di swap è stato riservato (10 Gigabyte) e quanto viene utilizzato qui: 0 attualmente e quindi 10 liberi.
I/O vincolato
Diciamo che stai controllando htop e vedi questo:

Il sistema sembra occupato, ma no abbastanza occupato essere considerato vincolato alla CPU. Anche la memoria usata/libera e le barre di scambio sembrano a posto. Diamo un’occhiata a iotop dopo. Per fare ciò, è necessario utilizzare sudo iotop iniziare iotop poiché iotop richiede sudo.
Le prime due barre sono le più utili per analizzare rapidamente se un sistema sta lottando con il throughput del disco ed è quindi vincolato all’I/O.
![]()
Anche se il numero M/s non è molto alto in termini di SSD moderno, leggere e scrivere costantemente diversi Megabyte al secondo su un’unità HDD lenta è un I/O piuttosto intenso!
Questo numero, se guardato per un po’, insieme all’elenco dei processi sotto di esso (per vedere chi sono i migliori utenti) e la sezione superiore dell’output di htop (in termini di CPU e memoria) dà una buona idea generale se un il sistema è vincolato a memoria, CPU o I/O.
Mitigare i problemi di prestazioni
Le modifiche al sistema necessarie per mitigare i problemi di prestazioni sono sempre specifiche del sistema e della situazione specifica vissuta. Alcuni esempi:
è il sistema? Disco/IO vincolato? Potrebbe avere senso interrompere alcuni servizi di log a scrittura pesante, aggiornare il sistema I/O (ad esempio aggiungendo una scheda SATA in un vecchio computer), passare a un dispositivo di archiviazione più veloce (come un disco basato su NVMe invece di un HDD), o semplicemente per trovare un SSD più veloce.
è il sistema? Limite memoria/scambio? Potrebbe, ad esempio, avere senso eseguire meno macchine virtuali, eseguire processi meno intensivi di memoria o aggiungere più moduli di memoria hardware fisici.
è il sistema? Limitato alla CPU? Usa l’elenco dei processi in basso in htop per trovare il processo che sta monopolizzando la CPU. Puoi anche terminarlo direttamente da htop usando il tasto F9.
Se il problema è la CPU stessa (ovvero la CPU chiaramente non tiene il passo con le attività più basilari associate al sistema), la modifica dell’hardware è un po’ più complessa. Bisogna trovare una CPU più veloce, ancora compatibile con il socket sulla scheda madre, e anche in quel caso i miglioramenti delle prestazioni potrebbero essere piccoli. Potrebbe essere il momento di aggiornare il sistema in generale.
Più di un collo di bottiglia delle prestazioni?
Tornando alla nostra analogia con il tubo dell’acqua, tieni presente che a volte un collo di bottiglia può essere causato da una combinazione di vari componenti.
Ad esempio, se una scheda controller I/O vecchia o economica richiede l’80% del tempo della CPU solo per elaborare i dati e il disco collegato è un’unità HDD lenta che viene utilizzata all’80% delle sue capacità, anche con il throughput del scheda I/O più economica, quindi entrambi stanno creando un problema generale che non verrà risolto affrontando nessuno dei due. Entrambi dovranno essere corretti prima che il sistema torni ad essere performante.
Avvolgendo
Che tu sia un ingegnere DevOps o un utente Linux di computer di casa, sapere come analizzare rapidamente se il tuo sistema è vincolato a memoria, CPU o I/O ti aiuterà a implementare migliori modifiche software e hardware per soddisfare il problema di prestazioni riscontrato.
