Låt oss visuellt använda flera rum, och flyttlådor. Varje rum har en dörr och varje rum har plats för många flyttlådor. På dörren till varje rum är en lista med adresser och vilken "LBA-adress" som varje plats för lådorna representerar.
Vi börjar med äldre teknik, sk SLC NAND, där en bit lagras i varje cell. Så ditt rum har flyttlådor stående på golvet längs med alla väggar. Vi säger att du har 8 olika rum, alla har vars en dörr in och du kan komma åt alla lådor enkelt, med direkt väg till allt.
När du tömmer disken, tar vi ut alla lådor, så rummen är helt tomma. Sen börjar du fylla med filer vilket hamnar i dessa lådor. Spelar ingen roll vad du lägger i lådorna, eller om du fyller dem eller inte, så tar de lika mycket plats, dvs en låda. Listan på dörren fylls i för att visa att just "den lådan" innehåller data från den LBA adressen.
Problemet kommer när du ska ta bort saker... för vad som sker i datorn är att man stryker LBA adressen. Men ingen går in i rummet och tömmer något, utan det ligger kvar. Detta görs för det är så HDD fungerar, och datorer gjordes inte för detta.
Du kan tänka dig att efter ett tag blir typ alla platser i rummet fyllda med lådor, men inte alla ha något du vill spara. Men varje gång du ska lagra något, måste du först ta fram den lådan med gammalt innehåll och tömma den i soporna, sen sätta tillbaka lådan, och sen fylla med data. Detta tar tid.. vilket sänker prestandan.
Så man uppfann TRIM som är ett sätt för disken att veta att LBA adressen nu är tom, något som inte gått att göra tidigare. Detta gör att du nu kan ha en vaktmästare som tittar på listan på dörren, ser att där är några platser som är lediga, och kan gå in och tömma lådorna så platsen är tom när du behöver spara ny data.
Vips så har vi fått upp prestandan igen till nyskick.
Nu kommer vi dock till nästa generation teknik, kallad MLC. I denna så börjar vi stapla lådor, samt vi sätter dem i grupper av flera lådor (pga tekniken som MLC begränsar kan man inte längre direkt hantera en låda i taget.
Så nu börjar vi med samma 8 rum... samma lådor, men vi staplar dem, och sätter dem i grupper med tex 8st platser x 2 på höjd = 16 lådor. Detta kallar vi ett block. I övrigt så är det samma.
Du skriver din data och det lagras på höjd i dessa lådor... och nu kommer problemet med TRIM och städning. Städaren kan bara tömma hela "block"... inte induviduella lådor. Så om du har en fil, på en LBA adress i ett block som används, kan inte hela den ytan tömmas. Utan du har en massa "extra utrymme" som bara står där.
Det du kan göra är att ta lådan med data du ska spara, och flytta den till ett nytt block, och sen tömma hela det gamla blocket, och exakt det gör din SSD. Men när du börjar fylla disken, behövs mer och mer av denna överblivna plats. Så det blir en hel del omflyttande, vilket sliter på SSDn.
När du når en punk så hinner helt enkelt inte vaktmästaren runt och sortera om allt, utan du hamnar i en "det är fullt" nivå, även om du tekniskt sett har ledig plats kvar. Då måste du ta ut alla lådor som ska sparas ur flera blocks... tömma allt skit sen sätta tillbaka allt. Och vi är tillbaka på sämre prestanda igen.
Detta är i enkelhet vad som sker (det är mer komplicerat) när du fyller din disk och varför du tappar prestanda på en SSD när den är full.
Så hur fixar vi detta? Finns flera knep. Ena är att ordna snabbare NAND, så att vaktmästaren hinner jobba och rotera runt, men detta minskar inte slitaget. Och det kommer tillfällen även det inte räcker. Vad vi istället kan göra är att göra rummen större, och helt enkelt inte visa allt utrymme till dig.
Och detta görs på dagens SSDer, ofta med ca 7% OP på klient diskar (enterprise har mer). Och du kan själv göra det också, genom att lämna en del av SSDn icke partionerad... så har den mer chans att sprida ut din data. Nu har vaktmästaren enklare att hitta tomt utrymme, och du har plats att spara data utan att vänta på tömning, så win-win.
Problemet? Kostnaden... du betalar trots allt för en större disk du inte kan använda. Men det är uppoffringen man får göra på ett eller annat sätt för att få kontroll på slitaget och på prestandan.
Sen kommer nästa problem... vi tittade på MLC, och faktiskt teknik från typ 2012. Idag har vi TLC, dvs vi stapar lådorna högre... med 3 lådor. Blocken är även större så du har nu kanske 40 i ett block x3 höjd (som ex, det beror på NAND konstruktion). Detta gör ju att det blir mer och mer känsligt för när den blir full.
Det är tom så illa att när du närmar dig 35% använt så kan tekniskt sett all golvyta vara borta... och alla block fulla nog för att behöva tömmas. Tänk dig då hur illa det blir när du närmar dig 75% full... 90% full, 99% full. Katastrof.
Samtidigt vill tillverkarna tjäna mer, så de tom har börjat plocka bort OP utrymmet som du fick innan, vilket kan döda prestandan ännu mer.
Så ja... det beror mycket på SSDn, kvalitén på dens design och hur mycket marginal den har, men generellt sett... fyll den inte.
Vad de också börjat göra för att göra SSDer billigare är att minska antal rum, och bara göra dem större. Så färre kanaler mellan kontroller och NAND, det som förr var 8, är idag 4/6. Detta gör ju att när när man lastar in/ut ur ett rum, kan inget annat ske samtidigt, vilket begränsar prestandan, speciellt om man måste städa hela tiden.