
地 址:長(zhǎng)沙湘江新區(qū)文軒路27號(hào)麓谷企業(yè)廣場(chǎng)A3棟3單元6樓
Device Based就是一切FTL處理全由SSD主控負(fù)責(zé),包括磨損均衡、地址映射等。這也是常規(guī)的做法。
還有一類(lèi)Host based,所有的FTL處理全部交給主機(jī)端的模塊,或內(nèi)核態(tài)或用戶(hù)態(tài)。此時(shí),主機(jī)端運(yùn)行的FTL模塊就要在綜合評(píng)判均衡之后對(duì)頁(yè)面寫(xiě)入做重定向操作,并負(fù)責(zé)更新保存在主機(jī)端RAM中的大映射表,同時(shí),也仍然需要將邏輯頁(yè)號(hào)保存到頁(yè)面中一同存儲(chǔ)。這樣,就算主機(jī)端掉電,也還是可以從所有page中抽取邏輯頁(yè)號(hào)重構(gòu)映射表。這里有個(gè)認(rèn)知誤區(qū),不少人認(rèn)為,主機(jī)端只更新內(nèi)存中的大映射表,于是便有了個(gè)疑問(wèn):映射表如此大,更新之后如果主機(jī)一旦掉電,豈不是就丟掉了,所以是不是每一筆映射關(guān)系的更新都要同步到后端的Flash中?如果這樣性能將會(huì)變差。
所以,不管是Device Based還是Host Based,這張大映射表都要被存儲(chǔ)到RAM中,前者存儲(chǔ)在SSD自己的RAM,后者存儲(chǔ)在Host的RAM,但是它倆都需要將邏輯頁(yè)號(hào)隨著有效內(nèi)容一同寫(xiě)入Flash Page。FTL映射表很大,SSD上沒(méi)有這么大的電容量在掉電后把整個(gè)表都拷貝回Flash。
有些早期產(chǎn)品在掉電之后甚至需要半個(gè)多小時(shí)來(lái)重建映射表,比如一些大容量PCIE SSD,沒(méi)有重構(gòu)完的話(huà)就不能接受IO,所以其必須在BIOS掃描PCIE設(shè)備的時(shí)候通過(guò)optional rom加載個(gè)驅(qū)動(dòng),這個(gè)驅(qū)動(dòng)與PCIE SSD通信從而獲知其重構(gòu)進(jìn)度,并將BIOS暫停在某個(gè)頁(yè)面上,直到重構(gòu)完成,整個(gè)系統(tǒng)繼續(xù)啟動(dòng)。
而最新的產(chǎn)品中也并沒(méi)有電量大到能夠?qū)?shù)百兆上GB的表拷貝到Flash的大電容。目前的解決辦法都是將這張大表里的臟頁(yè)面在后臺(tái)不斷的刷入Flash。比如,可以采用SLC Flash來(lái)保存這個(gè)大表,加快寫(xiě)入速度,同時(shí)保證有足夠的壽命?;蛘咴贛LC/TLC FLash上開(kāi)辟一片專(zhuān)區(qū),以SLC的方式對(duì)其Program,也就是直接將其充電到最大程度,而不需要充電到某個(gè)區(qū)間,這樣也能夠加快速度。
對(duì)于那些沒(méi)來(lái)得及寫(xiě)入Flash的表,如果是Device Based的,掉電后可以依靠SSD內(nèi)的電容,將臟頁(yè)面在幾十ms時(shí)間內(nèi)迅速寫(xiě)入Flash。比如,可以對(duì)臟頁(yè)面保存一個(gè)bitmap,凡是臟的,bitmap中對(duì)應(yīng)偏移量被置1,掉電后在電容的電力下,代碼迅速掃描bitmap將臟頁(yè)刷Flash,幾十ms對(duì)人腦來(lái)講那就是一瞬,但是對(duì)CPU來(lái)講,確可以做不少事情。
對(duì)于Host Based的SSD,掉電后沒(méi)來(lái)得及下盤(pán)的臟頁(yè)被丟掉,重啟之后,只需要將這些丟掉的表頁(yè)面從Flash Page中重構(gòu)出來(lái)即可,所以,掉電之前,系統(tǒng)必須保證將 “有哪些臟頁(yè)上次沒(méi)有刷入” 的信息保存到Flash,比如如果用了bitmap追蹤的話(huà),那么每一筆對(duì)映射表的更新都需要同步刷入bitmap,假設(shè)500MB的FTL表,如果每個(gè)bit描述表中的4K內(nèi)存頁(yè)面的話(huà),bitmap一共也就15KB左右。掉電后,主機(jī)端FTL代碼從Flash將bitmap讀出,掃描,重構(gòu)。
或者采用日志方式,就像數(shù)據(jù)庫(kù)那樣,每一筆對(duì)映射表的更新都記錄下日志,該日志同步刷入Flash,掉電后,讀出日志做redo。
如何知道系統(tǒng)掉電?PCIE設(shè)備在系統(tǒng)掉電之后會(huì)收到一個(gè)中斷信號(hào),內(nèi)部的CPU可以利用這幾十ms的時(shí)間打掃戰(zhàn)場(chǎng)。有人可能有疑問(wèn),掉電了還能收到信號(hào)?電源內(nèi)的電容一般會(huì)在掉電之后保存有能夠讓整個(gè)系統(tǒng)再撐10ms左右的電量,電源一旦發(fā)現(xiàn)掉電,立即發(fā)送信號(hào)到主板芯片組,此時(shí)芯片組會(huì)發(fā)出一系列中斷,包括給CPU,以及PCIE設(shè)備,CPU此時(shí)立即將cache flush到ram,這一步其實(shí)沒(méi)用,因?yàn)閞am照樣掉電,但是如果用的是NVRAM/NVDIMM,就不一樣了。但是,如果是SATA SSD,其無(wú)法直接收到掉電信號(hào),但是系統(tǒng)橋上SATA控制器是可以的,SATA控制器收到掉電信號(hào)之后也會(huì)打掃戰(zhàn)場(chǎng),將沒(méi)來(lái)得及寫(xiě)入SSD的數(shù)據(jù)寫(xiě)入之后便等待斷電了,而SATA SSD此時(shí)只能靠自己了,也就是靠自身電容最最后打掃戰(zhàn)場(chǎng)的工作。