公司新聞
首頁(yè) > 新聞動(dòng)態(tài) > 公司新聞SSD背后的秘密:SSD基本工作原理
2019/12/6SSD主要由SSD控制器,F(xiàn)LASH存儲(chǔ)陣列,板上DRAM(可選),以及跟HOST接口(諸如SATA,SAS, PCIe等)組成。
SSD主控通過若干個(gè)通道(channel)并行操作多塊FLASH顆粒,類似RAID0,大大提高底層的帶寬。舉個(gè)例子,假設(shè)主控與FLASH顆粒之間有8個(gè)通道,每個(gè)通道上掛載了一個(gè)閃存顆粒,HOST與FLASH之間數(shù)據(jù)傳輸速率為200MB/s。該閃存顆粒Page大小為8KB,F(xiàn)LASH page的讀取時(shí)間為Tr=50us,平均寫入時(shí)間為Tp=800us,8KB數(shù)據(jù)傳輸時(shí)間為Tx=40us。那么底層讀取最大帶寬為(8KB/(50us+40us))*8 = 711MB/s,寫入最大帶寬為(8KB/(800us+40us))*8 = 76MB/s。從上可以看出,要提高底層帶寬,可以增加底層并行的顆粒數(shù)目,也可以選擇速度快的FLASH顆粒(或者讓速度慢的顆粒變快,比如MLC配成SLC使用)。
HOST是通過LBA(Logical Block Address,邏輯地址塊)訪問SSD的,每個(gè)LBA代表著一個(gè)Sector(一般為512B大小),操作系統(tǒng)一般以4K為單位訪問SSD,我們把HOST訪問SSD的基本單元叫用戶頁(yè)(Host Page)。而在SSD內(nèi)部,SSD主控與FLASH之間是FLASH Page為基本單元訪問FLASH的,我們稱FLASH Page為物理頁(yè)(Physical Page)。HOST每寫入一個(gè)Host Page, SSD主控會(huì)找一個(gè)Physical Page把Host數(shù)據(jù)寫入,SSD內(nèi)部同時(shí)記錄了這樣一條映射(Map)。有了這樣一個(gè)映射關(guān)系后,下次HOST需要讀某個(gè)Host Page 時(shí),SSD就知道從FLASH的哪個(gè)位置把數(shù)據(jù)讀取上來。
對(duì)絕大多數(shù)SSD,我們可以看到上面都有板載DRAM,其主要作用就是用來存儲(chǔ)這張映射表。也有例外,比如基于Sandforce主控的SSD,它并不支持板載DRAM,那么它的映射表存在哪里呢?SSD工作時(shí),它的絕大部分映射是存儲(chǔ)在FLASH里面,還有一部分存儲(chǔ)在片上RAM上。當(dāng)HOST需要讀取一筆數(shù)據(jù)時(shí),對(duì)有板載DRAM的SSD來說,只要查找DRAM當(dāng)中的映射表,獲取到物理地址后訪問FLASH從而得到HOST數(shù)據(jù).這期間只需要訪問一次FLASH;而對(duì)Sandforce的SSD來說,它首先看看該Host Page對(duì)應(yīng)的映射關(guān)系是否在RAM內(nèi),如果在,那好辦,直接根據(jù)映射關(guān)系讀取FLASH;如果該映射關(guān)系不在RAM內(nèi),那么它首先需要把映射關(guān)系從FLASH里面讀取出來,然后再根據(jù)這個(gè)映射關(guān)系讀取Host數(shù)據(jù),這就意味著相比有DRAM的SSD,它需要讀取兩次FLASH才能把HOST數(shù)據(jù)讀取出來,底層有效帶寬減半。對(duì)HOST隨機(jī)讀來說,由于片上RAM有限,映射關(guān)系Cache命中(映射關(guān)系在片上RAM)的概率很小,所以對(duì)它來說,基本每次讀都需要訪問兩次FLASH,所以我們可以看到基于Sandforce主控的SSD隨機(jī)讀取性能是不太理想的。
一塊剛買的SSD,你會(huì)發(fā)現(xiàn)寫入速度很快,那是因?yàn)橐婚_始總能找到可用的Block來進(jìn)行寫入。但是,隨著你對(duì)SSD的使用,你會(huì)發(fā)現(xiàn)它會(huì)變慢。原因就在于SSD寫滿后,當(dāng)你需要寫入新的數(shù)據(jù),往往需要做上述的垃圾回收:把若干個(gè)Block上面的有效數(shù)據(jù)搬移到某個(gè)Block,然后擦掉原先的Block,然后再把你的Host數(shù)據(jù)寫入。這比最初單純的找個(gè)可用的Block來寫耗時(shí)多了,所以速度變慢也就可以理解了。
在SSD內(nèi)部,有一種叫磨損平衡(Wear Leveling,WL)的機(jī)制來保證這點(diǎn)。
WL有兩種算法:動(dòng)態(tài)WL和靜態(tài)WL。所謂動(dòng)態(tài)WL,就是在使用Block進(jìn)行擦寫操作的時(shí)候,優(yōu)先挑選PE 數(shù)低的;所謂靜態(tài)WL,就是把長(zhǎng)期沒有修改的老數(shù)據(jù)(如前面提到的只讀文件數(shù)據(jù))從PE數(shù)低的Block當(dāng)中搬出來,然后找個(gè)PE 數(shù)高的Block進(jìn)行存放,這樣,之前低PE數(shù)的Block就能拿出來使用。
下面這張圖詮釋了無WL,動(dòng)態(tài)WL和靜態(tài)WL下的FLASH耐久度的區(qū)別 (假設(shè)每個(gè)Block最大PE數(shù)為10,000)
可見,使不使用WL,以及使用何種WL算法,對(duì)SSD的壽命影響是很大的。