nCache, MPR och ECC

nCache 2.0

Ncache är något som vi tittat på tidigare. Vi såg det för första gången i en av Teamgroups SSD-enheter. Sedan dess har vi sett tekniken i Ultra Plus, Extreme 2 och nu också i Ultra 2. Ncache är en dedikerad del av varje NAND-enhet som skrivs som SLC istället för TLC. Tidigare så hade man endast en liten del av minneskretsen dedikerad till detta och då cachade man endast väldigt små skrivningar och enhetens interna tabell (den som håller reda på vilken data som är lagrad var). Även om detta ökade prestandan något så var det inte något man märkte så mycket av. Med Ncache 2.0 så tar Sandisk ett steg till och dedikerar en betydligt större del än tidigare.

Alla skrivningar som görs till enheten skrivs till SLC-delen av minneskretsen först. Sedan kommer data att skrivas över till enhetens TLC-del vartefter. Detta betyder att om man skriver kontinuerligt så kommer cachen att bli full och då skrivs data direkt till TLC istället, men då förstås med mycket lägre prestanda. Så här långt så fungerar detta ungefär på samma sätt som Samsungs TurboWrite, eller OCZ:s Performance mode (även Crucial har en liknande teknik på sina senaste enheter). Vad som dock gör Ncache speciellt, är att SLC-delen är fast satt för varje NAND-enhet. Vilket betyder att dubblerar du kapaciteten så dubblerar du storleken på cachen. Sandisk kallar detta för ”On Chip Copy” och det sker helt inuti minneskretsen. I Samsung och OCZ:s lösningar så är det kontrollern som flyttar över data från SLC till TLC. Då måste datan först skickas över NAND-anslutningen (ONFI eller Toggle) via kontrollern och sedan till en annan NAND-enhet. I Sandisk fall så sköts detta helt internt av minneschippet. Detta ger förstås minskad latens och enheten behöver inte vänta på att kontrollern ska bli ledig. Detta kräver givetvis speciell firmware och även speciella minneschip som utvecklats av Sandisk själva.

Förutom bättre prestanda så ger Ncache också en förbättrad hållbarhet i form av lägre ”Write Amplification”. När data skrivs till enheten så hamnar det i SLC-cachen. Om sedan den datan läses eller flyttas innan den lämnat SLC-cachen, så behöver den ju inte skrivas i TLC alls. På det sättet så minskar antalet skrivningar till TLC-delen. När data sedan kopieras från SLC till TLC, så skrivs den sekventiellt. Vilket gör att gamla block behöver sällan läsas och skrivas om på samma sätt (för en förklaring av Write amplification, läs i Svenska SSD Guiden). Detta ger också en lägre Write Amplification och därmed längre livslängd som följd.

Multi Page Recovery och ECC

Något annat som blivit allt vanligare bland konsumentinriktade SSD-enheter är något form av extra skydd mot dataförlust utöver vanlig ECC. Detta har både en praktisk nytta men också ett marknadsvärde. Man kan skylta med att man har ett extra lager av säkerhet så att du kan känna dig trygg i att lägga semesterbilderna på en SSD.

Eftersom SSD-enheter använder sig av mindre och mindre tillverkningsteknik blir felmarginalen vid skrivning och läsning mindre. Detta löser man vanligtvis med det som kallas för ECC eller ”Error correcting code”. ECC är ett samlingsnamn för kod som är designad för att hitta och rätta till fel i en sekvens med binär data. Detta görs oftast genom att koden ”gissar” vad som ska vara rätt. Den enklaste formen av ECC är att ha en extra bit som kollar ifall en binär sträng har jämt eller ojämnt antal ettor. Men ju oftare dessa fel skapas, desto mer utrymme går åt till ECC. TLC kräver exempelvis mer ECC kod än vad vanligt MLC gör. Detta är inget unikt för Sandisk, utan alla SSD använder ECC för att rätta till bit-fel. Om ECC inte lyckas rätta till felet så klassas just den cellen som trasig och används inte mer. Istället så används de extra minnesceller som finns tillgängliga.

Men som en extra säkerhet så har flera tillverkare byggt in en RAID-liknande lösning för att förhindra att data går förlorad även om en större mängd databitar helt enkelt går sönder. Sandforce var en av de första att implementera denna typ av säkerhet med deras RAISE-system. Sedan dess har flera andra gjort liknande lösningar, exempelvis Crucial med deras RAIN. Sandisk kallar sin egen lösning för Multi Page Recovery, eller MPR, och Ultra 2 är den första enheten som använder det.

Precis som i RAID 5 så lagras paritetsdata för all data som skrivs till enheten, och precis som med RAID 5 så kan man inte utnyttja all lagringskapacitet på grund av att paritetsdata måste också lagras någonstans. Sandisk ska använda sig av 5:1-förhållande här och det betyder att för varje 5 gigabyte data som lagras, så måste man lagra en gigabyte med paritetsdata. Detta är väldigt mycket paritetsdata som ska lagras någonstans och detta är betydligt mer än vad som får plats i enhetens overprovisioning. Vi misstänker dock att varje minneschip har extra minnesceller dedikerade för just paritetsdata och är egentligen betydligt större än 128 gigabit. Detta är dock spekulation från vår sida då Sandisk inte vill berätta hur det egentligen ligger till.

I praktiken så borde detta betyda att om en sjättedel av all data skulle bli korrupt, så kan Ultra 2 fortfarande återskapa datan från paritet, men inte mer än då. Personligen tycker jag det är lite överdrivet med dessa RAID-liknande lösningar och jag hade nog istället sett att man använt dem som vanlig overprovisiong istället. Men då vi inte vet exakt hur ofta detta faktiskt används i praktiken så är det svårt att säga med säkerhet.

Leave a Reply

Please Login to comment
  Subscribe  
Notifiera vid