Qui, ho scritto un libro per caso. Prendi un caffè prima.
Perché lo svuotamento dello spazio su disco accelera i computer?
Non lo fa, almeno non da solo. Questo è un mito molto comune. Il motivo per cui è un mito comune è perché il riempimento del disco rigido spesso accade contemporaneamente ad altre cose che tradizionalmente potrebbero rallentare † il computer. Le prestazioni dell'SSD tendono a peggiorare quando l'unità si riempie , ma questo è un problema relativamente nuovo, unico per gli SSD, e non è davvero evidente per gli utenti occasionali. In genere, lo spazio libero su disco ridotto è solo un'aringa rossa .
Ad esempio, cose come:
Frammentazione dei file. La frammentazione dei file è un problema †† , ma la mancanza di spazio libero, sebbene sicuramente uno dei molti fattori che contribuiscono, non è l'unica causa di ciò. Alcuni punti chiave qui:
Le possibilità che un file venga frammentato non sono correlate alla quantità di spazio libero rimasto sull'unità. Sono legati alla dimensione del più grande blocco contiguo di spazio libero sull'unità (ad es. "Buchi" di spazio libero), a cui la quantità di spazio libero sembra imporre un limite superiore . Sono inoltre correlati a come il file system gestisce l'allocazione dei file (più sotto). Considerare: un'unità piena al 95% con tutto lo spazio libero in un singolo blocco contiguo ha lo 0% di probabilità di frammentare un nuovo file ††† (e la possibilità di frammentare un file aggiunto è indipendente dallo spazio libero). Un'unità piena del 5% ma con dati distribuiti uniformemente sull'unità ha una probabilità molto elevata di frammentazione.
Tenere presente che la frammentazione dei file influisce solo sulle prestazioni quando si accede ai file frammentati . Considera: hai una bella unità deframmentata che contiene ancora molti "buchi" liberi. Uno scenario comune. Tutto funziona senza intoppi. Alla fine, però, si arriva a un punto in cui non rimangono più grandi blocchi di spazio libero. Scarica un film enorme, il file finisce per essere gravemente frammentato. Questo non rallenterà il tuo computer. Tutti i file dell'applicazione e quelli che in precedenza andavano bene non verranno improvvisamente frammentati. Questo potrebbe rendere il filmimpiega più tempo a caricarsi (anche se le normali velocità in bit del film sono così basse rispetto alle velocità di lettura del disco rigido che molto probabilmente sarà impercettibile) e potrebbe influire sulle prestazioni associate agli I / O durante il caricamento del film , ma a parte questo, niente cambia.
Mentre la frammentazione dei file è certamente un problema, spesso gli effetti sono mitigati dal buffering e dalla cache del sistema operativo e hardware. Scritture ritardate, read-ahead, strategie come il prefetcher in Windows, ecc., Contribuiscono a ridurre gli effetti della frammentazione. In genere non si effettivamente verificano impatto significativo fino a quando la frammentazione diventa grave (Mi piacerebbe anche permetto di dire che fino a quando il file di swap non è frammentato, sarà probabilmente mai notato).
L'indicizzazione della ricerca è un altro esempio. Supponiamo che tu abbia attivato l'indicizzazione automatica e un sistema operativo che non lo gestisca con grazia. Man mano che si salvano sempre più contenuti indicizzabili sul computer (documenti e simili), l'indicizzazione potrebbe richiedere sempre più tempo e potrebbe iniziare a influire sulla velocità percepita del computer mentre è in esecuzione, sia in I / O che nell'uso della CPU . Questo non è legato allo spazio libero, è legato alla quantità di contenuto indicizzabile che hai. Tuttavia, esaurire lo spazio libero va di pari passo con l'archiviazione di più contenuti, quindi viene disegnata una falsa connessione.
Programma antivirus. Simile all'esempio di indicizzazione della ricerca. Supponiamo che tu abbia un software antivirus impostato per eseguire la scansione in background dell'unità. Dato che hai sempre più contenuti scansionabili, la ricerca richiede più risorse I / O e CPU, probabilmente interferendo con il tuo lavoro. Ancora una volta, questo è correlato alla quantità di contenuti analizzabili che hai. Più contenuti equivalgono spesso a meno spazio libero, ma la mancanza di spazio libero non è la causa.
Software installato. Diciamo che hai un sacco di software installato che si carica all'avvio del tuo computer, rallentando così i tempi di avvio. Questo rallentamento si verifica perché viene caricato un sacco di software. Tuttavia, il software installato occupa spazio sul disco rigido. Pertanto, lo spazio libero sul disco rigido diminuisce nello stesso momento in cui ciò accade e, di nuovo, è possibile stabilire facilmente una falsa connessione.
- Molti altri esempi lungo quelle linee che, se presi insieme, sembrano associare strettamente la mancanza di spazio libero a prestazioni inferiori.
Quanto sopra illustra un altro motivo per cui questo è un mito così comune: mentre la mancanza di spazio libero non è una causa diretta di rallentamento, disinstallazione di varie applicazioni, rimozione di contenuti indicizzati o scansionati, ecc. A volte (ma non sempre; al di fuori dell'ambito di questo risposta) aumenta nuovamente le prestazioni per motivi non correlati alla quantità di spazio libero rimanente. Ma questo libera naturalmente anche spazio sul disco rigido. Pertanto, ancora una volta, è possibile stabilire una connessione apparente (ma falsa) tra "più spazio libero" e "computer più veloce".
Considerare: se una macchina funziona lentamente a causa di molti software installati, ecc. E si clona esattamente il disco rigido su un disco rigido più grande, quindi si espandono le partizioni per guadagnare più spazio libero, la macchina non accelera magicamente su. Viene caricato lo stesso software, gli stessi file sono ancora frammentati allo stesso modo, lo stesso indicizzatore di ricerca continua a funzionare, nulla cambia nonostante abbia più spazio libero.
Ha a che fare con la ricerca di uno spazio di memoria in cui salvare le cose?
No non lo fa. Ci sono due cose molto importanti che vale la pena notare qui:
Il tuo disco rigido non cerca in giro per trovare posti dove mettere le cose. Il tuo disco rigido è stupido. Non è niente. È un grande blocco di archiviazione indirizzata che mette alla cieca le cose in cui il tuo sistema operativo lo dice e legge tutto ciò che viene richiesto. Le unità moderne dispongono di sofisticati meccanismi di memorizzazione nella cache e buffering progettati per prevedere ciò che il sistema operativo chiederà in base all'esperienza acquisita nel tempo (alcune unità sono persino a conoscenza del file system su di esse), ma essenzialmente pensano a il tuo disco come solo un grande stupido mattone di archiviazione con occasionali funzionalità di prestazioni bonus.
Il tuo sistema operativo non cerca nemmeno luoghi in cui mettere le cose. Non c'è "ricerca". Sono stati fatti molti sforzi per risolvere questo problema, poiché è fondamentale per le prestazioni del file system. Il modo in cui i dati sono effettivamente organizzati sull'unità è determinato dal file system. Ad esempio, FAT32 (vecchi DOS e PC Windows), NTFS (in seguito Windows), HFS + (Mac), ext4 (alcuni Linux) e molti altri. Persino il concetto di "file" e di "directory" sono semplicemente prodotti di file system tipici: i dischi rigidi non conoscono le bestie misteriose chiamate "file". I dettagli esulano dallo scopo di questa risposta. Ma in sostanza, tutti i file system comuni hanno modi di tracciare dove lo spazio disponibile è su un'unità in modo che una ricerca di spazio libero sia, in circostanze normali (vale a dire file system in buona salute), non necessaria. Esempi:
NTFS ha una tabella di file master , che include i file speciali $Bitmap
, ecc. E molti metadati che descrivono l'unità. Fondamentalmente tiene traccia di dove si trovano i prossimi blocchi liberi, in modo che i nuovi file possano essere scritti direttamente su blocchi liberi senza dover scansionare l'unità ogni volta.
Un altro esempio, ext4 ha quello che viene chiamato "allocatore bitmap" , un miglioramento rispetto a ext2 ed ext3 che sostanzialmente lo aiuta a determinare direttamente dove si trovano i blocchi liberi invece di scansionare l'elenco di blocchi liberi. Ext4 supporta anche "l'allocazione ritardata", ovvero il buffering dei dati nella RAM da parte del sistema operativo prima di scriverli sull'unità per prendere decisioni migliori su dove metterlo per ridurre la frammentazione.
Molti altri esempi.
o spostando le cose per creare uno spazio continuo abbastanza lungo per salvare qualcosa?
No. Questo non succede, almeno con qualsiasi file system di cui sono a conoscenza. I file finiscono per essere frammentati.
Il processo di "spostamento delle cose per creare uno spazio abbastanza lungo contiguo per salvare qualcosa" si chiama deframmentazione . Questo non succede quando i file vengono scritti. Ciò accade quando si esegue la deframmentazione del disco. Su Windows più recente, almeno, ciò avviene automaticamente secondo una pianificazione, ma non viene mai attivato scrivendo un file.
Essere in grado di evitare di spostare le cose in questo modo è la chiave per le prestazioni del file system ed è il motivo per cui si verifica la frammentazione e perché la deframmentazione esiste come un passaggio separato.
Quanto spazio vuoto sul disco rigido dovrei lasciare libero?
Questa è una domanda più complicata a cui rispondere e questa risposta si è già trasformata in un piccolo libro.
Regole pratiche:
Personalmente di solito afferro un'unità più grande quando ho circa il 20-25% di spazio libero rimanente. Questo non è correlato alle prestazioni, è solo che quando arrivo a quel punto, mi aspetto che probabilmente esaurirò presto lo spazio per i dati, ed è tempo di ottenere un'unità più grande.
Più importante della visione dello spazio libero è assicurarsi che la deframmentazione programmata sia abilitata laddove appropriato (non su SSD), in modo da non arrivare mai al punto in cui diventa abbastanza terribile da interessarti. Altrettanto importante è evitare modifiche errate e lasciare che il tuo sistema operativo faccia la sua cosa, ad esempio non disabilitare il prefetcher di Windows ( eccetto gli SSD ), ecc.
C'è un'ultima cosa che vale la pena menzionare. Una delle altre risposte qui menzionava che la modalità half-duplex di SATA impedisce la lettura e la scrittura allo stesso tempo. Sebbene sia vero, questo è notevolmente semplificato ed è principalmente non correlato ai problemi di prestazioni discussi qui. Ciò significa semplicemente che i dati non possono essere trasferiti contemporaneamente in entrambe le direzioni sul filo . Tuttavia, SATA ha una specifica abbastanza complessa che coinvolge minuscole dimensioni massime dei blocchi (circa 8 kB per blocco sul filo, credo), legge e scrive le code delle operazioni, ecc., E non preclude le scritture sui buffer mentre le letture sono in corso, interfogliate operazioni, ecc.
Qualsiasi blocco che si verificherebbe sarebbe dovuto alla competizione per le risorse fisiche, generalmente mitigata da molta cache. La modalità duplex di SATA è quasi del tutto irrilevante qui.
† "Rallentamento" è un termine generico. Qui lo uso per fare riferimento a cose che sono associate a I / O (ad es. Se il tuo computer è seduto lì a sgranocchiare numeri, il contenuto del disco rigido non ha alcun impatto), o legato alla CPU e in competizione con cose tangenzialmente correlate che hanno elevato utilizzo della CPU (ad es. software antivirus che esegue la scansione di tonnellate di file).
†† Gli SSD sono interessati dalla frammentazione in quanto le velocità di accesso sequenziale sono generalmente più veloci dell'accesso casuale, nonostante gli SSD non affrontino le stesse limitazioni di un dispositivo meccanico (anche in questo caso, la mancanza di frammentazione non garantisce l'accesso sequenziale, a causa del livellamento dell'usura, ecc. , come osserva James Snell nei commenti). Tuttavia, praticamente in ogni scenario di uso generale, questo non è un problema. Le differenze di prestazioni dovute alla frammentazione degli SSD sono generalmente trascurabili per cose come il caricamento di applicazioni, l'avvio del computer, ecc.
††† Supponendo un file system sano che non frammenta i file di proposito.