頁(yè)面內(nèi)容共享的方法及裝置制造方法
【專利摘要】本發(fā)明提供一種頁(yè)面內(nèi)容共享的方法及裝置,其中,所述方法包括:對(duì)于第一物理頁(yè)面和第二物理頁(yè)面,讀取所述第一物理頁(yè)面的第一E-hash值、第二物理頁(yè)面的第二E-hash值;判斷所述第一E-hash值和所述第二E-hash值是否相同;如果所述第一E-hash值和所述第二E-hash值相同,則判斷所述第一物理頁(yè)面和第二物理頁(yè)面的頁(yè)面內(nèi)容是否相同;若所述第一物理頁(yè)面和第二物理頁(yè)面的頁(yè)面內(nèi)容相同,則將所述第一物理頁(yè)面和所述第二物理頁(yè)面的頁(yè)面內(nèi)容共享。上述方法解決了現(xiàn)有技術(shù)中后臺(tái)線程計(jì)算Hash值的過(guò)程中干擾其他應(yīng)用和虛擬機(jī)運(yùn)行,導(dǎo)致服務(wù)器性能下降的問(wèn)題。
【專利說(shuō)明】頁(yè)面內(nèi)容共享的方法及裝置
【技術(shù)領(lǐng)域】
[0001 ] 本發(fā)明實(shí)施例涉及通信領(lǐng)域,尤其涉及一種頁(yè)面內(nèi)容共享的方法及裝置。
【背景技術(shù)】
[0002]當(dāng)前,處理器內(nèi)集成的核個(gè)數(shù)不斷增長(zhǎng),但內(nèi)存容量的增長(zhǎng)速度較慢,使得每個(gè)核分配到的有效內(nèi)存容量呈下降趨勢(shì),進(jìn)而內(nèi)存容量成為服務(wù)器發(fā)展的瓶頸。
[0003]現(xiàn)有技術(shù)中,基于內(nèi)容的頁(yè)面共享技術(shù)(Content-Based Page Sharing,簡(jiǎn)稱CBPS )是目前被普遍采用的用于降低內(nèi)存容量壓力的主要方法,例如,通過(guò)將具有相同內(nèi)容的多個(gè)物理頁(yè)面(下述簡(jiǎn)稱“頁(yè)面”)共享到一個(gè)物理頁(yè)面空間,從而實(shí)現(xiàn)降低服務(wù)器的內(nèi)存容量的消耗,提高內(nèi)存有效利用率。
[0004]具體地,CBPS需要在操作系統(tǒng)內(nèi)核(OS Kernel)或虛擬機(jī)管理程序(Hypervisor)內(nèi)實(shí)現(xiàn),對(duì)上層應(yīng)用是完全透明的(即對(duì)其他應(yīng)用程序無(wú)需修改)。例如,操作系統(tǒng)內(nèi)核啟動(dòng)后臺(tái)線程后,后臺(tái)線程定期掃描頁(yè)面內(nèi)容,并進(jìn)行比較,如果發(fā)現(xiàn)兩個(gè)或更多個(gè)頁(yè)面的頁(yè)面內(nèi)容相同,就將每個(gè)頁(yè)面的訪問(wèn)屬性設(shè)置為寫時(shí)復(fù)制(Copy-On-Write,簡(jiǎn)稱C0W),而將它們對(duì)應(yīng)的頁(yè)表項(xiàng)都設(shè)置為指向同一個(gè)物理頁(yè)面的頁(yè)框(Page Frame),從而實(shí)現(xiàn)頁(yè)面共享。
[0005]通常,一個(gè)頁(yè)面的大小為4KB,為了比較兩個(gè)頁(yè)面是否相同,如果直接對(duì)頁(yè)面的全部?jī)?nèi)容進(jìn)行逐字節(jié)的完整比較,比較開(kāi)銷將較大。為了緩解這一問(wèn)題,后臺(tái)線程可以先對(duì)每個(gè)頁(yè)面內(nèi)容計(jì)算一個(gè)哈希(Hash)值,優(yōu)先比較不同頁(yè)面的Hash值,如果Hash值相同再對(duì)頁(yè)面的內(nèi)容進(jìn)行完整的逐字節(jié)比較,確認(rèn)頁(yè)面內(nèi)容是否相同。
[0006]然而,后臺(tái)線程負(fù)責(zé)計(jì)算頁(yè)面Hash值的過(guò)程中帶來(lái)的問(wèn)題如下:第一、占用處理器的計(jì)算資源,導(dǎo)致服務(wù)器上正常應(yīng)用程序或虛擬機(jī)得不到計(jì)算資源;第二、污染高速緩沖存儲(chǔ)器(Cache )內(nèi)有效數(shù)據(jù):為了計(jì)算頁(yè)面的Hash值,需要流式(Stream)將整個(gè)頁(yè)面內(nèi)容從頭到尾讀入到Cache中,計(jì)算好Hash值后就不再訪問(wèn)。這種大量數(shù)據(jù)的流式訪問(wèn),會(huì)將Cache內(nèi)的應(yīng)用或虛擬機(jī)的有效數(shù)據(jù)刷掉。由此,上述后臺(tái)線程的計(jì)算干擾服務(wù)器上其他應(yīng)用和虛擬機(jī)的運(yùn)行,導(dǎo)致服務(wù)器性能不穩(wěn)定。
【發(fā)明內(nèi)容】
[0007]有鑒于此,本發(fā)明實(shí)施例提供一種頁(yè)面內(nèi)容共享的方法及裝置,用于提高了后臺(tái)線程比較任意物理頁(yè)面內(nèi)容的效率,同時(shí)提高了服務(wù)器的使用性能。
[0008]第一方面,本發(fā)明實(shí)施例提供一種頁(yè)面內(nèi)容共享的方法,包括:
[0009]對(duì)于第一物理頁(yè)面和第二物理頁(yè)面,讀取所述第一物理頁(yè)面的第一 E-hash值、第二物理頁(yè)面的第二 E-hash值;
[0010]判斷所述第一 E-hash值和所述第二 E-hash值是否相同;
[0011]如果所述第一 E-hash值和所述第二 E_hash值相同,則判斷所述第一物理頁(yè)面和所述第二物理頁(yè)面的頁(yè)面內(nèi)容是否相同;
[0012]若所述第一物理頁(yè)面和所述第二物理頁(yè)面的頁(yè)面內(nèi)容相同,則將所述第一物理頁(yè)面和所述第二物理頁(yè)面的頁(yè)面內(nèi)容共享。
[0013]結(jié)合第一方面,在第一種可能的實(shí)現(xiàn)方式中,所述讀取所述第一物理頁(yè)面的第一E-hash值、第二物理頁(yè)面的第二 E-hash值,包括:
[0014]根據(jù)所述第一物理頁(yè)面的頁(yè)面號(hào)PFNl在物理內(nèi)存中讀取所述第一物理頁(yè)面的第一E-hash 值;
[0015]根據(jù)所述第二物理頁(yè)面的頁(yè)面號(hào)PFN2在物理內(nèi)存中讀取所述第二物理頁(yè)面的第二E-hash 值。
[0016]結(jié)合第一方面及上述可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述讀取所述第一物理頁(yè)面的第一 E-hash值、第二物理頁(yè)面的第二 E-hash值的步驟之前,所述方法還包括:
[0017]內(nèi)存控制器獲取所述第一物理頁(yè)面的第一 E-hash值,并根據(jù)所述第一物理頁(yè)面的頁(yè)面號(hào)PFNl將所述第一 E-hash值存放在物理內(nèi)存中,以使軟件訪問(wèn);
[0018]內(nèi)存控制器獲取所述第二物理頁(yè)面的第二 E-hash值,并根據(jù)所述第二物理頁(yè)面的頁(yè)面號(hào)PFN2將所述第二 E-hash值存放在物理內(nèi)存中,以使軟件訪問(wèn)。
[0019]結(jié)合第一方面及第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述根據(jù)所述第一物理頁(yè)面的頁(yè)面號(hào)PFNl將所述第一 E-hash值存放在物理內(nèi)存中,包括:
[0020]內(nèi)存控制器根據(jù)所述第一物理頁(yè)面的頁(yè)面號(hào)PFN1,采用頁(yè)面著色技術(shù)PageColoring將所述第一 E_hash值存放在物理內(nèi)存中;
[0021]所述根據(jù)所述第二物理頁(yè)面的頁(yè)面號(hào)PFN2將所述第二 E-hash值存放在物理內(nèi)存中,包括:
[0022]內(nèi)存控制器根據(jù)所述第二物理頁(yè)面的頁(yè)面號(hào)PFN2,采用頁(yè)面著色技術(shù)PageColoring將所述第二 E_hash值存放在物理內(nèi)存中;
[0023]結(jié)合第一方面及第二種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,所述內(nèi)存控制器獲取第一物理頁(yè)面的第一 E-hash值,包括:
[0024]內(nèi)存控制器根據(jù)所述第一物理頁(yè)面的所有Cache line的ECC碼計(jì)算所述第一物理頁(yè)面的第一 E-hash值;
[0025]所述內(nèi)存控制器獲取第二物理頁(yè)面的第二 E-hash值,包括:
[0026]內(nèi)存控制器根據(jù)所述第二物理頁(yè)面的所有Cache line的ECC碼計(jì)算所述第二物理頁(yè)面的第二 E-hash值。
[0027]結(jié)合第一方面及第四種可能的實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,所述內(nèi)存控制器根據(jù)所述第一物理頁(yè)面的所有Cache line的ECC碼計(jì)算所述第一物理頁(yè)面的第一E-hash值,包括:
[0028]內(nèi)存控制器將與所述第一物理頁(yè)面對(duì)應(yīng)的所有ECC碼進(jìn)行異或運(yùn)算,得到所述第一物理頁(yè)面的第一 E-hash值;
[0029]所述內(nèi)存控制器根據(jù)所述第二物理頁(yè)面的所有Cache line的ECC碼計(jì)算所述第二物理頁(yè)面的第二 E-hash值,包括:
[0030]內(nèi)存控制器將與所述第二物理頁(yè)面對(duì)應(yīng)的所有ECC碼進(jìn)行異或運(yùn)算,得到所述第二物理頁(yè)面的第二 E-hash值;
[0031]其中,ECC碼為所述內(nèi)存控制器以Cache line為單位進(jìn)行維護(hù)的。
[0032]第二方面,本發(fā)明實(shí)施例提供一種頁(yè)面內(nèi)容共享的裝置,包括:
[0033]讀取單元,用于讀取第一物理頁(yè)面的第一 E-hash值,第二物理頁(yè)面的第二 E_hash值;
[0034]第一判斷單元,用于判斷所述第一 E-hash值和所述第二 E-hash值是否相同;
[0035]第二判斷單元,用于在所述第一判斷單元確定所述第一 E-hash值和所述第二E-hash值相同時(shí),判斷所述第一物理頁(yè)面和所述第二物理頁(yè)面的頁(yè)面內(nèi)容是否相同;
[0036]頁(yè)面內(nèi)容共享單元,用于在所述第二判斷單元確定所述第一物理頁(yè)面和所述第二物理頁(yè)面相同時(shí),將所述第一物理頁(yè)面和所述第二物理頁(yè)面的頁(yè)面內(nèi)容共享。
[0037]結(jié)合第二方面,在第一種可能的實(shí)現(xiàn)方式中,所述讀取單元,具體用于
[0038]根據(jù)所述第一物理頁(yè)面的頁(yè)面號(hào)PFNl在物理內(nèi)存中讀取所述第一物理頁(yè)面的第一E-hash 值;
[0039]根據(jù)所述第二物理頁(yè)面的頁(yè)面號(hào)PFN2在物理內(nèi)存中讀取所述第二物理頁(yè)面的第二E-hash 值。
[0040]結(jié)合第二方面及上述可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述裝置還包括:
[0041]獲取單元,用于獲取所述第一物理頁(yè)面的第一 E-hash值,以及獲取所述第二物理頁(yè)面的第二 E-hash值;
[0042]存儲(chǔ)單元,用于根據(jù)所述第一物理頁(yè)面的頁(yè)面號(hào)PFNl將所述獲取單元獲取的第一E-hash值存放在物理內(nèi)存中,以及根據(jù)所述第二物理頁(yè)面的頁(yè)面號(hào)PFN2將所述獲取單元獲取的第二 E-hash值存放在物理內(nèi)存中,以使軟件訪問(wèn)。
[0043]結(jié)合第二方面及第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述存儲(chǔ)單元,具體用于
[0044]根據(jù)所述第一物理頁(yè)面的頁(yè)面號(hào)PFN1,采用頁(yè)面著色技術(shù)Page Coloring將所述第一 E-hash值存放在物理內(nèi)存中,以使軟件訪問(wèn);
[0045]根據(jù)所述第二物理頁(yè)面的頁(yè)面號(hào)PFN2,采用頁(yè)面著色技術(shù)Page Coloring將所述第二 E-hash值存放在物理內(nèi)存中,以使軟件訪問(wèn)。
[0046]結(jié)合第二方面及第二種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,所述獲取單元,具體用于
[0047]根據(jù)所述第一物理頁(yè)面的所有Cache line的ECC碼計(jì)算所述第一物理頁(yè)面的第一E-hash 值;
[0048]根據(jù)所述第二物理頁(yè)面的所有Cache line的ECC碼計(jì)算所述第二物理頁(yè)面的第二E-hash 值。
[0049]結(jié)合第二方面及第二種可能的實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,所述獲取單元,具體用于
[0050]將與所述第一物理頁(yè)面對(duì)應(yīng)的所有ECC碼進(jìn)行異或運(yùn)算,得到所述第一物理頁(yè)面的第一 E-hash值;
[0051]將與所述第二物理頁(yè)面對(duì)應(yīng)的所有ECC碼進(jìn)行異或運(yùn)算,得到所述第二物理頁(yè)面的第二 E-hash值;
[0052]其中,ECC碼為所述獲取單元以Cache line為單位進(jìn)行維護(hù)的。
[0053]第三方面,本發(fā)明實(shí)施例提供一種內(nèi)存控制器,包括:
[0054]哈希值E-Hash Cache緩沖單元,用于緩存和更新訪問(wèn)時(shí)間小于等于預(yù)設(shè)閾值的物理頁(yè)面的哈希E-Hash值;
[0055]存放ECC Buffer單元,用于存放被寫回的緩沖字節(jié)Cache Line對(duì)應(yīng)的錯(cuò)誤檢查和糾正碼ECC碼,以及將所述ECC碼發(fā)送至所述E-Hash Cache緩沖單元,以使所述E-HashCache緩沖單元采用所述ECC碼更新與所述ECC碼對(duì)應(yīng)的E-Hash值;
[0056]其中,所述Cache Line為所述物理頁(yè)面的Cache Line。
[0057]結(jié)合第三方面,在第一種可能實(shí)現(xiàn)的方式中,所述內(nèi)存控制器還包括:
[0058]寫隊(duì)列Write Queue單兀,用于緩存從Cache寫回Write Back到物理內(nèi)存中的Cache Line,并使所述ECC Buffer單?;谒鯟ache Line存放與所述Cache Line對(duì)應(yīng)的ECC碼。
[0059]結(jié)合第三方面及第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述ECCBuffer單元和所述Write Queue單元共享緩存標(biāo)記Tag。
[0060]由上述技術(shù)方案可知,本發(fā)明實(shí)施例的頁(yè)面內(nèi)容共享的方法及裝置,通過(guò)后臺(tái)線程讀取第一物理頁(yè)面的第一 E-hash值,和第二物理頁(yè)面的第二 E-hash值,進(jìn)而判斷第一E-hash值和第二 E-hash值是否相同,在第一 E_hash值和第二 E_hash值相同時(shí),判斷第一物理頁(yè)面和第二物理頁(yè)面的頁(yè)面內(nèi)容是否相同,進(jìn)而若第一物理頁(yè)面和第二物理頁(yè)面的頁(yè)面內(nèi)容相同,則將第一物理頁(yè)面和第二物理頁(yè)面的頁(yè)面內(nèi)容共享,提高了后臺(tái)線程比較任意物理頁(yè)面內(nèi)容的效率,同時(shí)提高了服務(wù)器的使用性能。
【專利附圖】
【附圖說(shuō)明】
[0061]為了更清楚地說(shuō)明本發(fā)明的技術(shù)方案,下面將對(duì)實(shí)施例中所需要使用的附圖作一簡(jiǎn)單地介紹,顯而易見(jiàn)地:下面附圖只是本發(fā)明的一些實(shí)施例的附圖,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得同樣能實(shí)現(xiàn)本發(fā)明技術(shù)方案的其它附圖。
[0062]圖1為現(xiàn)有技術(shù)中提供的比較頁(yè)面內(nèi)容的架構(gòu)示意圖;
[0063]圖2A為本發(fā)明一實(shí)施例提供的頁(yè)面內(nèi)容共享的方法的流程示意圖;
[0064]圖2B為本發(fā)明另一實(shí)施例提供的頁(yè)面內(nèi)容共享的方法的流程示意圖;
[0065]圖2C為本發(fā)明一實(shí)施例中采用Page Coloring加載E-Hash值的場(chǎng)景圖;
[0066]圖3為本發(fā)明一實(shí)施例提供的頁(yè)面內(nèi)容共享的裝置的結(jié)構(gòu)示意圖;
[0067]圖4A為現(xiàn)有技術(shù)中從內(nèi)存中讀數(shù)據(jù)的場(chǎng)景圖;
[0068]圖4B為現(xiàn)有技術(shù)中向內(nèi)存中寫數(shù)據(jù)的場(chǎng)景圖;
[0069]圖4C為本發(fā)明一實(shí)施例提供的獲取E-Hash值的架構(gòu)圖;
[0070]圖5A為本發(fā)明一實(shí)施例提供的內(nèi)存控制器的結(jié)構(gòu)示意圖;
[0071]圖5B為本發(fā)明一實(shí)施例提供的Tag地址共孚的不意圖;
[0072]圖6為本發(fā)明一實(shí)施例中硬件更新E-Hash值的流程示意圖;
[0073]圖7為本發(fā)明一實(shí)施例中頁(yè)面的E-Hash值被更新的流程示意圖。
【具體實(shí)施方式】
[0074]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明的技術(shù)方案進(jìn)行清楚、完整地描述。顯然,下述的各個(gè)實(shí)施例都只是本發(fā)明一部分的實(shí)施例?;诒景l(fā)明下述的各個(gè)實(shí)施例,本領(lǐng)域普通技術(shù)人員即使沒(méi)有作出創(chuàng)造性勞動(dòng),也可以通過(guò)等效變換部分甚至全部的技術(shù)特征,而獲得能夠解決本發(fā)明技術(shù)問(wèn)題,實(shí)現(xiàn)本發(fā)明技術(shù)效果的其它實(shí)施例,而這些變換而來(lái)的各個(gè)實(shí)施例顯然并不脫離本發(fā)明所公開(kāi)的范圍。
[0075]為了方便理解本發(fā)明中技術(shù)方案,先對(duì)與本發(fā)明相關(guān)的內(nèi)容進(jìn)行簡(jiǎn)單說(shuō)明。
[0076]目前,服務(wù)器的操作系統(tǒng)大多采用虛擬內(nèi)存技術(shù),故,服務(wù)器中存在虛擬頁(yè)面和物理頁(yè)面兩個(gè)概念,為區(qū)別虛擬頁(yè)面的概念,本申請(qǐng)采用物理頁(yè)面的概念,本申請(qǐng)中所提及的頁(yè)面均為物理頁(yè)面的簡(jiǎn)稱。
[0077]如圖1所示,當(dāng)前的頁(yè)面內(nèi)容共享的方案包括如下的步驟:
[0078]步驟一:后臺(tái)線程定期掃描頁(yè)面的頁(yè)面內(nèi)容,計(jì)算每個(gè)候選頁(yè)面的Hash值(哈希值一般為 32bits 或 64bits);
[0079]步驟二:選取兩個(gè)候選頁(yè)面,判斷兩個(gè)候選頁(yè)面的Hash值是否相同。
[0080]步驟三:如果Hash值不同,說(shuō)明這兩個(gè)頁(yè)面的頁(yè)面內(nèi)容肯定不同,不對(duì)這兩個(gè)頁(yè)面的頁(yè)面內(nèi)容進(jìn)行共享;
[0081]如果Hash值相同,說(shuō)明這兩個(gè)頁(yè)面的頁(yè)面內(nèi)容可能相同(也可能是Hash值沖突,例如,不同頁(yè)面內(nèi)容映射到同一個(gè)Hash值)。為了確認(rèn)頁(yè)面內(nèi)容是否相同,此時(shí),還需要進(jìn)一步對(duì)頁(yè)面內(nèi)容進(jìn)行完整的逐字節(jié)比較。
[0082]由上,對(duì)頁(yè)面的Hash值進(jìn)行比較相當(dāng)于先對(duì)頁(yè)面進(jìn)行過(guò)濾,從而避免大量無(wú)效的頁(yè)面比較,用以降低頁(yè)面內(nèi)容比較的運(yùn)行開(kāi)銷。
[0083]然而,后臺(tái)線程負(fù)責(zé)計(jì)算頁(yè)面Hash值的過(guò)程中帶來(lái)的問(wèn)題如下:第一、占用處理器的計(jì)算資源,導(dǎo)致操作系統(tǒng)上正常運(yùn)行的應(yīng)用程序或虛擬機(jī)得不到計(jì)算資源;第二、污染Cache (高速緩沖存儲(chǔ)器,簡(jiǎn)稱:高速緩存)內(nèi)有效數(shù)據(jù):為了計(jì)算頁(yè)面的Hash值,需要流式(Stream)將整個(gè)頁(yè)面內(nèi)容從頭到尾讀入到Cache中,計(jì)算好Hash值后就不再訪問(wèn)。這種大量數(shù)據(jù)的流式訪問(wèn),會(huì)將Cache內(nèi)的應(yīng)用或虛擬機(jī)的有效數(shù)據(jù)刷掉。由此,上述后臺(tái)線程的計(jì)算干擾系統(tǒng)上其他應(yīng)用和虛擬機(jī)的運(yùn)行,導(dǎo)致操作系統(tǒng)性能下降。
[0084]在本發(fā)明實(shí)施例中,針對(duì)現(xiàn)在服務(wù)器上普遍使用的錯(cuò)誤檢查和糾正碼(ErrorCorrecting Code,簡(jiǎn)稱ECC)內(nèi)存所提供的ECC碼作為頁(yè)面內(nèi)容的E-Hash (—種特殊的哈希)值,并由硬件(如下所述的內(nèi)存控制器)負(fù)責(zé)維護(hù)更新,軟件(如后臺(tái)線程)直接讀取頁(yè)面的E-Hash值進(jìn)行比較,從而避免軟件(如后臺(tái)線程)計(jì)算頁(yè)面的Hash值帶來(lái)的開(kāi)銷。
[0085]圖2A示出了本發(fā)明一實(shí)施例提供的頁(yè)面內(nèi)容共享的方法的流程示意圖,如圖2A所示,本發(fā)明實(shí)施例中的頁(yè)面內(nèi)容共享的方法如下所述。
[0086]201、對(duì)于第一物理頁(yè)面和第二物理頁(yè)面,軟件讀取所述第一物理頁(yè)面的第一E-hash值、第二物理頁(yè)面的第二 E-hash值。
[0087]202、軟件判斷所述第一 E-hash值和所述第二 E_hash值是否相同。
[0088]203、如果軟件確定所述第一 E-hash值和所述第二 E_hash值相同,則判斷所述第一物理頁(yè)面和所述第二物理頁(yè)面的頁(yè)面內(nèi)容是否相同。
[0089]當(dāng)然,如果軟件確定第一 E-hash值和第二 E_hash值不同,則軟件結(jié)束這兩個(gè)物理頁(yè)面的比較步驟。即第一 E-hash值和第二 E-hash值不同,第一物理頁(yè)面和第二物理頁(yè)面的頁(yè)面內(nèi)容肯定不同。
[0090]204、若所述第一物理頁(yè)面和所述第二物理頁(yè)面的頁(yè)面內(nèi)容相同,則將所述第一物理頁(yè)面和所述第二物理頁(yè)面的頁(yè)面內(nèi)容共享。
[0091]當(dāng)然,實(shí)際中若第一物理頁(yè)面和所述第二物理頁(yè)面的頁(yè)面內(nèi)容不同,則軟件結(jié)束這兩個(gè)物理頁(yè)面的比較步驟,即第一物理頁(yè)面和第二物理頁(yè)面的頁(yè)面內(nèi)容無(wú)法共享。
[0092]舉例來(lái)說(shuō),上述的執(zhí)行主體軟件可為在操作系統(tǒng)中執(zhí)行的任一個(gè)后臺(tái)線程。
[0093]由上述實(shí)施例可知,本實(shí)施例的頁(yè)面內(nèi)容共享的方法,通過(guò)后臺(tái)線程讀取第一物理頁(yè)面的第一 E-hash值,和第二物理頁(yè)面的第二 E-hash值,進(jìn)而判斷第一 E_hash值和第二 E-hash值是否相同,在第一 E-hash值和第二 E_hash值相同時(shí),判斷第一物理頁(yè)面和第二物理頁(yè)面的頁(yè)面內(nèi)容是否相同,進(jìn)而若第一物理頁(yè)面和第二物理頁(yè)面的頁(yè)面內(nèi)容相同,則將第一物理頁(yè)面和第二物理頁(yè)面的頁(yè)面內(nèi)容共享,提高了后臺(tái)線程比較任意物理頁(yè)面內(nèi)容的效率,同時(shí)提高了服務(wù)器的使用性能,并解決了現(xiàn)有技術(shù)中后臺(tái)線程計(jì)算Hash值的過(guò)程中干擾其他應(yīng)用和虛擬機(jī)運(yùn)行,導(dǎo)致服務(wù)器中操作系統(tǒng)性能下降的問(wèn)題。
[0094]在一種可選的實(shí)施例中,上述步驟201中的“讀取所述第一物理頁(yè)面的第一E-hash值、第二物理頁(yè)面的第二 E-hash值”可包括如下圖中未示出的子步驟2011:
[0095]2011、根據(jù)所述第一物理頁(yè)面的頁(yè)面號(hào)(Page Frame Number,簡(jiǎn)稱PFN) I在物理內(nèi)存中讀取所述第一物理頁(yè)面的第一 E-hash值;
[0096]根據(jù)所述第二物理頁(yè)面的PFN2在物理內(nèi)存中讀取所述第二物理頁(yè)面的第二E-hash 值。
[0097]舉例來(lái)說(shuō),內(nèi)存控制器中,E-Hash值的Tag可包括頁(yè)面號(hào)信息:PFN ;PFN代表對(duì)應(yīng)Cache中存放的E-Hash值的頁(yè)面號(hào)。
[0098]例如,目前的64位系統(tǒng)(如x86_64),其有效的地址一般為48位,扣除最后的12位頁(yè)內(nèi)偏移,所以頁(yè)面號(hào)只需要36位。
[0099]當(dāng)前,Cache包括數(shù)據(jù)Cache和指令Cache。本實(shí)施例中前述的第一 E_hash值、第二E-hash值均為存儲(chǔ)在物理內(nèi)存的數(shù)據(jù)Cache中,用以方便軟件如后臺(tái)線程的直接訪問(wèn)。
[0100]在第二種可選的實(shí)施例中,在上述的步驟201之前,本實(shí)施例中的頁(yè)面共享的方法還包括如下圖2B中所示的步驟200。
[0101]200、內(nèi)存控制器獲取所述第一物理頁(yè)面的第一 E-hash值,并根據(jù)所述第一物理頁(yè)面的頁(yè)面號(hào)PFNl將所述第一E-hash值存放在物理內(nèi)存中,以使軟件訪問(wèn);以及獲取第二物理頁(yè)面的第二 E-hash值,并根據(jù)所述第二物理頁(yè)面的頁(yè)面號(hào)PFN2將所述第二 E_hash值存放在物理內(nèi)存中,以使軟件訪問(wèn)。
[0102]舉例來(lái)說(shuō),獲取第一物理頁(yè)面的第一 E-hash值,可包括下述圖中未示出的子步驟:
[0103]2001、內(nèi)存控制器根據(jù)所述第一物理頁(yè)面的所有Cache line的ECC碼計(jì)算所述第一物理頁(yè)面的第一 E-hash值。
[0104]在具體的應(yīng)用中,根據(jù)第一物理頁(yè)面的所有Cache line的ECC碼計(jì)算所述第一物理頁(yè)面的第一 E-hash值,可具體為:
[0105]內(nèi)存控制器將與所述第一物理頁(yè)面對(duì)應(yīng)的所有ECC碼進(jìn)行異或運(yùn)算(如圖4C所示),得到所述第一物理頁(yè)面的第一 E-hash值。
[0106]相應(yīng)地,獲取第二物理頁(yè)面的第二 E-hash值,可包括:
[0107]2002、內(nèi)存控制器根據(jù)所述第二物理頁(yè)面的所有Cache line的ECC碼計(jì)算所述第二物理頁(yè)面的第二 E-hash值。
[0108]在具體的應(yīng)用中,根據(jù)所述第二物理頁(yè)面的所有Cache line的ECC碼計(jì)算所述第二物理頁(yè)面的第二 E-hash值,可具體為:
[0109]內(nèi)存控制器將所述第二物理頁(yè)面對(duì)應(yīng)的所有ECC碼進(jìn)行異或運(yùn)算(如圖4C所示),得到所述第二物理頁(yè)面的第二 E-hash值。
[0110]其中,ECC碼為當(dāng)前DRAM內(nèi)存中存儲(chǔ)的,其隨數(shù)據(jù)一起被讀入內(nèi)存控制器中進(jìn)行計(jì)算和/或校驗(yàn)的,且ECC碼為內(nèi)存控制器以Cache line為單位進(jìn)行維護(hù)的。
[0111]也就是說(shuō),所述第一物理頁(yè)面的所有的Cache line的ECC碼在內(nèi)存控制器中進(jìn)行計(jì)算和校驗(yàn);所述第二物理頁(yè)面的所有的Cache line的ECC碼在內(nèi)存控制器中進(jìn)行計(jì)算和校驗(yàn)。
[0112]可以理解的是,在現(xiàn)有內(nèi)存控制器的實(shí)現(xiàn)中,ECC碼是以Cache Line為單位進(jìn)行存儲(chǔ),計(jì)算和校驗(yàn)的,Cache Line的大小為64B。而一個(gè)物理頁(yè)面大小通常為4KB,其包含64個(gè)Cache Line?,F(xiàn)有的ECC內(nèi)存都有專門的DRAM芯片來(lái)存放ECC碼,但是現(xiàn)有的ECC碼沒(méi)有提供接口給軟件來(lái)訪問(wèn),并且在內(nèi)存控制器中校驗(yàn)完后,ECC碼就會(huì)被丟棄,而只將數(shù)據(jù)返回給處理器如Cache。
[0113]可選地,為使存放在物理內(nèi)存中的E-hash值(如上所述的第一 E-hash值、第二E-hash值)在軟件讀取時(shí)不對(duì)物理內(nèi)存中的其他數(shù)據(jù)進(jìn)行污染,本發(fā)明實(shí)施例中還可采用當(dāng)前的頁(yè)面著色技術(shù)(Page Coloring)存儲(chǔ)物理頁(yè)面對(duì)應(yīng)的E_hash值,限制E_hash值存放在制定有限幾種頁(yè)面顏色的物理內(nèi)存中,如圖2C所示;而對(duì)其他數(shù)據(jù)的頁(yè)面顏色不進(jìn)行限制。這樣軟件讀取E-hash值僅僅影響放入與之相同頁(yè)面顏色的數(shù)據(jù),其他頁(yè)面顏色的數(shù)據(jù)不會(huì)被讀取的E-hash值刷掉。圖2C中采用不同圖案代表各種不同的頁(yè)面顏色。另外,前述的“頁(yè)面顏色”實(shí)際上對(duì)應(yīng)Cache中的部分空間,限制E-Hash值可用的“頁(yè)面顏色”實(shí)際上就是限制其可用的Cache空間,從而降低對(duì)Cache內(nèi)其他數(shù)據(jù)的干擾,本實(shí)施例僅為舉例說(shuō)明。
[0114]例如,內(nèi)存控制器根據(jù)所述第一物理頁(yè)面的頁(yè)面號(hào)PFN1,采用Page Coloring將所述第一 E-hash值存放在物理內(nèi)存中;以及
[0115]根據(jù)所述第二物理頁(yè)面的頁(yè)面號(hào)PFN2,采用Page Coloring將所述第二 E_hash值存放在物理內(nèi)存中。
[0116]上述實(shí)施例中的頁(yè)面內(nèi)容共享的方法,提高了軟件如后臺(tái)線程比較任意物理頁(yè)面內(nèi)容的效率,同時(shí)提高了服務(wù)器的使用性能,并解決了現(xiàn)有技術(shù)中后臺(tái)線程計(jì)算Hash值的過(guò)程中干擾其他應(yīng)用和虛擬機(jī)的運(yùn)行,導(dǎo)致服務(wù)器中操作系統(tǒng)性能下降的問(wèn)題。
[0117]圖3示出了本發(fā)明一實(shí)施例提供的頁(yè)面內(nèi)容共享的裝置的流程示意圖,如圖3所示,本實(shí)施例的頁(yè)面內(nèi)容共享的裝置包括:讀取單元31、第一判斷單元32、第二判斷單元33和頁(yè)面內(nèi)容共享單元34 ;
[0118]其中,讀取單元31用于讀取第一物理頁(yè)面的第一 E-hash值,第二物理頁(yè)面的第二E-hash 值;
[0119]第一判斷單元32用于判斷所述第一 E-hash值和所述第二 E_hash值是否相同;
[0120]第二判斷單元33用于在所述第一判斷單元32確定所述第一 E-hash值和所述第二E-hash值相同時(shí),判斷所述第一物理頁(yè)面和所述第二物理頁(yè)面的頁(yè)面內(nèi)容是否相同;
[0121]頁(yè)面內(nèi)容共享單元34用于在所述第二判斷單元33確定所述第一物理頁(yè)面和所述第二物理頁(yè)面相同時(shí),將所述第一物理頁(yè)面和所述第二物理頁(yè)面的頁(yè)面內(nèi)容共享。
[0122]在一種可選的實(shí)現(xiàn)場(chǎng)景中,所述讀取單元31具體用于,根據(jù)所述第一物理頁(yè)面的PFNl在物理內(nèi)存中讀取所述第一物理頁(yè)面的第一 E-hash值;
[0123]根據(jù)所述第二物理頁(yè)面的PFN2在物理內(nèi)存中讀取所述第二物理頁(yè)面的第二E-hash 值。
[0124]在第二種可選的實(shí)施例中,在圖3所示的頁(yè)面內(nèi)容共享的裝置的基礎(chǔ)上,頁(yè)面內(nèi)容共享的裝置還包括圖中未示出的獲取單元35和存儲(chǔ)單元36 ;
[0125]其中,獲取單元35用于獲取所述第一物理頁(yè)面的第一 E-hash值,以及獲取所述第二物理頁(yè)面的第二 E-hash值;
[0126]存儲(chǔ)單元36用于根據(jù)所述第一物理頁(yè)面的頁(yè)面號(hào)PFNl將所述獲取單元獲取的第一E-hash值存放在物理內(nèi)存中,以及根據(jù)所述第二物理頁(yè)面的頁(yè)面號(hào)PFN2將所述獲取單元獲取的第二 E-hash值存放在物理內(nèi)存中,以使軟件訪問(wèn)。
[0127]可選地,存儲(chǔ)單元36具體用于,根據(jù)所述第一物理頁(yè)面的PFN1,采用頁(yè)面著色技術(shù)Page Coloring將所述第一 E_hash值存放在物理內(nèi)存中,以使軟件訪問(wèn);
[0128]根據(jù)所述第二物理頁(yè)面的PFN2,采用頁(yè)面著色技術(shù)Page Coloring將所述第二E-hash值存放在物理內(nèi)存中,以使軟件訪問(wèn)。
[0129]在另一可選的實(shí)現(xiàn)場(chǎng)景中,所述獲取單元35具體用于,根據(jù)所述第一物理頁(yè)面的所有Cache line的ECC碼計(jì)算所述第一物理頁(yè)面的第一 E_hash值;
[0130]根據(jù)所述第二物理頁(yè)面的所有Cache line的ECC碼計(jì)算所述第二物理頁(yè)面的第二E-hash 值。
[0131]例如,所述獲取單元358具體用于,將與所述第一物理頁(yè)面對(duì)應(yīng)的所有ECC碼進(jìn)行異或運(yùn)算,得到所述第一物理頁(yè)面的第一 E-hash值;
[0132]將與所述第二物理頁(yè)面對(duì)應(yīng)的所有ECC碼進(jìn)行異或運(yùn)算,得到所述第二物理頁(yè)面的第二 E-hash值;
[0133]其中,ECC碼為所述獲取單元以Cache line為單位進(jìn)行維護(hù)的。
[0134]上述實(shí)施例中的頁(yè)面內(nèi)容共享的裝置,能夠提高后臺(tái)線程比較任意物理頁(yè)面內(nèi)容的效率,同時(shí)提高服務(wù)器的使用性能,進(jìn)而可以解決現(xiàn)有技術(shù)中后臺(tái)線程計(jì)算Hash值的過(guò)程中干擾其他應(yīng)用和虛擬機(jī)運(yùn)行,導(dǎo)致服務(wù)器中操作系統(tǒng)性能下降的問(wèn)題。
[0135]需說(shuō)明的是,前述的頁(yè)面內(nèi)容共享的裝置為舉例說(shuō)明,該裝置包括的部分單元可以是通過(guò)程序指令相關(guān)的硬件來(lái)完成,以及,該裝置所包括的部分單元為實(shí)體的硬件,本發(fā)明實(shí)施例不對(duì)其進(jìn)行限定。
[0136]以下詳細(xì)說(shuō)明如何在內(nèi)存控制器中獲取任一物理頁(yè)面的E-hash值的過(guò)程。
[0137]當(dāng)前,在服務(wù)器的ECC內(nèi)存中,最常用的是單錯(cuò)糾正-雙錯(cuò)檢測(cè)(Single ErrorCorrecting and Double Error Detecting,簡(jiǎn)稱 SEC-DED)編碼。對(duì)于 ECC 內(nèi)存,有效的數(shù)據(jù)總線寬度是64bits,而總的總線寬度是72bits,此時(shí)還需要額外的8bits來(lái)傳送冗余校驗(yàn)碼信息即ECC碼,進(jìn)而在ECC內(nèi)存中增加有額外的內(nèi)存芯片來(lái)存放ECC碼。當(dāng)前,與ECC內(nèi)存連接的內(nèi)存控制器包括:數(shù)據(jù)緩存(Data Buffer)單元、ECC校驗(yàn)生成邏輯單元和寫隊(duì)列(Write Queue)單兀。
[0138]結(jié)合圖4A和圖4B進(jìn)行說(shuō)明,圖4A示出了內(nèi)存控制器從內(nèi)存中讀數(shù)據(jù)的場(chǎng)景圖;圖4B為現(xiàn)有技術(shù)中內(nèi)存控制器向內(nèi)存中寫數(shù)據(jù)的場(chǎng)景圖。
[0139]在圖4A和圖4B中,Cache為處理器上的高速緩沖存儲(chǔ)器即高速緩存,用于加速對(duì)內(nèi)存的訪問(wèn),Cache Line為高速緩存塊,屬于Cache和內(nèi)存之間傳送數(shù)據(jù)的基本單位。
[0140]在圖4A中,Cache每次從內(nèi)存讀回的有效數(shù)據(jù)為一個(gè)Cache Line,大小為64Bytes,分成連續(xù)的8次Burst返回(即DDR3協(xié)議中的8次Burst及連續(xù)傳送)。每次Burst返回的數(shù)據(jù)(64bits)先放到內(nèi)存控制器中的數(shù)據(jù)緩沖(即Data Buffer)單元中,同時(shí)將讀回的ECC碼(Sbits)輸入到內(nèi)存的內(nèi)存控制器的ECC校驗(yàn)生成邏輯單元進(jìn)行校驗(yàn),用以判斷是否出錯(cuò)。
[0141]如果沒(méi)有出錯(cuò),ECC校驗(yàn)生成邏輯單元就將該ECC碼丟掉,而只將有效數(shù)據(jù)返回給Cache ;如果發(fā)現(xiàn)一位錯(cuò),ECC校驗(yàn)生成邏輯單元能夠自動(dòng)將其糾正,而返回正確的有效數(shù)據(jù),然后向操作系統(tǒng)報(bào)告出錯(cuò)信息;如果發(fā)現(xiàn)多位錯(cuò),則無(wú)法糾正,需立即向操作系統(tǒng)報(bào)告出錯(cuò)信息,并由操作系統(tǒng)來(lái)處理錯(cuò)誤。
[0142]圖4B示出了將Cache內(nèi)數(shù)據(jù)寫回到內(nèi)存的過(guò)程,當(dāng)一個(gè)Dirty(被改寫的)的CacheLine被替換出來(lái)的時(shí)候,需要向內(nèi)存寫回?cái)?shù)據(jù),在將數(shù)據(jù)放入內(nèi)存控制器的Data Buffer單元的同時(shí),ECC校驗(yàn)生成邏輯單元負(fù)責(zé)計(jì)算生成對(duì)應(yīng)的新的ECC碼(即每64bits數(shù)據(jù)對(duì)應(yīng)生成8bits ECC碼)。
[0143]通常,寫回的數(shù)據(jù)并不是立即被寫回到內(nèi)存,而是先緩存在內(nèi)存控制器內(nèi)的WriteQueue單元內(nèi)(Write Queue 一般大小為32或64),等到Write Queue單元快滿的時(shí)候,再連續(xù)將數(shù)據(jù)寫回到內(nèi)存中,用以優(yōu)化內(nèi)存讀寫性能。
[0144]由上可知,內(nèi)存控制器維護(hù)ECC碼是以Cache Line為單位的。對(duì)于當(dāng)前4KB的頁(yè)面(Page),包含64個(gè)Cache Line。為了利用前述的ECC碼來(lái)生成每個(gè)頁(yè)面的ECC-Hash值(下述簡(jiǎn)稱為E-Hash值),可對(duì)頁(yè)面內(nèi)所有Cache Line對(duì)應(yīng)的ECC碼進(jìn)行一定的計(jì)算來(lái)得到頁(yè)面的E-Hash值。
[0145]舉例來(lái)說(shuō),可對(duì)頁(yè)面內(nèi)所有Cache Line的ECC碼進(jìn)行異或運(yùn)算,就可以得到頁(yè)面的唯一的E-Hash值,如圖4C所示,此時(shí)頁(yè)面的E-Hash值的大小為64bits。本實(shí)施例僅為舉例說(shuō)明,在具體應(yīng)用中,獲取頁(yè)面的唯一的E-Hash值的計(jì)算方式可以有多種,本發(fā)明實(shí)施例不對(duì)其進(jìn)行限定。
[0146]可以理解的是,頁(yè)面的E-Hash值同ECC碼類似,可以由硬件(如內(nèi)存控制器)來(lái)負(fù)責(zé)自動(dòng)維護(hù)更新,而軟件(如后臺(tái)線程)只需要直接將其讀出并進(jìn)行比較,而不再計(jì)算頁(yè)面的Hash值,進(jìn)而可減少服務(wù)器的開(kāi)銷,優(yōu)化服務(wù)器的性能。
[0147]具體地,下述舉例說(shuō)明軟件(如后臺(tái)程序)訪問(wèn)E-Hash值的相關(guān)內(nèi)容。
[0148]為了軟件能夠訪問(wèn)到頁(yè)面對(duì)應(yīng)的E-Hash值,需要在虛擬機(jī)管理程序(Hypervisor)或操作系統(tǒng)(Operating System,簡(jiǎn)稱OS)內(nèi)核空間中保留一定的物理內(nèi)存區(qū)域來(lái)存放頁(yè)面的E-Hash值,硬件更新的E-Hash值最終都會(huì)被寫回到這個(gè)物理內(nèi)存區(qū)域中。
[0149]當(dāng)然,對(duì)于操作系統(tǒng)內(nèi)核或虛擬機(jī)管理程序(Hypervisor),可為代表每個(gè)頁(yè)面屬性的Page結(jié)構(gòu)體增加一個(gè)屬性,即增加軟件訪問(wèn)E-Hash值的接口?;蛘?,在其他實(shí)施例中,操作系統(tǒng)或Hypervisor也可以獨(dú)立申請(qǐng)一段連續(xù)的物理內(nèi)存空間來(lái)依次存放頁(yè)面的E-Hash值,進(jìn)而提高對(duì)E-Hash值訪問(wèn)的局部性。
[0150]舉例來(lái)說(shuō),每個(gè)4KB頁(yè)面需要存放64bits的E-Hash值,由于64bits: 4KB=1:512,所以其內(nèi)存開(kāi)銷較低。例如,對(duì)于16GB的物理內(nèi)存,僅需要保留32MB的空間來(lái)存放E-Hash值。
[0151]進(jìn)一步地,上述增加頁(yè)面的屬性,可以理解如下:當(dāng)前的OS內(nèi)核中,為每個(gè)物理內(nèi)存頁(yè)面都維護(hù)對(duì)應(yīng)的屬性信息集合,本實(shí)施例中將頁(yè)面的E-Hash值作為新增的屬性加入到這個(gè)屬性集合中,方便軟件直接訪問(wèn)。例如,對(duì)于64bits的計(jì)算機(jī)系統(tǒng),可以使用一個(gè)unsigned long數(shù)值就可以存放E-Hash屬性即E-Hash值,例如名稱可為E-Hash屬性。
[0152]為更好的理解本發(fā)明實(shí)施例中的提及的物理頁(yè)面的E-Hash值,下述舉例說(shuō)明硬件更新E-Hash值的過(guò)程。
[0153]在本實(shí)施例中,為了擴(kuò)展硬件使其支持并維護(hù)頁(yè)面的E-Hash值,需要在內(nèi)存控制器中增加兩個(gè)緩沖單元:ECC Buffer單元和E-Hash Cache緩沖單元,如圖5A所示。
[0154]E-Hash Cache緩沖單元,用于緩存和更新訪問(wèn)時(shí)間小于等于預(yù)設(shè)閾值的物理頁(yè)面的E-Hash值,即用于緩存和更新最近訪問(wèn)的物理頁(yè)面的E-Hash值;
[0155]ECC Buffer單元,用于存放被寫回的緩沖字節(jié)Cache Line對(duì)應(yīng)的錯(cuò)誤檢查和糾正碼ECC碼,以及將所述ECC碼發(fā)送至所述E-Hash Cache緩沖單元,以使所述E-Hash Cache緩沖單元采用所述ECC碼更新與所述ECC碼對(duì)應(yīng)的E-Hash值;
[0156]其中,所述Cache Line為所述物理頁(yè)面的Cache Line。
[0157]在具體的應(yīng)用中,內(nèi)存控制器還可包括:Write Queue單元,該Write Queue單元用于緩存從Cache寫回(Write Back)到物理內(nèi)存中的Cache Line,并使所述ECC Buffer單元基于所述Cache Line存放與所述Cache Line對(duì)應(yīng)的ECC碼。
[0158]可以理解的是,Write Queue單元緩存寫回到物理內(nèi)存的數(shù)據(jù),而從物理內(nèi)存讀回的數(shù)據(jù)都是直接送到Cache中,不會(huì)放入Write Queue單元。
[0159]通常,被改寫過(guò)的Cache Line數(shù)據(jù)(Dirty)在被從Cache中替換出來(lái)的時(shí)候才會(huì)將數(shù)據(jù)放入Write Queue單元,其稱為寫回(Write Back)操作。
[0160]具體地,在圖5A中,ECC Buffer單兀存放從Cache中寫回的Cache Line對(duì)應(yīng)的完整ECC碼,而E-Hash Cache緩沖單元存放最近被訪問(wèn)和更新的頁(yè)面對(duì)應(yīng)的E-Hash值,如果被訪問(wèn)頁(yè)面的E-Hash值在Cache中命中(B卩,將經(jīng)常訪問(wèn)的數(shù)據(jù)放在處理器的Cache中,這樣下次訪問(wèn)可以直接在Cache中讀取,將此稱為在Cache命中,一旦命中就不需要訪問(wèn)內(nèi)存,用以提高操作系統(tǒng)的提高性能),進(jìn)而可不需要訪問(wèn)內(nèi)存,從而提高對(duì)E-Hash值訪問(wèn)的性能。
[0161]當(dāng)然,從內(nèi)存中讀回?cái)?shù)據(jù),與上述圖4A基本相同。而只有當(dāng)向內(nèi)存寫回?cái)?shù)據(jù)的時(shí)候,,如圖5A所示,需要重新計(jì)算ECC碼,并將ECC碼放入ECC Buffer單元中。ECC Buffer單元的大小與Write Queue單元的大小(如緩存多少個(gè)Cache Line的個(gè)數(shù)/項(xiàng)數(shù))保持一致,保證不會(huì)溢出。
[0162]ECC Buffer單兀和Write Queue單兀可以同步維護(hù),并且ECC Buffer單??梢怨蚕鞼rite Queue單元內(nèi)待寫回Cache Line數(shù)據(jù)的Tag,從而節(jié)省空間,如圖5B所示。
[0163]可以理解的是,Tag用于指緩存標(biāo)記,即內(nèi)存地址的高位部分,用于比較判斷訪問(wèn)的物理內(nèi)存位置是否在Cache命中。
[0164]圖5B中ECC Buffer單??墒褂肳rite Queue內(nèi)的Tag中的Cache Line地址。而E-Hash Cache緩沖單元?jiǎng)t可采用常用的類最近最少使用算法(Least Recently Used,簡(jiǎn)稱LRU)替換策略,例如采用LRU替換策略可確定將哪一個(gè)物理頁(yè)面的E-hash值替換出去,從而能夠利用頁(yè)面訪問(wèn)的局部性,進(jìn)而使用常用的Write-Back策略。
[0165]其中,E-HashCache 緩沖單兀中包括多個(gè) E-Hash Cache Line。(即 Cache Line是Cache的基本組成單位),每個(gè)E-Hash Cache Line需要維護(hù)對(duì)應(yīng)的Tag, E-Hash值的Tag主要包括如下信息內(nèi)容:
[0166]第一、PFN,代表對(duì)應(yīng)Cache內(nèi)存放的E-Hash值的頁(yè)面號(hào)。
[0167]舉例來(lái)說(shuō),64位系統(tǒng)(如x86_64),其有效的地址一般為48位,扣除最后的12位頁(yè)內(nèi)偏移,所以頁(yè)面號(hào)只需要36位。
[0168]第二、Dirty位(被改寫的位),代表Cache內(nèi)頁(yè)面的E-Hash值是否被改寫過(guò),如果被改寫過(guò),硬件將其設(shè)置為1,那么當(dāng)它被替換出去的時(shí)候,需要寫回到內(nèi)存中;如果沒(méi)被改寫過(guò),其值為0,這時(shí)不需要將其寫回到內(nèi)存。這只需要I位即可。
[0169]第三、Valid位(有效位),代表Cache內(nèi)存放的E-Hash值是否有效,如果為1,代表有效,如果為0,代表無(wú)效。這也只需要I位即可。
[0170]為了 E-Hash Cache緩沖單元的Tag對(duì)齊,可以設(shè)置每個(gè)Tag位數(shù)為40,前面用了38位,剩下的2位作為保留位,可用于其它用途,如可用于指導(dǎo)Cache替換策略等??梢哉f(shuō)明的是,當(dāng)前的E-hash Cache只存放部分頁(yè)面的E_hash值,需要將舊的數(shù)據(jù)替換出去才能放入新的被訪問(wèn)到的頁(yè)面的E-hash值。
[0171]另外,為了與當(dāng)前的DDR3訪存協(xié)議保持讀寫訪問(wèn)粒度一致,可以將每8個(gè)頁(yè)面的E-Hash (64bits)值作為一個(gè)整體來(lái)讀寫(這樣Burst8次就是一個(gè)Cache Line64Bytes),8個(gè)頁(yè)面的E-Hash值可以共享一個(gè)Tag,這時(shí)Tag內(nèi)存放的是第一個(gè)頁(yè)面的PFN。
[0172]為了保證E-Hash Cache緩沖單元的較高命中率,可以設(shè)置E-HashCache緩沖單元的項(xiàng)數(shù)(即大小)至少為ECC Buffer單元的項(xiàng)數(shù)的8倍,其需要的容量開(kāi)銷仍然較小。例如,大小為64的Write Queue單元,其對(duì)應(yīng)ECC Buffer單元需要的空間為64*64bits=512Bytes,而 E-Hash Cache 緩沖單兀的大小為 8*64*64bits+8*64*40bits< 6.5KBytes,所以總空間小于7KBytes。
[0173]圖6示出了硬件支持E-Hash值更新的數(shù)據(jù)寫回示意圖。當(dāng)一個(gè)Cache Line被寫回到Write Queue單元(圖6中簡(jiǎn)稱WQ)的時(shí)候,為了維護(hù)寫回?cái)?shù)據(jù)的一致性,每次寫回?cái)?shù)據(jù)都需要依次查詢Write Queue單元內(nèi)的緩存數(shù)據(jù)的Tag,判斷是否已經(jīng)有對(duì)同一個(gè)CacheLine的寫回?cái)?shù)據(jù)。
[0174]與查詢Write Queue單元內(nèi)的緩存數(shù)據(jù)的Tag的步驟并行的步驟為,硬件將寫回的數(shù)據(jù)輸入到ECC校驗(yàn)生成邏輯單元計(jì)算產(chǎn)生新的ECC碼,而ECC Buffer單元的一致性維護(hù)總是與Write Queue單元的一致性維護(hù)同步進(jìn)行。
[0175]如果不存在對(duì)同一個(gè)Cache Line的寫回?cái)?shù)據(jù),就將這個(gè)新寫回的數(shù)據(jù)放到WriteQueue單元中的隊(duì)尾,對(duì)應(yīng)地將新生成的ECC碼放入ECC Buffer單元中的隊(duì)尾,更新WriteQueue單兀中隊(duì)尾的Tag, ECC Buffer單兀和Write Queue單兀共享這個(gè)Tag。
[0176]如果對(duì)應(yīng)Cache Line已有寫回的舊數(shù)據(jù),那么將Write Queue單元中對(duì)應(yīng)項(xiàng)的舊數(shù)據(jù)替換成新寫回的數(shù)據(jù),而相應(yīng)地將ECC Buffer單元中對(duì)應(yīng)項(xiàng)的舊ECC碼替換成新生成的ECC碼,此時(shí),ECC Buffer單元和Write Queue單元還是共享這個(gè)Tag。
[0177]可以理解的是,當(dāng)Write Queue單元快滿的時(shí)候,需要將Write Queue單元內(nèi)的多個(gè)寫請(qǐng)求連續(xù)寫回內(nèi)存,在這個(gè)過(guò)程中,可對(duì)應(yīng)將ECC Buffer單元內(nèi)的ECC碼更新到頁(yè)面的E-Hash值中,更新E-Hash值的流程如圖7所示:
[0178]步驟一:對(duì)于ECC Buffer單元內(nèi)的待寫回的ECC碼,首先查詢對(duì)應(yīng)Write Queue單元內(nèi)的Tag,計(jì)算所屬頁(yè)面的PFN(例如,對(duì)4KB頁(yè)面及64B的Cache Line,從Cache Line計(jì)算PFN的方法是:將Cache Line地址右移6位即可得到對(duì)應(yīng)的PFN);
[0179]步驟二:使用計(jì)算得到的PFN查詢E-Hash Cache緩沖單元內(nèi)的Tag,判斷E-Hash值是否在Cache中命中;
[0180]步驟三:如果命中,那么可以直接將ECC碼更新到對(duì)應(yīng)頁(yè)面的E-Hash值中,并將對(duì)應(yīng)項(xiàng)的Dirty位設(shè)置為I。
[0181]應(yīng)注意,將ECC碼更新到頁(yè)面E-Hash值的方式可為:對(duì)于采用ECC碼進(jìn)行異或計(jì)算得到的E-Hash值,將Cache內(nèi)存的E-Hash值的舊值與這個(gè)ECC碼進(jìn)行異或計(jì)算即可得到頁(yè)面新的E-Hash值。
[0182]步驟四:如果E-Hash值不在Cache中命中,那么需要先從內(nèi)存中將對(duì)應(yīng)頁(yè)面的E-Hash值取回到Cache中,然后才能進(jìn)行更新。此時(shí),與數(shù)據(jù)Cache —樣,需要選擇一個(gè)E-Hash值替換出去(如選擇LRU位置),如果被替換出去的E-Hash值對(duì)應(yīng)的Dirty為1,還需要先將其寫回到內(nèi)存中。
[0183]由上,硬件實(shí)現(xiàn)自動(dòng)維護(hù)Page的E-Hash值,并寫回到物理內(nèi)存中。例如,內(nèi)存控制器負(fù)責(zé)動(dòng)態(tài)計(jì)算頁(yè)面的E-hash值,并根據(jù)物理頁(yè)面的PFN將E-hash值存放到特定的物理內(nèi)存位置。軟件直接從特定物理內(nèi)存位置讀取頁(yè)面的E-hash值。
[0184]可選地,軟件讀取頁(yè)面的E-Hash值并與其他頁(yè)面的E-Hash值進(jìn)行比較的時(shí)候,可以允許E-Hash值被讀入到上層的數(shù)據(jù)Cache中,實(shí)現(xiàn)加速訪問(wèn);也可以限制E-Hash值只能被放在E-Hash Cache中,而絕不放入上層的數(shù)據(jù)Cache中。
[0185]由于頁(yè)面的E-Hash值由硬件自動(dòng)維護(hù)更新,而軟件對(duì)頁(yè)面的E-Hash值僅是只讀訪問(wèn),因此即使允許將E-Hash值讀入數(shù)據(jù)Cache,也不需要維護(hù)任何一致性信息。如果在軟件讀取E-Hash值的過(guò)程中,其值被硬件修改,這時(shí)會(huì)出現(xiàn)不一致?tīng)顩r,但是這對(duì)于頁(yè)面內(nèi)容共享的正確性是沒(méi)有任何影響的,因?yàn)榧词笶-Hash值比較出錯(cuò),后面還會(huì)對(duì)頁(yè)面進(jìn)行完整比較驗(yàn)證。
[0186]本發(fā)明實(shí)施例中的頁(yè)面內(nèi)容共享的方法可以實(shí)現(xiàn)對(duì)整個(gè)頁(yè)面內(nèi)容的共享,也可以實(shí)現(xiàn)對(duì)部分頁(yè)面(Sub-Page)的頁(yè)面內(nèi)容的共享,
[0187]上述實(shí)施例中介紹的方法都是針對(duì)整個(gè)頁(yè)面內(nèi)容共享,但是,對(duì)于那些采用部分頁(yè)面(Sub-Page)共享機(jī)制的系統(tǒng)同樣使用:對(duì)于Sub-Page粒度的共享,對(duì)應(yīng)需要以Sub-Page來(lái)維護(hù)更新它的E-Hash值,硬件負(fù)責(zé)維護(hù)更新,而軟件直接讀取Sub-Page的E-Hash值進(jìn)行比較。本發(fā)明并不局限于整頁(yè)面的共享。
[0188]本領(lǐng)域普通技術(shù)人員可以理解:實(shí)現(xiàn)上述各方法實(shí)施例的全部或部分步驟可以通過(guò)程序指令相關(guān)的硬件來(lái)完成。前述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。該程序在執(zhí)行時(shí),執(zhí)行包括上述各方法實(shí)施例的步驟;而前述的存儲(chǔ)介質(zhì)包括:ROM、RAM、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
[0189]最后應(yīng)說(shuō)明的是:以上各實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述各實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的范圍。
【權(quán)利要求】
1.一種頁(yè)面內(nèi)容共享的方法,其特征在于,包括: 對(duì)于第一物理頁(yè)面和第二物理頁(yè)面,讀取所述第一物理頁(yè)面的第一哈希E-hash值、第二物理頁(yè)面的第二哈希E-hash值; 判斷所述第一 E-hash值和所述第二 E-hash值是否相同; 如果所述第一 E-hash值和所述第二 E-hash值相同,則判斷所述第一物理頁(yè)面和所述第二物理頁(yè)面的頁(yè)面內(nèi)容是否相同; 若所述第一物理頁(yè)面和所述第二物理頁(yè)面的頁(yè)面內(nèi)容相同,則將所述第一物理頁(yè)面和所述第二物理頁(yè)面的頁(yè)面內(nèi)容共享。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述讀取所述第一物理頁(yè)面的第一E-hash值、第二物理頁(yè)面的第二 E-hash值,包括: 根據(jù)所述第一物理頁(yè)面的頁(yè)面號(hào)PFNl在物理內(nèi)存中讀取所述第一物理頁(yè)面的第一E-hash 值; 根據(jù)所述第二物理頁(yè)面的頁(yè)面號(hào)PFN2在物理內(nèi)存中讀取所述第二物理頁(yè)面的第二E-hash 值。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述讀取所述第一物理頁(yè)面的第一E-hash值、第二物理頁(yè)面的第二 E-hash值的步驟之前,所述方法還包括: 內(nèi)存控制器獲取所述第一物理頁(yè)面的第一 E-hash值,并根據(jù)所述第一物理頁(yè)面的頁(yè)面號(hào)PFNl將所述第一 E-hash值存放在物理內(nèi)存中,以使軟件訪問(wèn); 內(nèi)存控制器獲取所述第二物理頁(yè)面的第二 E-hash值,并根據(jù)所述第二物理頁(yè)面的頁(yè)面號(hào)PFN2將所述第二 E-hash值存放在物理內(nèi)存中,以使軟件訪問(wèn)。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述根據(jù)所述第一物理頁(yè)面的頁(yè)面號(hào)PFNl將所述第一 E-hash值存放在物理內(nèi)存中,包括: 內(nèi)存控制器根據(jù)所述第一物理頁(yè)面的頁(yè)面號(hào)PFN1,采用頁(yè)面著色技術(shù)Page Coloring將所述第一 E-hash值存放在物理內(nèi)存中; 所述根據(jù)所述第二物理頁(yè)面的頁(yè)面號(hào)PFN2將所述第二 E-hash值存放在物理內(nèi)存中,包括: 內(nèi)存控制器根據(jù)所述第二物理頁(yè)面的頁(yè)面號(hào)PFN2,采用頁(yè)面著色技術(shù)Page Coloring將所述第二 E-hash值存放在物理內(nèi)存中。
5.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述內(nèi)存控制器獲取第一物理頁(yè)面的第一 E-hash值,包括: 內(nèi)存控制器根據(jù)所述第一物理頁(yè)面的所有緩沖字節(jié)Cache line的錯(cuò)誤檢查和糾正碼ECC碼計(jì)算所述第一物理頁(yè)面的第一 E-hash值; 所述內(nèi)存控制器獲取第二物理頁(yè)面的第二 E-hash值,包括: 內(nèi)存控制器根據(jù)所述第二物理頁(yè)面的所有Cache line的ECC碼計(jì)算所述第二物理頁(yè)面的第二 E-hash值。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述內(nèi)存控制器根據(jù)所述第一物理頁(yè)面的所有Cache line的ECC碼計(jì)算所述第一物理頁(yè)面的第一 E_hash值,包括: 內(nèi)存控制器將與所述第一物理頁(yè)面對(duì)應(yīng)的所有ECC碼進(jìn)行異或運(yùn)算,得到所述第一物理頁(yè)面的第一 E-hash值; 所述內(nèi)存控制器根據(jù)所述第二物理頁(yè)面的所有Cache line的ECC碼計(jì)算所述第二物理頁(yè)面的第二 E-hash值,包括: 內(nèi)存控制器將與所述第二物理頁(yè)面對(duì)應(yīng)的所有ECC碼進(jìn)行異或運(yùn)算,得到所述第二物理頁(yè)面的第二 E-hash值; 其中,ECC碼為所述內(nèi)存控制器以Cache line為單位進(jìn)行維護(hù)的。
7.一種頁(yè)面內(nèi)容共享的裝置,其特征在于,包括: 讀取單元,用于讀取第一物理頁(yè)面的第一哈希E-hash值,第二物理頁(yè)面的第二哈希E-hash 值; 第一判斷單元,用于判斷所述第一 E-hash值和所述第二 E-hash值是否相同; 第二判斷單元,用于在所述第一判斷單元確定所述第一 E-hash值和所述第二 E-hash值相同時(shí),判斷所述第一物理頁(yè)面和所述第二物理頁(yè)面的頁(yè)面內(nèi)容是否相同; 頁(yè)面內(nèi)容共享單元,用于在所述第二判斷單元確定所述第一物理頁(yè)面和所述第二物理頁(yè)面相同時(shí),將所述第一物理頁(yè)面和所述第二物理頁(yè)面的頁(yè)面內(nèi)容共享。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述讀取單元,具體用于 根據(jù)所述第一物理頁(yè)面的頁(yè)面號(hào)PFNl在物理內(nèi)存中讀取所述第一物理頁(yè)面的第一E-hash 值; 根據(jù)所述第二物理頁(yè)面的頁(yè)面號(hào)PFN2在物理內(nèi)存中讀取所述第二物理頁(yè)面的第二E-hash 值。
9.根據(jù)權(quán)利要求7或8所述的裝置,其特征在于,所述裝置還包括: 獲取單元,用于獲取所述第一物理頁(yè)面的第一 E-hash值,以及獲取所述第二物理頁(yè)面的第二 E-hash值; 存儲(chǔ)單元,用于根據(jù)所述第一物理頁(yè)面的頁(yè)面號(hào)PFNl將所述獲取單元獲取的第一E-hash值存放在物理內(nèi)存中,以及根據(jù)所述第二物理頁(yè)面的頁(yè)面號(hào)PFN2將所述獲取單元獲取的第二 E-hash值存放在物理內(nèi)存中,以使軟件訪問(wèn)。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述存儲(chǔ)單元,具體用于 根據(jù)所述第一物理頁(yè)面的頁(yè)面號(hào)PFN1,采用頁(yè)面著色技術(shù)Page Coloring將所述第一E-hash值存放在物理內(nèi)存中,以使軟件訪問(wèn); 根據(jù)所述第二物理頁(yè)面的頁(yè)面號(hào)PFN2,采用頁(yè)面著色技術(shù)Page Coloring將所述第二E-hash值存放在物理內(nèi)存中,以使軟件訪問(wèn)。
11.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述獲取單元,具體用于 根據(jù)所述第一物理頁(yè)面的所有緩沖字節(jié)Cache line的錯(cuò)誤檢查和糾正碼ECC碼計(jì)算所述第一物理頁(yè)面的第一 E-hash值; 根據(jù)所述第二物理頁(yè)面的所有Cache line的ECC碼計(jì)算所述第二物理頁(yè)面的第二E-hash 值。
12.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述獲取單元,具體用于 將與所述第一物理頁(yè)面對(duì)應(yīng)的所有ECC碼進(jìn)行異或運(yùn)算,得到所述第一物理頁(yè)面的第一E-hash 值; 將與所述第二物理頁(yè)面對(duì)應(yīng)的所有ECC碼進(jìn)行異或運(yùn)算,得到所述第二物理頁(yè)面的第二E-hash 值; 其中,ECC碼為所述獲取單元以Cache line為單位進(jìn)行維護(hù)的。
13.—種內(nèi)存控制器,其特征在于,包括: 哈希值E-Hash Cache緩沖單元,用于緩存和更新訪問(wèn)時(shí)間小于等于預(yù)設(shè)閾值的物理頁(yè)面的哈希E-Hash值; 存放ECC Buffer單元,用于存放被寫回的緩沖字節(jié)Cache Line對(duì)應(yīng)的錯(cuò)誤檢查和糾正碼ECC碼,以及將所述ECC碼發(fā)送至所述E-Hash Cache緩沖單元,以使所述E-Hash Cache緩沖單元采用所述ECC碼更新與所述ECC碼對(duì)應(yīng)的E-Hash值; 其中,所述Cache Line為所述物理頁(yè)面的Cache Line。
14.根據(jù)權(quán)利要求13所述的內(nèi)存控制器,其特征在于,還包括: 寫隊(duì)列Write Queue單元,用于緩存從高速緩沖存儲(chǔ)器Cache寫回WriteBack到物理內(nèi)存中的Cache Line,并使所述ECC Buffer單?;谒鯟acheLine存放與所述CacheLine對(duì)應(yīng)的ECC碼。
15.根據(jù)權(quán)利要求14所述的內(nèi)存控制器,其特征在于,所述ECCBuffer單元和所述Write Queue單元共享緩存標(biāo)記Tag。
【文檔編號(hào)】G06F12/10GK104166632SQ201310186233
【公開(kāi)日】2014年11月26日 申請(qǐng)日期:2013年5月17日 優(yōu)先權(quán)日:2013年5月17日
【發(fā)明者】陳荔城, 張立新, 陳明宇, 阮元 申請(qǐng)人:華為技術(shù)有限公司, 中國(guó)科學(xué)院計(jì)算技術(shù)研究所