本發(fā)明涉及固態(tài)硬盤控制技術(shù),特別涉及一種提高固態(tài)硬盤順序?qū)懢彺嫘实姆椒ā?/p>
背景技術(shù):
主機每次發(fā)起的對ssd的操作的數(shù)據(jù)都對應(yīng)了一段邏輯塊地址lba(logicalblockaddress)地址,即[lba_x,lba_y],lba_x表示這段lba區(qū)間的起始地址,lba_y表示這段lba區(qū)間的末尾地址,每個lba對應(yīng)512b的數(shù)據(jù)。為保證數(shù)據(jù)一致性,ssd的固件需要記錄數(shù)據(jù)緩存datacache中有緩存數(shù)據(jù)的lba地址,以便判斷主機后續(xù)發(fā)起的寫操作數(shù)據(jù)是否命中了datacache,如果命中則需要把數(shù)據(jù)緩存datacache中的舊數(shù)據(jù)覆蓋掉。順序?qū)懼傅氖侵鳈C發(fā)起寫數(shù)據(jù)的lba都是連續(xù)的。通過分析主機對ssd普遍都存在順序讀寫的特征,因此存儲最近一段時間的操作數(shù)據(jù)有利于提升順序讀寫的性能。
目前的固件設(shè)計中datacache的緩存方式為線性緩存,假設(shè)datacache大小為4kb,主機向ssd發(fā)起4kb的數(shù)據(jù),對應(yīng)的lba地址段為[lba0,lba7],則固件按照這個順序記錄這些lba,圖1是現(xiàn)有技術(shù)線性緩存示例。當(dāng)后續(xù)主機又向ssd發(fā)起512b的數(shù)據(jù),對應(yīng)的lba地址為lba8,那么固件需要判斷datacache中是否已存在lba8,線性cache對應(yīng)的遍歷方式也是線性遍歷,從datacache中第一個緩存內(nèi)容開始向后一個個查找,則需要查找8次才能判斷為非命中。該技術(shù)的時間復(fù)雜度為o(n),n為datacache中的有效lba地址個數(shù)。因此存在系統(tǒng)消耗大,效率低的問題。
技術(shù)實現(xiàn)要素:
針對以上缺陷,本發(fā)明目的如何提升緩存數(shù)據(jù)的遍歷效率,實現(xiàn)提升寫緩存效率的目的。
為了解決以上問題本發(fā)明提出了一種提高固態(tài)硬盤順序?qū)懢彺嫘实姆椒?,固態(tài)硬盤創(chuàng)建緩存數(shù)據(jù)地址列表,固態(tài)硬盤接收到主機發(fā)起的寫操作,通過檢索緩存數(shù)據(jù)地址列表判定是否命中,其特征在于緩存數(shù)據(jù)地址列表包括緩存數(shù)據(jù)的lba地址和緩存數(shù)據(jù)的lba地址對應(yīng)的哈希值key,key_x=lba_x%n,key_x為主機發(fā)起的寫操作的lba地址,n=每個緩存塊大小/512;固態(tài)硬盤接收到主機發(fā)起的寫操作先計算該寫操作的對應(yīng)lba地址對應(yīng)的哈希值key_n;直接判斷緩存數(shù)據(jù)地址列表是否存在哈希值為key_n的緩存數(shù)據(jù),如果存在則判定當(dāng)前寫操作命中;否則則判定當(dāng)前寫操作沒有命中。
根據(jù)權(quán)利要求1所述的提高固態(tài)硬盤順序?qū)懢彺嫘实姆椒?,其特征在于固態(tài)硬盤接收到主機發(fā)起的寫操作先計算該寫操作的對應(yīng)lba地址對應(yīng)的哈希值key_n;直接判斷緩存數(shù)據(jù)地址列表是否存在哈希值為key_n的緩存數(shù)據(jù),如果存在則判定當(dāng)前寫操作命中,將寫入的數(shù)據(jù)覆蓋掉該lba地址對應(yīng)的緩存中舊數(shù)據(jù);否則則判定當(dāng)前寫操作沒有命中,把lba地址掛到哈希值key_n對應(yīng)的緩存數(shù)據(jù)地址列表中,對應(yīng)的寫數(shù)據(jù)會直接寫到緩存中。
本發(fā)明通過改進緩存數(shù)據(jù)地址列表結(jié)構(gòu),降低寫操作對緩存數(shù)據(jù)的遍歷時間復(fù)雜度,達到提升順序?qū)懢彺嫘实募夹g(shù)效果。
附圖說明
圖1是現(xiàn)有技術(shù)線性緩存示例;
圖2是改進后的緩存方式示例。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
圖2是改進后的緩存方式示例,改進后的緩存數(shù)據(jù)地址列表新增加了緩存數(shù)據(jù)的lba地址對應(yīng)的哈希值key,key_x=lba_x%n,key_x為主機發(fā)起的寫操作的lba地址,n=每個緩存塊大小/512;固態(tài)硬盤接收到主機發(fā)起的寫操作先計算該寫操作的對應(yīng)lba地址對應(yīng)的哈希值key_n;直接判斷緩存數(shù)據(jù)地址列表是否存在哈希值為key_n的緩存數(shù)據(jù),如果存在則判定當(dāng)前寫操作命中;否則則判定當(dāng)前寫操作沒有命中,本例中假設(shè)每個緩存塊大小為4kb,每個lba對應(yīng)512b的數(shù)據(jù);主機向ssd發(fā)起4kb的數(shù)據(jù),對應(yīng)的lba地址段為[lba0,lba7],lba0對應(yīng)的哈希值為key0,所以將lba0掛載到key0對應(yīng)的列表下,以此類推,lba0~lba7在緩存數(shù)據(jù)地址列表中的分布情況如圖2所示。當(dāng)主機再發(fā)起對lba8的順序?qū)?,固件直接計算出lba8對應(yīng)的哈希值key=8%8=0,然后直接檢查緩存數(shù)據(jù)地址列表中key0對應(yīng)的列中有無lba8,發(fā)現(xiàn)該列中只有l(wèi)ba0,并沒有l(wèi)ba8,所以為非命中。在順序?qū)憟鼍跋滦录夹g(shù)的時間復(fù)雜度為o(1),大大提升了遍歷的效率。
以上所揭露的僅為本發(fā)明一種實施例而已,當(dāng)然不能以此來限定本之權(quán)利范圍,本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例的全部或部分流程,并依本發(fā)明權(quán)利要求所作的等同變化,仍屬于本發(fā)明所涵蓋的范圍。