美國德克薩斯大學(xué)阿靈頓分校教授,IEEE Fellow, 同時也是阿里巴巴達(dá)摩院的項(xiàng)目專家,江泓(Hong Jiang)受邀出席了智能存儲與存儲新架構(gòu)學(xué)術(shù)論壇,并發(fā)表《支撐大數(shù)據(jù)的閃存系統(tǒng)》的主題演講。
以下內(nèi)容根據(jù)現(xiàn)場速記整理。
今天和大家分享一下我們在探索支撐大數(shù)據(jù)的閃存存儲系統(tǒng)研究方面的一些經(jīng)驗(yàn)和結(jié)果。
談到大數(shù)據(jù),這張圖片比較能說明問題,這是經(jīng)濟(jì)學(xué)人刊物兩年以前的一個封面。主要意思是如果上世紀(jì)全球最有價值的資源是原油,本世紀(jì)最有價值的資源就應(yīng)該是數(shù)據(jù)。
對比看一下,20年以前,前10名企業(yè)絕大部分都是與石油相關(guān)的一些企業(yè)。2019年,Top5,Top10絕大部分都是和數(shù)據(jù)相關(guān),如谷歌等等。但數(shù)據(jù)和原油不同。數(shù)據(jù)有一些是過去產(chǎn)生,更多是正在產(chǎn)生或者尚未產(chǎn)生。在這方面其對我們提出了很多挑戰(zhàn)。
我們先回顧一下大數(shù)據(jù)的主要挑戰(zhàn)和特征。它的Volume(容量)很大,數(shù)據(jù)分析速度(Velocity)要高,還有一個特點(diǎn)是多樣性(Variety)。當(dāng)對這三個V進(jìn)行了很好處理以后,真正價值的才能充分體現(xiàn),這就是第四個V(Value)。前三個V為存儲界提出了重大挑戰(zhàn)。因此我們現(xiàn)在需要更新,更快,更有效,而且更智能的存儲系統(tǒng)。
大數(shù)據(jù)的整個生態(tài)環(huán)境,生命周期,是從數(shù)據(jù)產(chǎn)生,收集,清洗,到存儲,管理,最后是分析以及應(yīng)用。在此過程當(dāng)中,存儲起到一個從原始數(shù)據(jù)到數(shù)據(jù)真正發(fā)揮作用兩個環(huán)節(jié)里一個承上啟下的作用,一個至關(guān)重要的環(huán)節(jié)。
要真正對大數(shù)據(jù)有效率的支持需要什么呢?我們的存儲容量,性能還有性價比。它對傳統(tǒng)基于硬盤容量的存儲系統(tǒng)提出了前所未有的挑戰(zhàn),比如說現(xiàn)在在整個市場氛圍,基于容量的存儲系統(tǒng)里,以閃存為支撐的,現(xiàn)在基本上和硬盤已經(jīng)是平分秋色。預(yù)計(jì)在過去幾年可能會逐步取代硬盤,至少按照這個預(yù)測,到2026年可能96%的Capacity將以閃存為主。閃存之所以給硬盤提出這么大的挑戰(zhàn),主要是存儲密度在提高。
隨著密度提高,存儲空間增加非常迅猛。與此同時,這是一個雙刃劍,讀寫的性能不斷降低,讀寫之間的非對稱性更大。如何能夠真正將閃存用在支撐大數(shù)據(jù),必須要解決相關(guān)一些問題。
今天我想講的主要關(guān)注這兩個問題還有其他的一些挑戰(zhàn)。一個就是,閃存性能較難預(yù)測,今天我講的是讀寫的干擾,由于讀寫問題,讀取的延遲是寫入的十分之一不到,如果讀寫混在一起,那么寫入速度如果是正在進(jìn)行,我后面讀取速度就會堵住。而我們知道對大數(shù)據(jù)分析來講,讀取性能非常重要,因此這是一個很重要的問題。
還有一個問題就是閃存速度,單位GB價格還是比硬盤高出很多,如何能充分把性價比進(jìn)一步提升?這就需要空間利用率的進(jìn)一步提高,還有就是壽命的提升。
這個我們想借用重刪技術(shù)提高寫入性能和容量,同時也減少擦除次數(shù)。接下來我們主要是圍繞最近做的幾項(xiàng)工作——解決讀寫干擾以及如何在閃存里有效進(jìn)行重刪問題。
為什么會讀寫干擾?SLC是一個存儲單元一位,MLC就是兩位,那么有四種不同的方式,依此類推,TLC是三位,有八種不同的狀態(tài),導(dǎo)致讀寫過程中需要判斷讀寫時間與量級等各種因素。
這個問題會越來越嚴(yán)重。我們對一些公開的問題進(jìn)行了分析,然后發(fā)現(xiàn)的確在這幾個大家經(jīng)常用到的開源工具里面,平均33%的讀請求被寫請求給堵住了,最高達(dá)到56%。這樣一來對讀性能的降低是非??捎^的,平均是42.8%,最高可以到75%。目前這個問題現(xiàn)在有一些解決方案,同時也有它們的問題。
比如P/E分析,這項(xiàng)工作實(shí)際上是華中科技大學(xué)何老師團(tuán)隊(duì)做的。在寫過程中如果遇到讀取,就把寫工作暫停,不過雖然可以改善讀的性能,但會影響寫性能。
另一個方法(Rails)是把讀和寫分開,寫的數(shù)據(jù)復(fù)制以后,將它分開處理,這個方法顯然對空間容量開銷很大。還有一種辦法(TTFlash)是采取計(jì)算的方式避開寫入,把讀的幾個順序合起來,通過計(jì)算來恢復(fù)讀的內(nèi)容,實(shí)際上就是增加內(nèi)部讀取請求,一個讀變成多個讀,但會加劇讀寫互相的干擾。
我們的方法是什么呢?HotR,我們發(fā)現(xiàn)讀寫在閃存頁(page)上是兩級分化的。絕大部分讀和寫請求都分別有讀取和寫入密集型頁面,我們把這些頁分類。因?yàn)樽x取至關(guān)重要,我們就臨時代用一個空間,這個空間可以在現(xiàn)有的閃存盤里。我就把熱度高的讀頁面,暫時移動到這個System Overview上,這就避開了讀寫沖突。結(jié)果簡單有效,我們進(jìn)行了比較,平均提高非常明顯。
關(guān)鍵是從開銷和延時的層級來評估其性價比。因?yàn)椴煌鉀Q方案要么對空間有要求,要么對硬件有額外要求,這樣以后得出的結(jié)論應(yīng)該比較公平,平均響應(yīng)時間縮短54.0%,是最具性價比的。
接下來是重刪問題,上午大家聽了主題報(bào)告,戴爾的畢總已經(jīng)提到,重刪已經(jīng)標(biāo)準(zhǔn)化,在很多場景里落地了?,F(xiàn)在做是因?yàn)闆]有辦法了,未來全球產(chǎn)生的必須存儲的數(shù)據(jù)對比全球所有的存儲空間加起來還是有大概一倍甚至兩倍差。
唯一的辦法就是數(shù)據(jù)壓縮?,F(xiàn)在大家證明有效的就是已經(jīng)標(biāo)準(zhǔn)化的重刪。
產(chǎn)品里面的重刪是這樣的,寫入以后,我首先進(jìn)行inline dedup(內(nèi)聯(lián)重刪)。剩下就是我在寫的時候,不能及時dedup,還是寫進(jìn)去,但在空閑的時候再進(jìn)行offline dedup(外聯(lián)重刪),offline dedup可以最終減少占用的空間,但不能減少寫的量。為什么要這樣做呢?因?yàn)橛?jì)算機(jī)的CPU能力很有限,還要做很多FTL(閃存轉(zhuǎn)換層)等很多工作。
現(xiàn)在用的重刪方法還是用傳統(tǒng)的哈希,計(jì)算開銷非常大。我們想能不能用更簡單的指紋方式,數(shù)據(jù)本身每一次寫入的時候,為了提高數(shù)據(jù)可靠性都自動產(chǎn)生一個ECC(糾刪碼)。實(shí)際上可以用來做一個弱哈希,弱的指紋。ECC產(chǎn)生是免費(fèi)的,硬件里面已經(jīng)產(chǎn)生,已經(jīng)有的。如果這樣我們可以通過ECC來首先判斷你這個數(shù)據(jù)是不是有匹配,沒有可以排除,如果有匹配,由于ECC很弱,在這種情況下因?yàn)閷懯亲x延時的10倍,所以很快就能把整個頁讀取出來,然后逐字節(jié)得比較。
以這種方法,我們可以把CPU計(jì)算的CR1,CR2很大的開銷完全去掉,取而代之就是讀,因?yàn)镋CC本身不要這個。現(xiàn)在遇到一個問題在很多閃存里,為了避免同一個數(shù)據(jù)寫在同一個物理位置上,導(dǎo)致里面的存儲單元報(bào)廢時間不均勻,很多芯片里面有固件,把這個寫進(jìn)去的數(shù)據(jù)在寫到物理介質(zhì)之前,先把它打亂,然后再寫進(jìn)去,保證固定位置均勻分布,讀的時候重新分布。
這給重刪帶來一個問題,ECC代表數(shù)據(jù)的指紋?,F(xiàn)在讀了以后,ECC所針對的值就不一樣了,本來兩個值是相同的,是可重刪的,通過讀取,兩個ECC不一樣,針對這樣一個問題怎么解決?
每一個邏輯,用隨機(jī)產(chǎn)生數(shù)據(jù),產(chǎn)生一個隨機(jī)的scrambler(擾碼器),這有一個對應(yīng),只要你有一個固定LBA,我的scrambler就是固定的,我們利用這個特征然后引用一些數(shù)學(xué)上的基本特性設(shè)計(jì)了一個是在Host端重建軟件擾碼器,一個是在Device端有選擇地繞過硬件加擾器,通過查找的方式把數(shù)據(jù)恢復(fù)過來。
最后測試,Inline and offline deduplication效果比較明顯,我們基于ECC的dedup方式進(jìn)行比較,我們的方式所得到的重刪率要高出大概20-40%之間。這個就證明這種方法還是非常有效的。
還有另外一個問題,現(xiàn)在閃存在數(shù)據(jù)中心,通常被用于高速緩存,這就出現(xiàn)一個問題。怎么能夠把緩存的實(shí)際空間增大,同時提高它的緩存命中率?目前方法是2016年的CacheDedup方式,把元數(shù)據(jù)和數(shù)據(jù)緩存進(jìn)行分開管理和訪問,然后采取傳統(tǒng)方式對Source Addresses進(jìn)行替換算法。
我們對現(xiàn)有的進(jìn)行分析,發(fā)現(xiàn)隨著你塊的大小不斷增加,重刪率下降很快,另一個命中率也在顯著下降,這樣實(shí)際利用空間減少了,命中率也降低了。
最后我們發(fā)現(xiàn)主要原因是大家沒有對重刪本身特性進(jìn)行進(jìn)一步的挖掘,傳統(tǒng)方法在獨(dú)立的情況下是有效的,但在重刪的情況下,一個物理塊可能對多個邏輯地址,這種情況下,所對應(yīng)的邏輯地址數(shù)量不一樣,這個我們稱作內(nèi)容共享的程度?;趦?nèi)容的局部性或者內(nèi)容共享的強(qiáng)度來對這個進(jìn)行挖掘,得出新的替換算法,最后的結(jié)果還是比較滿意的,我們性能大概提高一倍。
同時讀和寫性能都有所提高,這個是三項(xiàng)工作相應(yīng)的三篇文章都是今年最新發(fā)表的,我今天就介紹這么多,謝謝大家。
Q&A
Q:存儲系統(tǒng)里,讀性能的優(yōu)化,垃圾回收和重刪方面展示了最新研究工作,對于垃圾回收你分享的主題里面方法是很奇妙的。在頁的檢測時候,它的準(zhǔn)確率大概會是什么情況?準(zhǔn)確度會直接影響到算法的效能嗎?
A:目前我們是通過對現(xiàn)有的開源數(shù)據(jù)進(jìn)行分析,我剛才講比較兩極分化,所以這個分配目前來看,我們做的這幾個數(shù)據(jù)級還比較準(zhǔn)確。接下來如果要有更多數(shù)據(jù)級,可能就不是很準(zhǔn)確。我們接下來希望把一些AI和機(jī)器學(xué)習(xí)技術(shù)放在這里面來做更準(zhǔn)確的預(yù)測。
文章內(nèi)容未經(jīng)演講人審核