HMB - Host Memory Buffer
Billigare SSD utan DRAM, men till vilket pris?
Det viktigaste när man bygger en billig SSD är att ha så låg BOM (Bill of Materials) som möjligt. Det säger ju sig självt att desto billigare alla komponenter är, desto billigare kan företaget sälja slutprodukten för. Ett effektivt sätt att få ner BOM är att strunta i att använda DRAM. DRAM drar ström, tar upp mycket fysisk plats och det gör kontrollekretsen dyrare och mer komplex. Det finns således en hel del att spara genom att helt skippa DRAM. Det finns bara ett problem, utan DRAM så blir en SSD väldigt långsam. Vi har testat ett par enheter utan DRAM, och vi var inte imponerade. Under 2015 släpptes ett antal budget-enheter utan DRAM, de var riktigt usla. För att förstå varför så måste vi gräva lite i hur SSD-enheter pratar med resten av systemet.
Innan vi hade SSD-enheter så hade vi hårddiskar. Hårddiskar lagrar data i spår och sektorer, och de ligger lagrade där tills de skrivs över eller raderas. För att hålla reda på var all data finns lagrad så används en LBA-tabell. När operativsystemet behöver en viss information så skickas en förfrågan på en viss adress till hårddisken, som i sin tur läser informationen. En SSD fungerar inte på samma sätt. Data ligger sällan lagrad på samma plats under en längre period på grund av garbage collection, eller wear-leveling. Det betyder att SSD-enheten behöver ha två tabeller. En logisk tabell som operativsystemet känner till, och en fysisk annan tabell som håller reda på var all data faktiskt ligger lagrad just för stunden. På det sättet kan operativsystemet prata samma språk med en SSD, som med en HDD.
Det betyder också att varje gång du ska läsa/skriva data till en SSD så måste man titta i tabellen för att se var informationen faktiskt befinner sig. Då detta görs för varje enskild IO, så kan prestandan bli rejält lidande om det tar för långt tid att hitta var informationen faktiskt finns – särskilt när man jobbar med slumpmässig skriv eller läs. Det är här som DRAM kommer in. Tabellen är oftast lagrad i enhetens NAND-flash, men man lagrar en kopia av tabellen i DRAM för att så snabbt som möjligt kunna komma åt informationen. Kopian i DRAM, och den som är lagrad i NAND, synkroniseras med jämna mellanrum och således lagras ingen användardata i DRAM (vilket är bra ifall strömmen skulle gå). Att lagra hela tabellen i DRAM kan ta en hel del plats, och det krävs ungefär 1MB DRAM för varje gigabyte data. Därför ser vi ofta att 500GB enheter har 512MB DRAM eller en 1TB enhet har 1GB DRAM och så vidare.
Tidigare enheter som saknar DRAM har ofta ett litet SRAM som cache i kontrollern där en liten del av tabellen lagras. Om den specifika adressen som inte finns i cachen måste läsas, då måste enheten läsa det från NAND, vilket är betydligt långsammare. Eftersom att kontrollern har en väldigt liten SRAM så blir det ofta så att NAND används för att hitta rätt adress. Resultatet av processen är en betydligt långsammare SSD.
HMB – Räddningen för SSDer utan DRAM?
När NVMe version 1.2 designades, så byggdes stöd för Host Memory Buffer, eller HMB, in. HMB är lösningen på prestandaproblemet med enheter utan DRAM, och vi kommer nog att få se många fler enheter som använder sig av den nya standarden. Tanken med HMB är att istället för att använda en dedikerad DRAM-krets på SSD-enheten, ska istället en del av systemets RAM användas som cache, det sker helt enkelt via PCIe. Även om lokalt DRAM givetvis har lägre latens, så är systemets DRAM fortfarande så pass mycket snabbare att det ger bättre prestanda än att läsa från NAND. Detta görs genom att man flaggar det som ska gå till minnet, och då passerar informationen processorn utan någon extra belastning. Man kommer dock inte lagra hela tabellen utan endast en liten del. Specifikt hur mycket varierar mellan olika implementationer, men troligtvis kommer de flesta hamna runt 32-128 megabyte. Den är dock betydligt större än kontrollerns inbyggda cache, och därför är risken betydligt mindre att man måste gå till NAND.
HMB är en kompromiss för de som vill komma undan med en billigare SSD. De kommer fortfarande vara långsammare än en enhet med dedikerat DRAM, men det är betydligt bättre än vad som använts tidigare. För att HMB ska fungera så krävs stöd från SSD-enheten, men också av operativsystemet. Tyvärr så finns det inget stöd för Windows 7 eller 8 i dagsläget. Använder man Windows 10 så aktiverades HMB-stödet när man installerade Fall Creators-uppdateringen. De flesta som kör Windows 10 borde alltså ha fullt stöd för HMB. Dessvärre så finns det inget enkelt sätt att se om HMB är aktiverat eller ej.