本發(fā)明涉及固態(tài)硬盤控制技術(shù),特別涉及一種提高固態(tài)硬盤中雙核間通信效率的方法。
背景技術(shù):
固態(tài)硬盤ssd的芯片soc一般都是雙核或多核,也稱為雙cpu或多cpu,一個(gè)核就是一個(gè)cpu,固件的設(shè)計(jì)中需要考慮雙核間通信的效率與安全性。目前的固件設(shè)計(jì)中雙核間一般是通過先進(jìn)先出隊(duì)列fifo通信的,為了保證安全性雙核同一時(shí)刻不能同時(shí)操作fifo,設(shè)計(jì)中為每個(gè)fifo都配備一個(gè)信號(hào)鎖,任何一個(gè)核操作該fifo前需要拿到鎖,如果該鎖已被另一個(gè)核拿走,則需要等待該信號(hào)鎖被釋放,這就造成了時(shí)間上的損耗,即雙核間通信效率降低。
圖1是一個(gè)現(xiàn)有技術(shù)的fifo循環(huán)隊(duì)列示意圖,該fifo隊(duì)列一般包含如下信息:空閑數(shù):表示fifo中空閑的請(qǐng)求數(shù)目;請(qǐng)求數(shù):表示已提交至fifo的請(qǐng)求數(shù);隊(duì)列深度n:表示fifo可容納的請(qǐng)求總數(shù);寫入點(diǎn)p1:表示下一個(gè)寫入請(qǐng)求的位置;讀取點(diǎn)p2:表示下一個(gè)讀取請(qǐng)求的位置;鎖:cpu只有拿到鎖后才能操作fifo,操作期間另一個(gè)cpu將得不到該鎖,操作完成后釋放鎖,另一個(gè)cpu才能拿到鎖。
現(xiàn)假設(shè)雙核包括cpu0和cpu1,cpu0只提交寫入請(qǐng)求至fifo,cpu1只從fifo讀取請(qǐng)求。
cpu0提交請(qǐng)求至fifo操作如下:首先嘗試拿到鎖,如果拿不到則拿鎖失敗等待直到拿鎖成功;拿到鎖后則拿住鎖,并鎖定鎖,將請(qǐng)求寫入到寫入點(diǎn)位置,然后寫入點(diǎn)向后移一個(gè)位置,空閑數(shù)減1,請(qǐng)求數(shù)加1;釋放鎖。
cpu1從fifo中讀取請(qǐng)求操作如下:首先嘗試拿到鎖,如果拿不到則拿鎖失敗等待直到拿到鎖;拿到鎖后則拿住鎖,并鎖定鎖,從讀取點(diǎn)拿出請(qǐng)求,然后讀取點(diǎn)向后移一個(gè)位置,空閑數(shù)加1,請(qǐng)求數(shù)減1,釋放鎖。
從上面過程也可以看出為什么操作fifo一定要加鎖,因?yàn)閏pu0提交請(qǐng)求和cpu1讀取請(qǐng)求都會(huì)操作空閑數(shù)和請(qǐng)求數(shù),如果不加鎖,會(huì)存在兩個(gè)cpu同時(shí)操作空閑數(shù)或請(qǐng)求數(shù)的時(shí)刻,那么空閑數(shù)或請(qǐng)求數(shù)將會(huì)變成一個(gè)不可預(yù)期的值。正是由于必須拿到鎖才能操作fifo,中間會(huì)有等待鎖被釋放的過程,造成時(shí)間的浪費(fèi),導(dǎo)致通信效率降低。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)以上缺陷,本發(fā)明目的是如何克服了現(xiàn)有技術(shù)中采用鎖來(lái)保證通訊安全并且每次操作fifo只處理一個(gè)請(qǐng)求而導(dǎo)致效率低下的問題。
為了解決以上問題本發(fā)明提出了一種提高固態(tài)硬盤中雙核間通信效率的方法,雙核分別為cpu1和cpu0,cpu1和cpu0共同操作循環(huán)列表fifo,循環(huán)列表深度為n,fifo由每個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)隊(duì)列節(jié)點(diǎn),其特征在于cpu0或cpu1將當(dāng)前需要提交的請(qǐng)求形成請(qǐng)求節(jié)點(diǎn)列表,當(dāng)cpu0或cpu1獲得當(dāng)前隊(duì)列控制權(quán),則將請(qǐng)求節(jié)點(diǎn)列表作為一個(gè)隊(duì)列節(jié)點(diǎn)掛載到fifo,當(dāng)系統(tǒng)執(zhí)行到活動(dòng)控制權(quán)的隊(duì)列節(jié)點(diǎn)時(shí),則執(zhí)行隊(duì)列節(jié)點(diǎn)中的請(qǐng)求節(jié)點(diǎn)列表上的所有請(qǐng)求。
所述提高固態(tài)硬盤中雙核間通信效率的方法,其特征在于fifo通過信號(hào)鎖的機(jī)制控制cpu0或cpu1獲得當(dāng)前隊(duì)列控制權(quán)。
所述提高固態(tài)硬盤中雙核間通信效率的方法,其特征在于cpu0只向循環(huán)列表寫入請(qǐng)求,cpu1只從循環(huán)列表讀取請(qǐng)求;cpu0控制fifo的寫入點(diǎn)為p1,cpu1控制fifo的讀取點(diǎn)為p2;cpu0和cpu1通過判斷p1和p2的數(shù)值關(guān)系,直接判斷是否可操作fifo。
所述的提高固態(tài)硬盤中雙核間通信效率的方法,其特征在于cpu0和cpu1通過如下步驟進(jìn)行p1和p2的數(shù)值關(guān)系判定來(lái)確定如何操作,當(dāng)cpu0要執(zhí)行寫入請(qǐng)求操作時(shí),計(jì)算fifo的空閑數(shù)為k,當(dāng)p1小于p2時(shí),k=p2-p1-1;當(dāng)p1不小于p2時(shí),k=(n-1)-(p1-p2);如果k=0則等待,否則直接執(zhí)行寫入請(qǐng)求操作,寫入點(diǎn)后移一個(gè)位置;當(dāng)cpu0要執(zhí)行讀取請(qǐng)求操作時(shí),計(jì)算fifo的請(qǐng)求數(shù)為h,當(dāng)p1小于p2時(shí),h=n-(p2-p1);當(dāng)p1不小于p2時(shí),h=p1-p2;如果h=0則等待,否則直接執(zhí)行讀取請(qǐng)求操作,讀取點(diǎn)后移一個(gè)位置。
本發(fā)明通過突破現(xiàn)有fifo的常規(guī)做法,將cpu每次訪問fifo只操作一個(gè)請(qǐng)求調(diào)整為可操作多個(gè)請(qǐng)求,具體為一個(gè)請(qǐng)求列表,大大減少了cpu訪問fifo的次數(shù),對(duì)比現(xiàn)有技術(shù)顯著提升了cpu操作fifo的效率。
附圖說明
圖1是一個(gè)現(xiàn)有技術(shù)的fifo循環(huán)隊(duì)列示意圖;
圖2是改進(jìn)后的fifo循環(huán)隊(duì)列示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
圖2是改進(jìn)后的fifo循環(huán)隊(duì)列示意圖,cpu0或cpu1現(xiàn)有技術(shù)中每次提交fifo都只是提交一個(gè)請(qǐng)求作為請(qǐng)求節(jié)點(diǎn),而本發(fā)明調(diào)整為將當(dāng)前時(shí)刻對(duì)應(yīng)cpu0或cpu1需要提交的所有請(qǐng)求形成請(qǐng)求節(jié)點(diǎn)列表,一次性提交給fifo;當(dāng)cpu0或cpu1獲得當(dāng)前隊(duì)列控制權(quán),將隊(duì)列節(jié)點(diǎn)從fifo中讀取出來(lái),當(dāng)系統(tǒng)執(zhí)行到活動(dòng)控制權(quán)的隊(duì)列節(jié)點(diǎn)時(shí),則執(zhí)行隊(duì)列節(jié)點(diǎn)中的請(qǐng)求節(jié)點(diǎn)列表上的所有請(qǐng)求。假設(shè)cpu0只提交(寫入)請(qǐng)求至fifo,cpu1只從fifo讀取請(qǐng)求,那么cpu0訪問fifo前需要把此次能提交的所有請(qǐng)求形成請(qǐng)求列表,然后把這個(gè)請(qǐng)求列表提交至fifo中。同理cpu1從fifo中讀取的不再是一個(gè)請(qǐng)求,而是一個(gè)請(qǐng)求列表,cpu1需要解析這個(gè)列表,把它拆成一個(gè)個(gè)請(qǐng)求結(jié)點(diǎn)來(lái)處理。如此,請(qǐng)求總數(shù)相同情況下,cpu0和cpu1訪問fifo的次數(shù)將大大減少,從而因等待鎖被釋放造成的耗時(shí)也將減少,大大提升cpu間通信的效率。
以上所揭露的僅為本發(fā)明一種實(shí)施例而已,當(dāng)然不能以此來(lái)限定本之權(quán)利范圍,本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例的全部或部分流程,并依本發(fā)明權(quán)利要求所作的等同變化,仍屬于本發(fā)明所涵蓋的范圍。