När du lär dig mer om datorer och hur de fungerar kommer du ibland att stöta på något som inte verkar vara vettigt. Med tanke på det, gör tömning av diskutrymme faktiskt snabbare på datorer? Dagens SuperUser Q & A-inlägg har svaret på en förbryllad läsares fråga.
Dagens Fråga & Svar-session kommer till oss med tillstånd av SuperUser - en underavdelning av Stack Exchange, en community-driven gruppering av Q & A-webbplatser.
Skärmdump med tillstånd av sand (Flickr) .
Frågan
SuperUser-läsare Remi.b vill veta varför tömning av diskutrymme verkar påskynda en dator:
Jag har tittat på många videor och förstår nu hur datorer fungerar lite bättre. Jag förstår vad RAM är, om flyktigt och icke-flyktigt minne, och processen att byta. Jag förstår också varför ökande RAM-kort ökar en dator.
Vad jag inte förstår är varför att rensa upp diskutrymme verkar påskynda en dator. Påskyndar det verkligen en dator? Om så är fallet, varför gör det så?
Har det något att göra med att söka efter minnesutrymme för att rädda saker eller med att flytta saker för att skapa tillräckligt länge utrymme för att spara något? Hur mycket tomt utrymme ska jag lämna ledigt på en hårddisk?
Varför verkar tömning av diskutrymme påskynda en dator?
Svaret
SuperUser-bidragsgivaren Jason C har svaret för oss:
"Varför påskyndar tömning av diskutrymme datorer?"
Det gör det inte, åtminstone inte på egen hand. Detta är en riktigt vanlig myt. Anledningen till att det är en vanlig myt är att fylla upp hårddisken ofta händer samtidigt som andra saker som traditionellt kan sakta ner din dator (A) . SSD-prestanda tenderar att försämras när de fylls, men det här är en relativt ny fråga, unik för SSD-datorer, och är inte riktigt märkbar för avslappnade användare. Generellt är lågt ledigt diskutrymme bara en röd sill.
Till exempel saker som:
1. Filfragmentering. Filfragmentering är ett problem (B) , men brist på ledigt utrymme, även om det definitivt är en av många bidragande faktorer, är inte den enda orsaken till det. Några viktiga punkter här:
- Chansen att en fil är fragmenterad är inte relaterat till mängden ledigt utrymme kvar på enheten. De är relaterade till storleken på det största angränsande blocket med ledigt utrymme på enheten (dvs. "hål" i ledigt utrymme), vilket mängden ledigt utrymme råkar sätta en övre gräns på . De är också relaterade till hur filsystemet hanterar filallokering ( mer nedan ). Överväga: En enhet som är 95 procent full med allt ledigt utrymme i ett enda sammanhängande block har noll procents chans att fragmentera en ny fil (C) (och chansen att fragmentera en bifogad fil är oberoende av ledigt utrymme). En enhet som är fem procent full men med data fördelad jämnt över enheten har mycket stor chans för fragmentering.
- Tänk på att filfragmentering påverkar bara prestanda när de fragmenterade filerna nås . Överväga: Du har en fin, defragmenterad enhet som fortfarande har massor av gratis "hål" i sig. Ett vanligt scenario. Allt går smidigt. Så småningom kommer du dock till en punkt där det inte finns fler stora kvarter ledigt utrymme kvar. Du laddar ner en enorm film, filen blir mycket fragmenterad. Detta kommer inte att sakta ner din dator . Alla dina applikationsfiler och sådana som tidigare var bra kommer inte plötsligt att fragmenteras. Det kan göra att filmen tar längre tid att ladda (även om typiska filmbithastigheter är så låga jämfört med läshastigheter på hårddisken att det sannolikt kommer att märkas), och det kan påverka I / O-bunden prestanda medan filmen laddas, men förutom det ändras ingenting.
- Även om fragmentering av filer verkligen är ett problem, mildras effekterna ofta av buffert och cachning av operativsystem och hårdvarunivå. Försenade skrivningar, read-ahead, strategier som prefetcher i Windows etc. hjälper alla till att minska effekterna av fragmentering. Det gör du vanligtvis inte faktiskt uppleva betydande påverkan tills fragmenteringen blir allvarlig (jag vågar till och med säga att så länge din swap-fil inte är fragmenterad kommer du förmodligen aldrig att märka det).
2. Sökindexering är ett annat exempel. Säg att du har aktiverat automatisk indexering och ett operativsystem som inte hanterar detta elegant. När du sparar mer och mer indexerbart innehåll på din dator (dokument och sådant) kan indexering ta längre och längre tid och kan börja påverka datorns upplevda hastighet medan den körs, både i I / O- och CPU-användning . Detta är inte relaterat till ledigt utrymme, det är relaterat till mängden indexerbart innehåll du har. Men att ta slut på ledigt utrymme går hand i hand med att lagra mer innehåll, därför dras en falsk anslutning.
3. Antivirusprogram (liknar exempel på sökindexering). Säg att du har antivirusprogram installerat för att göra bakgrundsskanning av din enhet. Eftersom du har mer och mer skannbart innehåll tar sökningen fler I / O- och CPU-resurser, vilket eventuellt stör ditt arbete. Återigen är detta relaterat till mängden skannbart innehåll du har. Mer innehåll motsvarar ofta mindre ledigt utrymme, men bristen på ledigt utrymme är inte orsaken.
4. Installerad programvara. Säg att du har mycket programvara installerad som laddas när din dator startar, vilket saktar ner uppstartstiderna. Denna saktning sker eftersom mycket programvara laddas. Installerad programvara tar dock upp hårddiskutrymme. Därför minskar ledigt hårddiskutrymme samtidigt som detta händer och återigen kan en falsk anslutning lätt upprättas.
5. Många andra exempel i denna riktning som, när de tas ihop, dyka upp att nära koppla brist på ledigt utrymme med lägre prestanda.
Ovanstående illustrerar en annan anledning till att detta är en så vanlig myt: Även om bristen på ledigt utrymme inte är en direkt orsak till att sakta ner, avinstallerar olika applikationer, tar bort indexerat eller skannat innehåll, etc. ibland (men inte alltid; utanför tillämpningsområdet för detta svar) ökar prestanda igen av skäl som inte är relaterade till mängden ledigt utrymme som återstår. Men detta frigör naturligtvis också hårddiskutrymme. Därför kan återigen en uppenbar (men falsk) koppling göras mellan "mer ledigt utrymme" och en "snabbare dator".
Överväga: Om du har en maskin som går långsamt på grund av massor av installerad programvara, etc., klonar du hårddisken (exakt) till en större hårddisk och expanderar sedan dina partitioner för att få mer ledigt utrymme, maskinen kommer inte att magiskt snabba upp. Samma programvara laddas, samma filer är fortfarande fragmenterade på samma sätt, samma sökindex körs fortfarande, ingenting ändras trots att det finns mer ledigt utrymme.
"Har det något att göra med att söka efter minnesutrymme för att spara saker?"
Nej det gör det inte. Det finns två mycket viktiga saker som är värda att notera här:
1. Din hårddisk söker inte runt för att hitta platser att placera saker på. Din hårddisk är dum. Det är inget. Det är ett stort block av adresserad lagring som blindt placerar saker där ditt operativsystem berättar det och läser vad som helst som frågas om det. Moderna enheter har sofistikerade caching- och buffermekanismer som är utformade för att förutsäga vad operativsystemet kommer att be om baserat på den erfarenhet vi har fått över tiden (vissa enheter är till och med medvetna om filsystemet som finns på dem), men tänk i princip på din kör som bara en stor dum lagring med tillfälliga funktioner för bonusprestanda.
2. Ditt operativsystem söker inte heller efter platser att lägga saker på. Det finns ingen sökning. Mycket arbete har gjorts för att lösa detta problem eftersom det är viktigt för filsystemets prestanda. Hur data faktiskt är organiserat på din enhet bestäms av din filsystem . Till exempel FAT32 (gamla DOS- och Windows-datorer), NTFS (senare versioner av Windows), HFS + (Mac), ext4 (vissa Linux-system) och många andra. Även begreppet "fil" och "katalog" är bara produkter från typiska filsystem - hårddiskar vet ingenting om de mystiska djur som kallas filer . Detaljer ligger utanför detta svar. Men i huvudsak har alla vanliga filsystem sätt att spåra var det tillgängliga utrymmet finns på en enhet så att en sökning efter ledigt utrymme under normala omständigheter (dvs. filsystem med god hälsa) är onödig. Exempel:
- NTFS har en huvudfiltabellen , som inkluderar specialfilerna $ Bitmap , etc., och massor av metadata som beskriver enheten. I huvudsak håller den reda på var nästa lediga block är så att nya filer kan skrivas direkt till lediga block utan att skanna enheten varje gång.
- Ett annat exempel: Ext4 har det som kallas bitmapallokerare , en förbättring jämfört med ext2 och ext3 som i grunden hjälper det att direkt avgöra var fria block är istället för att skanna listan över fria block. Ext4 stöder också försenad tilldelning , det vill säga buffring av data i RAM av operativsystemet innan du skriver ut det till enheten för att fatta bättre beslut om var du ska placera det för att minska fragmentering.
- Många andra exempel.
"Eller med att flytta saker för att skapa tillräckligt långt utrymme för att spara något?"
Nej. Detta händer inte, åtminstone inte med något filsystem jag känner till. Filer hamnar bara fragmenterade.
Processen att ”flytta saker för att skapa ett tillräckligt långt sammanhängande utrymme för att spara något” kallas defragmentering . Detta händer inte när filer skrivs. Detta händer när du kör din diskdefragmentering. I nyare versioner av Windows händer det åtminstone automatiskt enligt ett schema, men det utlöses aldrig genom att skriva en fil.
Att kunna undvika Att flytta saker så här är nyckeln till filsystemets prestanda, och det är därför fragmentering sker och varför defragmentering finns som ett separat steg.
"Hur mycket tomt utrymme ska jag lämna ledigt på en hårddisk?"
Det här är en svårare fråga att svara på (och detta svar har redan förvandlats till en liten bok).
Tumregler:
1. För alla typer av enheter:
- Viktigast, lämna tillräckligt med ledigt utrymme för dig att använda din dator effektivt . Om du får slut på utrymme till jobbet vill du ha en större enhet.
- Många diskdefragmenteringsverktyg kräver ett minimum av ledigt utrymme (jag tror att den med Windows kräver 15 procent, i värsta fall) för att arbeta. De använder detta lediga utrymme för att tillfälligt hålla fragmenterade filer eftersom andra saker ordnas om.
- Lämna utrymme för andra OS-funktioner. Om din maskin till exempel inte har mycket fysiskt RAM-minne och du har aktiverat virtuellt minne med en sidfil med dynamisk storlek, vill du lämna tillräckligt med utrymme för sidfils maximala storlek. Eller om du har en bärbar dator som du sätter i viloläge behöver du tillräckligt med ledigt utrymme för viloläge-filen. Sådana saker.
2. SSD-specific:
- För optimal tillförlitlighet (och i mindre utsträckning prestanda) kräver SSD-enheter lite ledigt utrymme, som de, utan att gå in för mycket i detalj, använder för att sprida data runt enheten för att undvika att ständigt skriva till samma plats (vilket sliter dem) . Detta koncept att lämna ledigt utrymme kallas överförsörjning . Det är viktigt, men i många SSD-enheter finns det redan obligatoriskt överutnämnt utrymme . Det vill säga, enheterna har ofta några dussin mer GB än de rapporterar till operativsystemet. Nedre enheter kräver ofta att du lämnar manuellt oparterad utrymme, men för enheter med obligatorisk OP, du behöver inte lämna ledigt utrymme . En viktig sak att notera här är att överutnämnda utrymme tas ofta bara från opartitionerat utrymme . Så om din partition tar upp hela din enhet och du lämnar lite ledigt utrymme på den, gör det inte alltid räkna. Många gånger kräver manuell överadministration att du krymper din partition för att vara mindre än enhetens storlek. Se SSD-enhetens användarmanual för mer information. TRIM, skräpsamling och liknande har också effekter, men de ligger utanför räckvidden för detta svar.
Personligen tar jag vanligtvis en större enhet när jag har cirka 20-25 procent ledigt utrymme kvar. Det här är inte relaterat till prestanda, det är bara det att när jag kommer till den punkten förväntar jag mig att jag troligen snart kommer att ta slut på data för data och det är dags att få en större enhet.
Viktigare än att titta på ledigt utrymme är att se till att schemalagd defragmentering är aktiverad där det är lämpligt (inte på SSD-enheter) så att du aldrig kommer till den punkt där det blir tillräckligt svårt att påverka dig.
Det finns en sista sak som är värt att nämna. Ett av de andra svaren här nämnde att SATAs halvduplexläge förhindrar läsning och skrivning samtidigt. Även om det är sant är detta mycket förenklat och är mestadels inte relaterat till de prestandafrågor som diskuteras här. Vad det här betyder är att data inte kan överföras i båda riktningarna på tråden på samma gång. SATA har dock en ganska komplex specifikation involverar små maximala blockstorlekar (ungefär 8 kB per block på kabeln, tror jag), läs- och skrivoperationsköer, etc., och utesluter inte att skrivningar till buffertar händer medan läsningar pågår, sammanflätade operationer etc.
Varje blockering som inträffar beror på att konkurrera om fysiska resurser, vanligtvis mildras av mycket cache. DATA-läget för SATA är nästan helt irrelevant här.
(A) "Sakta ner" är en bred term. Här använder jag den för att hänvisa till saker som antingen är I / O-bundna (dvs om din dator sitter där och knuffar siffror, har hårddiskens innehåll ingen påverkan) eller CPU-bunden och konkurrerar med tangentiellt relaterade saker som har hög CPU-användning (dvs. antivirusprogram som skannar massor av filer).
(B) SSD-enheter påverkas av fragmentering genom att sekventiella åtkomsthastigheter i allmänhet är snabbare än slumpmässig åtkomst, trots att SSD-enheter inte har samma begränsningar som en mekanisk enhet (även då garanterar brist på fragmentering inte sekventiell åtkomst på grund av slitnivå etc.). Men i praktiskt taget alla allmänna användningsscenarier är detta ett icke-problem. Prestationsskillnader på grund av fragmentering på SSD-enheter är vanligtvis försumbara för saker som att ladda applikationer, starta datorn etc.
(C) Om vi antar att det är ett förnuftigt filsystem som inte fragmenterar filer avsiktligt.
Se till att läsa igenom resten av den livliga diskussionen på SuperUser via länken nedan!
Har du något att lägga till förklaringen? Ljud av i kommentarerna. Vill du läsa fler svar från andra tekniskt kunniga Stack Exchange-användare? Kolla in hela diskussionstråden här .