專利名稱:一種控制多通道固態(tài)盤數(shù)據(jù)讀寫的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種固態(tài)盤(SSD)的控制技術(shù)領(lǐng)域,尤其是涉及一種控制多通道固態(tài)盤的數(shù)據(jù)讀寫方法。
背景技術(shù):
SSD (Solid State Disk)指的是使用NAND Flash組成的固態(tài)盤。固態(tài)盤與目前的傳統(tǒng)硬盤相較,具有讀寫速度快,低功耗、抗震、穩(wěn)定性高、耐低溫等優(yōu)點。隨著Flash芯片的單片容量越來越大、價格越來越低,基于Flash的固態(tài)盤已成為一種主流存儲設(shè)備。其不僅在消費電子產(chǎn)品中被廣泛應(yīng)用,在企業(yè)級應(yīng)用中也占有一席之地。固態(tài)盤的特別之處在于沒有機械結(jié)構(gòu),利用傳統(tǒng)的NAND Flash特性,按頁寫入、按塊擦除的方式,其讀寫的效率依賴讀寫布局的方法設(shè)計。主機端接口和Flash控制器的速度嚴(yán)重不匹配是影響SSD性能的主要原因。Flash 的讀寫延遲,導(dǎo)致單片F(xiàn)lash讀寫速度不高,接口帶寬受限。由于MLC(Multi-Level Cell) Flash的出現(xiàn),這個問題變得越來越嚴(yán)重。目前,常用的Flash接口的讀寫帶寬在一般情況下平均可以達(dá)到40MB/s和8MB/s,但是,主機互聯(lián)的邏輯接口如SATA接口可以達(dá)到150MB/ s, PCI-E接口的速度就更高了,這導(dǎo)致主機端接口和Flash控制器的速度嚴(yán)重不匹配。隨著 Flash應(yīng)用技術(shù)的逐步提高,用戶對設(shè)備的讀寫速度要求也逐漸提高,單顆粒或者單通道的閃存設(shè)備接口帶寬已經(jīng)遠(yuǎn)遠(yuǎn)不能滿足用戶的要求。為了解決閃存芯片接口的帶寬瓶頸,采用多通道的設(shè)計。采用多通道的設(shè)計,主要是為了解決閃存芯片的讀寫延遲問題。多通道SSD的優(yōu)點在于能夠多通道同時進(jìn)行操作, 可以成倍的提高閃存設(shè)備的接口帶寬,從而提高SSD的性能。如圖1所示的SSD,每個通道都有自己獨立的閃存通道控制器,通道間相互獨立。主機系統(tǒng)發(fā)送的命令和數(shù)據(jù),必須經(jīng)過主機接口,可以采用USB,F(xiàn)iber Channel,PCIExpress,SATA等形式的接口。因為Flash有較長時間的讀寫延遲,所以,采用多通道的形式,可以使Flash控制器的性能和主機接口的性能相匹配。SDRAM主要用來存放緩沖的數(shù)據(jù)和系統(tǒng)的映射表以及一些元數(shù)據(jù)信息。DMA 控制器控制數(shù)據(jù)在主機接口和SDRAM、主機接口和閃存控制器、SDRAM和閃存控制器之間的數(shù)據(jù)傳輸,可以加快數(shù)據(jù)的流動,減少數(shù)據(jù)傳輸?shù)臅r間。每個通道都有獨立Flash控制器, 可以獨立控制Flash的讀寫操作,從而不受其他通道的干擾。
發(fā)明內(nèi)容
本發(fā)明解決的技術(shù)問題是針對現(xiàn)在多通道固態(tài)盤數(shù)據(jù)寫入/讀出速度低,磨損不均衡等問題,提出一種控制數(shù)據(jù)寫入/讀出的方法。本發(fā)明提出的控制數(shù)據(jù)寫入/讀出的方法,包括以下處理步驟(1) SSD映射關(guān)系的建立。映射表是用來存放讀寫過程中邏輯地址和物理地址的映射關(guān)系的。文件系統(tǒng)請求的是邏輯地址,數(shù)據(jù)寫入/讀出時,訪問的是SSD的物理地址。需要通過映射表,建立邏輯地址和物理地址的映射關(guān)系。
(2)通過DMA方式,將數(shù)據(jù)批量從主機接口或者SDRAM傳送給Flash控制器。(3)選擇通道狀態(tài)為ready的通道。(4)優(yōu)先服務(wù)讀請求。根據(jù)步驟( 選擇的通道,從通道的讀請求隊列上取下一個讀請求或者多個讀請求,優(yōu)先服務(wù)讀請求。具體為首先,針對所述讀請求隊列中的任一讀請求,根據(jù)該任一讀請求的邏輯地址查詢所述映射表,得到該讀請求的物理地址及所在的Chip ;其次,判斷chip的狀態(tài),如果為ready,則該讀請求即為所找到的可服務(wù)的讀請求,否則,依次判斷所述讀請求隊列中的其他讀請求,直到找到所在chip狀態(tài)為ready的讀請求;然后,根據(jù)所述所在chip狀態(tài)為ready的讀請求的物理地址,讀取數(shù)據(jù);(5)如果沒有可以服務(wù)的讀請求,從寫請求隊列上取下一個或多個寫請求,在步驟 (3)選擇的通道上,選擇狀態(tài)為ready的chip,將數(shù)據(jù)寫入到該chip的空閑頁,修改映射表。優(yōu)選的,所屬步驟(1)中的映射表在系統(tǒng)掉電時,映射表需要回寫到Flash。映射表數(shù)據(jù)和普通數(shù)據(jù)的寫入頻率是不同的,所以,為了使這兩種數(shù)據(jù)的寫入造成的磨損均衡, 對映射表數(shù)據(jù)和普通數(shù)據(jù)不做區(qū)分,將映射表中的數(shù)據(jù)均勻存放在所述固態(tài)盤(SSD)的多個flash中。優(yōu)選的,所屬步驟(3)中的狀態(tài)為ready的通道選擇步驟如下初始狀態(tài)下,令牌由系統(tǒng)隨機選擇的一個通道所有,選擇狀態(tài)為ready的通道時,從該令牌所有者的下一個通道開始查詢通道狀態(tài),如果查詢到狀態(tài)為ready的通道,就將令牌傳給該通道。如果沒有 ready的通道,循環(huán)查詢所有通道,直到狀態(tài)為ready的通道出現(xiàn)。優(yōu)選的,所屬步驟(4)中優(yōu)先服務(wù)讀請求,原因是Flash讀操作比寫操作執(zhí)行時間短,服務(wù)讀請求比服務(wù)寫請求需要的時間短。從隊首開始,取出讀請求隊列的邏輯頁(LPN) 字段,查詢映射表,得到物理頁(PPN)字段,判斷該頁所在的chip是否是ready狀態(tài),如果是,響應(yīng)該讀請求,如果不是,判斷讀請求隊列的物理頁(PPN)字段,直到發(fā)現(xiàn)狀態(tài)為ready 的chip,響應(yīng)該請求。優(yōu)選的,所屬步驟(5)中服務(wù)寫請求,每個通道有一個令牌,初始狀態(tài)下,令牌由隨機選擇的一個chip所有,選擇狀態(tài)為ready的chip時,從該令牌所有者的下一個chip 開始查詢chip狀態(tài),如果查詢到狀態(tài)為ready的chip,就將令牌傳給該chip。如果沒有狀態(tài)為ready的chip,循環(huán)查詢所有chip,直到狀態(tài)為ready的chip出現(xiàn)。綜上所述,本發(fā)明控制多通道固態(tài)盤數(shù)據(jù)讀寫的優(yōu)勢在于實現(xiàn)了接口數(shù)據(jù)的快速轉(zhuǎn)移,通道間的并行以及通道內(nèi)的串行流水操作。并且由于采用令牌環(huán)的方式,SSD的所有chip之間磨損也是均勻的。
圖1是本發(fā)明的多通道SSD架構(gòu)示意圖。圖2是一種多通道固態(tài)盤數(shù)據(jù)讀寫流程圖。圖3是寫請求處理流程圖。圖4是讀請求處理流程圖。
圖5是專用chip存放映射表示意圖。圖6是各chip的固定位置存放映射表示意圖。圖7是各chip不固定位置存放映射表示意圖。圖8是讀寫請求隊列示意圖。圖9是讀寫處理過程的通道狀態(tài)和chip狀態(tài)示意圖。圖10是通道間并行和通道內(nèi)chip之間interleaving示意圖。
具體實施例方式下面結(jié)合附圖和具體實施例對本發(fā)明作進(jìn)一步詳細(xì)說明。如圖2所示,圖示了本發(fā)明實施例的一種多通道固態(tài)盤數(shù)據(jù)讀寫方法。所述方法包括步驟S21,建立映射表信息;步驟S22,主機端的待寫數(shù)據(jù),通過DMA方式,傳輸?shù)骄彌_區(qū);步驟S23,選擇狀態(tài)為ready的通道;步驟S24,判斷讀請求隊列是否為空。如果為空,執(zhí)行S25,否則,執(zhí)行S26 ;步驟S25,處理寫請求,轉(zhuǎn)到步驟S27 ;步驟S26,處理讀請求;步驟S27,判斷是否滿足數(shù)據(jù)回寫的條件,如接口是否斷開,是否斷電,如果是,執(zhí)行S28,否則執(zhí)行S22 ;步驟S28,將映射表回寫到Flash。為了防止數(shù)據(jù)斷電丟失,需要利用定時器,每間隔一段時間,定時器就會自動觸發(fā)映射表的回寫。本實施例中還可以在建立映射表信息的同時建立元數(shù)據(jù)信息,其中所述元數(shù)據(jù)包括,壞塊表,無效頁標(biāo)記,活動塊標(biāo)記,可用塊標(biāo)記信息等。由于Flash讀操作的速度遠(yuǎn)快于寫操作速度,讀一頁數(shù)據(jù)的時間大約為寫一頁數(shù)據(jù)時間的1/4,所以,根據(jù)步驟S24的判斷結(jié)果,優(yōu)先服務(wù)讀請求。同映射表一樣,元數(shù)據(jù)也定期回寫到Flash。如圖3所示,圖2所述的步驟25具體包括步驟S31,判斷寫請求所在chip狀態(tài)是否是ready,如果狀態(tài)為ready,執(zhí)行步驟 S32,否則,執(zhí)行步驟S33 ;步驟S32,從寫請求隊列摘下一個寫請求,響應(yīng)該寫請求;步驟S33,令牌加1,傳遞給下一個chip,轉(zhuǎn)到步驟S31 ;步驟S34,判斷數(shù)據(jù)傳輸是否完成,如果完成,執(zhí)行步驟S35,否則,執(zhí)行步驟S34 ;步驟S35,將通道狀態(tài)改為ready ;步驟S36,判斷寫操作中的program是否完成,如果program完成,執(zhí)行步驟S37, 否則,執(zhí)行步驟S36;步驟S37,將chip狀態(tài)改為ready。如圖4所示,圖2所述的步驟沈具體包括步驟S41,讀請求隊列的指針指向隊首;步驟S42,判斷指針?biāo)赾hip是否是ready狀態(tài),如果是,執(zhí)行步驟S43,否則,執(zhí)行步驟S44,繼續(xù)判斷指針?biāo)赾hip是否是ready狀態(tài);
步驟S43,從讀請求隊列摘下該讀請求,服務(wù)該讀請求,轉(zhuǎn)步驟S45 ;步驟S44,指針加1,轉(zhuǎn)步驟S42 ;步驟S45,判斷讀操作是否完成,如果完成,執(zhí)行步驟S46,否則,繼續(xù)執(zhí)行步驟 S45 ;步驟S46,將chip狀態(tài),通道狀態(tài)改為ready。本實施例中,選擇狀態(tài)為ready的通道通過令牌環(huán)實現(xiàn),具體為初始狀態(tài)下,令牌由隨機一個通道所有,選擇狀態(tài)為ready的通道時,從該令牌所有者的下一個通道開始查詢通道狀態(tài),如果查詢到狀態(tài)為ready的通道,就將令牌傳給該通道,如果沒有ready的通道,循環(huán)查詢所有通道,直到狀態(tài)為ready的通道出現(xiàn)。本實施例中,選擇狀態(tài)為ready的chip通過令牌環(huán)實現(xiàn),具體為令牌由隨機選擇的一個chip所有,選擇狀態(tài)為ready的chip時,從該令牌所有者的下一個chip開始查詢 chip狀態(tài),如果查詢到狀態(tài)為ready的chip,就將令牌傳給該chip,如果沒有狀態(tài)為ready 的chip,循環(huán)查詢所有chip,直到狀態(tài)為ready的chip出現(xiàn)。從主機文件系統(tǒng)接收的讀寫命令地址為邏輯扇區(qū)地址,為了響應(yīng)這一命令,需要做地址映射,按照一定的映射策略,會產(chǎn)生映射表。映射表存放的是邏輯地址和物理地址的映射關(guān)系。一般,映射表在系統(tǒng)上電的時候存放在SDRAM里,掉電的時候存放在Flash里。 傳統(tǒng)的做法是預(yù)留一部分Flash空間,專門用作存放映射表,有兩種常用方法。一種是如圖5,預(yù)留專門的chip存儲映射表。這種方式映射表專用chip和普通數(shù)據(jù)chip的寫入次數(shù)是不均衡,會導(dǎo)致某些chip過早結(jié)束壽命。由于每個Flash chip的壽命有限,如果某些chip數(shù)據(jù)過早失效了,整個SSD的性能會變得不穩(wěn)定。一種是如圖6,在各chip的固定位置存儲映射表,一般是每個chip起始的一段連續(xù)地址或者是結(jié)束的一段連續(xù)地址用作存儲映射表。假設(shè)SSD有N個Flash chip,將映射表的大小分為N份。在系統(tǒng)斷電或者是映射表更新的情況下,將映射表回寫到這N個 Flashchip,其中,每個Flash chip用固定位置存放映射表。由于映射表數(shù)據(jù)和普通數(shù)據(jù)的數(shù)據(jù)特性不同,映射表在每次系統(tǒng)上電、掉電的過程都會被更新,或每隔一段時間更新或在系統(tǒng)負(fù)載較輕的情況下更新。由于Flash每塊擦寫次數(shù)有限,一般SLC NAND Flash為百萬次,MLCNand Flash為十萬次。如果磨損不均衡,會導(dǎo)致在大多數(shù)Flash塊磨損較輕的情況下,某些Flash塊磨穿,提前結(jié)束整個Flash的壽命。映射表的更新頻率大于普通數(shù)據(jù),將映射表存放在每個Flash chip的固定位置,會導(dǎo)致存放Flash映射表的區(qū)域提前磨穿,從而結(jié)束整個SSD壽命。本實施例中采用如圖7的方法,將映射表均勻的回寫在每個Flash塊。映射表數(shù)據(jù)和普通數(shù)據(jù)不作區(qū)分,均勻分布在Flash chip上。Flash塊的磨損是均勻的,會延長整個 SSD的壽命。SDRAM的一部分預(yù)留為映射表專用,一部分用作數(shù)據(jù)buffer。所以,讀寫請求不直接響應(yīng),分別存儲在不同的請求隊列上。主機發(fā)送的命令按照命令類型以及到達(dá)的先后順序,分離成讀請求隊列和寫請求隊列。如圖8,各個通道之間共享寫請求隊列,每個通道獨享讀請求隊列。讀寫請求的處理都分為兩個步驟,數(shù)據(jù)傳輸和數(shù)據(jù)寫入操作。數(shù)據(jù)傳輸是指寫請求數(shù)據(jù)經(jīng)過總線傳輸至寄存器,讀請求數(shù)據(jù)從寄存器傳輸至總線。數(shù)據(jù)寫入操作是指寫請求數(shù)據(jù)從寄存器寫入閃存介質(zhì)(這一過程也稱為program),讀請求數(shù)據(jù)從介質(zhì)寫入寄存
ο按照圖1的SSD架構(gòu),各個通道有獨立的總線,通道上的chip共用該通道的總線。 chip指的是有獨立片選的閃存操作單元。在讀寫請求的處理過程中,通道狀態(tài)和chip狀態(tài)如圖9所示。數(shù)據(jù)傳輸和數(shù)據(jù)寫入時,該chip狀態(tài)一直為chip busy。由于每個通道的所有chip共用數(shù)據(jù)總線,所以,數(shù)據(jù)傳輸時,通道狀態(tài)為channel busy,而數(shù)據(jù)寫入時,通道
channel ready0一個寫操作包含三個階段,命令階段、數(shù)據(jù)階段和編程階段。命令和地址是在命令階段傳輸?shù)摹?shù)據(jù)階段執(zhí)行數(shù)據(jù)的傳輸。編程階段,數(shù)據(jù)寫入到Flash單元,這一過程由硬件自動完成,且編程時間比前兩個階段的時間長。由于各個通道之間是完全獨立的,而CPU只有一個,如果使用CPU執(zhí)行大量的數(shù)據(jù)階段的數(shù)據(jù)傳輸操作,將大量占用系統(tǒng)總線,影響通道間的讀寫性能。由于有DMA控制器, CPU僅執(zhí)行寫入命令和地址的操作,而由DMA配合閃存控制器,完成數(shù)據(jù)的傳輸。而CPU寫命令和地址占用的時間比較短,對于具體的讀寫操作來說是非常小的,所以從總體上看,通道間是并行工作的。DMA控制器控制數(shù)據(jù)在主機接口邏輯和閃存控制器、SDRAM和閃存控制器之間的數(shù)據(jù)傳輸。主機端的數(shù)據(jù)傳輸要快于閃存控制器端的數(shù)據(jù)傳輸,所以,增加通道數(shù)量可以并行訪問不同通道間的Flashchip,通道的帶寬和通道數(shù)是成比例的。如圖10,每個通道都有Flash執(zhí)行編程操作。從圖上可以明顯看出,兩個Flash在相當(dāng)長的時間里重疊了 chip busy時間,所以,interleaving技術(shù)通過使多個寫操作重疊, 有效的隱藏了編程階段較長的延時,大大減少了系統(tǒng)的編程總時間開銷。在如圖1所示的多通道架構(gòu)下,讀操作也可以通過多通道并行和通道間interleaving提升性能。
權(quán)利要求
1.一種控制多通道固態(tài)盤數(shù)據(jù)讀寫的方法,具體包括如下步驟(1)建立映射表,用以存放固態(tài)盤(SSD)邏輯地址與物理地址之間的映射關(guān)系;(2)主機端的待寫數(shù)據(jù)通過DMA方式,傳輸?shù)酵ǖ揽刂破鞯木彌_區(qū)中;(3)選擇一個通道狀態(tài)為ready的通道;(4)從該狀態(tài)為ready的通道的讀請求隊列中,找到一個所在的chip狀態(tài)為ready的讀請求,服務(wù)該讀請求,讀取數(shù)據(jù),具體為首先,針對所述讀請求隊列中的任一讀請求,根據(jù)該任一讀請求的邏輯地址查詢所述映射表,得到該讀請求的物理地址及所在的chip ;其次,判斷chip的狀態(tài),如果為ready,則該讀請求即為所找到的可服務(wù)的讀請求,否貝U,依次判斷所述讀請求隊列中的其他讀請求,直到找到所在chip狀態(tài)為ready的讀請求;然后,根據(jù)所述所在chip狀態(tài)為ready的讀請求的物理地址,讀取數(shù)據(jù);(5)如果讀請求隊列為空,則從寫請求隊列中找到一個所在的chip狀態(tài)為ready的寫請求,將所述緩沖區(qū)的數(shù)據(jù)寫入到該chip的空閑頁,然后根據(jù)該chip和空閑頁,修改映射表中相應(yīng)的邏輯地址和物理地址的對應(yīng)關(guān)系,完成寫操作。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟C3)中選擇狀態(tài)為ready的通道通過令牌環(huán)實現(xiàn),具體為初始狀態(tài)下,令牌由隨機一個通道所有,選擇狀態(tài)為ready的通道時,從該令牌所有者的下一個通道開始查詢通道狀態(tài),如果查詢到狀態(tài)為ready的通道,就將令牌傳給該通道, 如果沒有ready的通道,循環(huán)查詢所有通道,直到狀態(tài)為ready的通道出現(xiàn)。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述映射表中的數(shù)據(jù)均勻存放在所述固態(tài)盤(SSD)的多個閃存中。
4.根據(jù)權(quán)利要求1-3之一所述的方法,其特征在于,所述選擇狀態(tài)為ready的chip通過令牌環(huán)實現(xiàn),具體為令牌由隨機選擇的一個chip所有,選擇狀態(tài)為ready的chip時,從該令牌所有者的下一個chip開始查詢chip狀態(tài),如果查詢到狀態(tài)為ready的chip,就將令牌傳給該chip,如果沒有狀態(tài)為ready的chip,循環(huán)查詢所有chip,直到狀態(tài)為ready的chip出現(xiàn)。
5.根據(jù)權(quán)利要求1-4之一所述的方法,其特征在于,所述多通道固態(tài)盤的每個通道均有一個讀請求隊列。
6.根據(jù)權(quán)利要求1-5之一所述的方法,其特征在于,所述寫請求隊列只有一個,由固態(tài)盤的所有通道共享。
7.根據(jù)權(quán)利要求1-6之一所述的方法,其特征在于,所述映射表每間隔一定時間回寫到閃存,以防止數(shù)據(jù)斷電丟失。
全文摘要
本發(fā)明公開了一種控制多通道固態(tài)盤數(shù)據(jù)讀寫的方法,包括(1)建立映射表,以存放固態(tài)盤邏輯地址與物理地址之間的映射關(guān)系;(2)主機端的待寫數(shù)據(jù)通過DMA傳輸?shù)酵ǖ揽刂破鞯木彌_區(qū)中;(3)選擇一個通道狀態(tài)為ready的通道;(4)從該狀態(tài)為ready的通道的讀請求隊列中,找到一個所在的chip狀態(tài)為ready的讀請求,服務(wù)該讀請求;(5)如果讀請求隊列為空,從寫請求隊列中找到一個所在的chip狀態(tài)為ready的寫請求,將緩沖區(qū)的數(shù)據(jù)寫入到該chip的空閑頁,然后修改映射表中相應(yīng)的邏輯地址和物理地址的對應(yīng)關(guān)系,完成寫操作。本發(fā)明的方法實現(xiàn)了接口數(shù)據(jù)的快速轉(zhuǎn)移,通道間的并行以及通道內(nèi)的串行流水操作,并且由于采用令牌環(huán)的方式,SSD的所有chip之間磨損也是均勻的。
文檔編號G06F13/28GK102567257SQ20111044448
公開日2012年7月11日 申請日期2011年12月26日 優(yōu)先權(quán)日2011年12月26日
發(fā)明者馮丹, 劉景寧, 張建權(quán), 樊旭光, 秦亦, 童薇, 胡洋 申請人:華中科技大學(xué)