專利名稱:一種數據預取方法及裝置的制作方法
技術領域:
本發明涉及預取技術領域,具體而言,尤其涉及一種數據預取方法及裝置。
技術背景
隨著服務器核數的增多,服務器的處理能力不斷增強,因此要求服務器存儲介質的訪問速度也越來越快,否則服務器處理能力的增強并不會帶來服務器性能的提升。然而由于價格、工藝等方面因素的影響,高速的存儲介質容量有限,因此,如何保證服務器即將要處理的數據能夠盡可能地接近處理該數據的CPU變得越來越重要。現有技術中,通常采用預取技術來保證服務器即將要處理的數據能夠盡可能地接近處理該數據的CPU。所謂預取,就是通過預先讀取服務器即將要處理的數據并將其存放在服務器的內存中。如此,CPU 在處理該數據時,不用到訪問速度很慢的磁盤中去取,從而極大地提高了服務器的處理性能。
現有技術中,通常采用的預取機制為為服務器的全局層記錄一個歷史位置信息, 該歷史位置信息包括處理器上一次執行讀操作時讀取的數據的數據位置信息。當服務器下次發起讀操作時,則判斷該讀操作所請求讀取的數據的數據位置信息與為全局層記錄的歷史位置信息是否是相鄰的,如果相鄰,則判斷全局層滿足預取條件,啟動數據預取,提前讀取服務器即將要處理的數據,并存入內存中。并且,服務器可以為客戶端提供不同服務類型的業務,如提供郵件服務、網游服務等。其中,不同服務類型的服務器,由于其對應的數據流的特征不同,因此其啟動數據預取的機率是不相同的。發明內容
本發明實施例提供一種數據預取方法及預取裝置,可提高啟動數據預取的機率。
為了解決上述技術問題,本發明實施例提供了一種數據預取控制方法,包括
接收讀操作信令;
判斷為多層級判定架構中多個預取層級分別記錄的歷史位置信息中,是否存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息;其中,所述歷史位置信息包括為所述多層級判定架構中任一預取層級記錄的上一次讀操作所讀取的數據位置信息;
若存在,確定存在滿足預取條件的預取層級,啟動數據預取。
相應地,本發明實施例還提供了一種數據預取裝置,包括
接收模塊,用于接收讀操作信令;
位置信息判斷模塊,用于判斷為多層級判定架構中多個預取層級分別記錄的歷史位置信息中,是否存在與所述接收模塊接收的讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息;其中,所述歷史位置信息包括為所述多層級判定架構中任一預取層級記錄的上一次讀操作所讀取的數據位置信息;
數據預取模塊,用于在所述位置信息判斷模塊的判斷結果為存在時,啟動數據預取。
實施本發明實施例,具有如下有益效果
通過判斷為多層級判定架構中多個預取層級分別記錄的歷史位置信息中,是否存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息,并在判斷結果為存在時,確定存在滿足預取條件的預取層級,啟動數據預取。與現有技術中只判斷一個預取層級是否滿足預取條件的預取機制相比,本實施例能夠判斷多個預取層級是否滿足預取條件,并在任一預取層級滿足預取條件時啟動數據預取,提高了啟動數據預取的機率。
為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
圖1是本發明提供的一種數據預取方法第一實施例的流程圖2是圖1中步驟S12的第一實施例的流程圖3是本發明提供的一種數據預取方法第二實施例的流程圖4是本發明提供的一種數據預取裝置的第一實施例的結構示意圖5是圖4中位置信息判斷模塊的實施例的結構示意圖6是本發明提供的一種數據預取裝置的第二實施例的結構示意圖。
具體實施方式
下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有作出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
請參考圖1,是本發明提供的一種數據預取方法第一實施例的流程圖,所述方法包括
步驟Sl 1,接收讀操作信令;
本步驟中,當需要處理數據時,均會發起讀操作信令,以從磁盤中獲取需要處理的數據。
步驟S12,判斷為多層級判定架構中多個預取層級分別記錄的歷史位置信息中,是否存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息;其中,所述歷史位置信息包括為所述多層級判定架構中任一預取層級記錄的上一次讀操作所讀取的數據位置信息;
在本發明實施例中,在判斷是否啟動數據預取時,采用一種多層級判定架構。所述多層級判定架構包括多個預取層級,在判斷是否啟動數據預取時,可根據當前的讀操作信令,判斷該多層級判定架構中是否存在滿足預取條件的預取層級,并在存在滿足預取條件的預取層級時,啟動數據預取。
具體實現中,可通過判斷為多層級判定架構中多個預取層級分別記錄的歷史位置信息中,是否存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息的方式,判斷多層級判定架構中是否存在滿足預取條件的預取層級。若判斷為多層級判定架構中多個預取層級分別記錄的歷史位置信息中存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息時,則判斷多層級判定結構中存在滿足預取條件的預取層級, 進而可以啟動數據預取。
其中,所述多個預取層級根據多核處理裝置的系統架構的層級結構相應設定。 其中,多核處理裝置可以為多核服務器等,例如,當多核處理裝置的系統架構為NUMA(Non Uniform Memory Access 非一致內存訪問)架構時,其層級結構包括CPU層、節點層、以及全局層;相應地,多層級判定架構的預取層級則包括CPU層、節點層、以及全局層。需要說明的是,若NUMA架構中的CPU為多核時,其層級結構還包括內核層,相應地,多層級判定架構的預取層級則還包括內核層。也就是說,多層級判定架構中的預取層級是變化的,具體可以根據多核處理裝置的系統架構的不同層級結構,相應建立多層級判定架構的預取層級。
本步驟中,所述讀操作信令請求讀取的數據位置信息,指的當前讀操作信令請求讀取的數據在磁盤中的存儲位置。
本步驟中,為多層級判定結構中的一個預取層級對應記錄一個歷史位置信息,可以這樣理解,在確定了與所述讀操作信令請求讀取的數據位置信息相鄰的歷史位置信息之后,就確定了滿足預取條件的預取層級。其中,歷史位置信息包括為所述多層級判定架構中任一預取層級記錄的上一次讀操作所讀取的數據位置信息。具體地,為多層級判定架構中任一預取層級分別記錄的歷史位置信息,包括
若預取層級是CPU層,則為其記錄的歷史位置信息包括由多個子數據位置信息組成的數據位置信息,一個子數據位置信息對應CPU層中的一個CPU上一次讀操作所讀取數據的數據位置信息,具體地說,是該數據在磁盤中的存儲位置;其中,為CPU層記錄的子數據位置信息的個數與多核處理裝置系統架構中CPU的數量一一對應。
若預取層級是節點層,則為其記錄的歷史位置信息包括由多個子數據位置信息組成的數據位置信息,一個子數據位置信息對應節點層中一個節點上一次讀操作讀取數據的數據位置信息,具體地說是該數據在磁盤中的存儲位置;其中,為節點層記錄的子數據位置信息的個數與多核處理裝置系統架構中節點的數量一一對應。
若預取層級是全局層,則為其記錄的歷史位置信息包括僅由一個子數據位置信息組成的數據位置信息,該子數據位置信息對應多核處理裝置上一次讀操作所讀取數據的數據位置信息,具體地說是該數據在磁盤中的存儲位置。
本步驟中,在判斷該多層級判定架構是否存在滿足預取條件的預取層級時,對預取層級的判斷順序沒有要求,可以依次判斷任一預取層級是否滿足預取條件,例如,可將當前讀操作信令請求讀取的數據位置信息與為CPU層記錄的多個子數據位置信息分別比較, 如果判斷請求讀取的數據位置信息與為CPU層記錄的任一子數據位置信息相鄰,則進入步驟S13,以及停止判斷剩余的預取層級是否滿足預取條件。當然,也可同時判斷所有的預取層級是否滿足預取條件,即同時將記錄的各個歷史位置信息與當前讀操作信令所請求讀取的數據位置信息進行比較,若判斷記錄的各個歷史位置信息中,存在與當前讀操作信令所請求讀取的數據位置信息相鄰的任一歷史位置信息,則進入步驟S13 ;若判斷記錄的所有歷史位置信息中,均不存在與當前讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息,則只讀取所述讀操作信令請求讀取的數據。
步驟S13,確定存在滿足預取條件的預取層級,啟動數據預取。
其中,在啟動數據預取時,還需要確定預取數據的數量,具體地說,是確定需要讀取的操作塊的數量。一般地,可通過確定當前是連續第幾次預取來確定需要讀取的操作塊的數量。例如,采用增量預取的方法來確定需要讀取的操作塊的數量,即若判斷當前是第一次啟動數據預取,則讀取所述讀操作請求讀取的操作塊數量的兩倍,若是當前是連續第二次啟動數據預取,則讀取所述讀操作請求讀取的操作塊數量的四倍,依次類推。當然,確定需要讀取的操作塊數量的方法是可以動態調整的。
本實施例中,根據接收到的讀操作信令,判斷為多層級判定架構中多個預取層級分別記錄的歷史位置信息中,是否存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息,并在判斷結果為存在時,確定存在滿足預取條件的預取層級,啟動數據預取。與現有技術中只判斷一個預取層級是否滿足預取條件的預取機制相比,本實施例能夠判斷多個預取層級是否滿足預取條件,并在任一預取層級滿足預取條件時啟動數據預取, 從而提高了啟動數據預取的機率。
需要說明的是,本實施例的執行主體可以是多核處理裝置,如多核服務器等。當多核服務器采用本實施例的方法進行數據預取時,能夠保證多核服務器啟動數據預取的機率盡可能地不受其服務類型的限制,盡可能地避免了不同服務類型的多核服務器采用相同預取機制判斷其是否啟動數據預取時得到的預取機率不一樣的情況,進而提高了多核服務器的性能。
請參考圖2,是本發明圖1實施例中步驟S12的實施例的流程圖,所述方法包括
步驟S21,判斷所述讀操作信令請求讀取的數據位置信息與為多層級判定架構中默認預取層級記錄的歷史位置信息是否相鄰;
本步驟中,多層級判定架構中的默認預取層級,是預先設定的、用于判斷預取層級是否滿足預取條件的第一個預取層級,即默認預取標識從哪個預取層級開始判斷預取層級是否滿足預取條件。在NUMA架構下,默認預取層級可以為CPU層、節點層、或全局層中的任意一層。進一步地,若NUMA架構下的CPU包括多個內核時,默認預取層級則可以為內核層、 CPU層、節點層、或全局層的任一層。一般地,默認預取層級為CPU層。
本步驟中,若默認預設層級為CPU層,則將當前讀操作信令請求讀取的數據位置信息與為CPU層記錄的多個子數據位置信息分別比較,如果判斷請求讀取的數據位置信息與為默認預取層級記錄的任一子數據位置信息相鄰,則進入步驟S22,并停止判斷剩余的預取層級是否滿足預取條件;若判斷不相鄰,則進入步驟S24。當默認預設層級為其它預取層級時,判斷方法類似,在此不描述。
步驟S22,則確定存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息;
步驟S24,判斷所述讀操作信令所請求讀取的數據位置信息與為所述多層級判定架構中其它任一預取層級記錄的歷史位置信息是否相鄰;
本步驟中,判斷所述讀操作信令所請求讀取的數據位置信息與為其它任一預取層級記錄的歷史位置信息是否相鄰的方法與步驟S21類似,在此不贅述。并且,判斷所述讀操作信令所請求讀取的數據位置信息與為其它任一預取層級記錄的歷史位置信息是否相鄰的順序沒有明確的限定。一般地,若默認預取層級為CPU層,則本步驟的判斷順序可以為 先節點層,再全局層;若默認預取層級為全局層,則本步驟的判斷順序可以為先節點層, 再CPU層,若存在內核層時,最后才是內核層。本步驟中,若判斷所述讀操作信令所請求讀取的數據位置信息與為所述多層級判定架構中其它任一預取層級記錄的歷史位置信息相鄰,則進入步驟S25,若不相鄰,則確定不存在滿足預取條件的預取層級,不啟動數據預取。
步驟S25,確定存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位直fe息;
進一步地,在執行步驟SM之前,還執行步驟S23,具體為
步驟S23,判斷記錄的所述默認預取層級的命中率是否小于預設的第一閾值;其中,所述命中率為所述默認預取層級滿足預取條件的次數與未滿足預取條件的次數的比值。所述默認預取層級滿足預取條件,指的是當前讀操作信令所請求讀取的數據位置信息與為所述默認預取層級記錄的歷史位置信息相鄰。其中,第一閾值是預設的參考值,該參考值用于衡量通過判斷默認預取層級是否滿足預取條件來確定是否啟動數據預取的方式是否合理。若判斷命中率大于或等于第一閾值,則認為通過判斷當前的預取層級是否滿足預取條件來確定是否啟動數據預取的方式合理的,即認為這種方式能夠保證多核處理裝置的性能處于較佳的狀態。若判斷命中率小于第一閾值,則說明該方式不能保證多核處理裝置的處理性能,因此需要判斷其它預取層級是否滿足預取條件。
本步驟中,需要判斷命中率是否小于預設的第一閾值的原因是需要考慮開銷問題。例如,若預設的第一閾值為70%,所述默認預取層級的命中率為80%,則表示在10次讀操作中,默認預取層級8次滿足了預取條件。此時,所述命中率大于或等于預設的第一閾值,表明通過判斷默認預取層級是否滿足預取條件來確定是否啟動數據預取的方式是合理的,是能夠保證多核處理裝置的性能。
此時,若某一讀操作信令到來且因判斷默認預取層級不滿足預取條件而直接判斷其它預取層級是否滿足預取條件,由于通過判斷默認預取層級是否滿足預取條件來確定是否啟動數據預取的方式是合理的,那么當下一次讀操作到來時,由于其它應用預取層級命中率較低,那么確定是否啟動數據預取的預取層級又會從其它預取層級跳轉到該默認預取層級,如此則需要不停地判斷多個不同的預取層級是否滿足預取條件,從而消耗了較多的開銷。因此,只有在判斷當前確定是否啟動數據預取的預取層級不合理時,才判斷其它預取層級是否滿足預取條件。因此,本步驟中需要判斷默認預取層級的命中率是否小于預設的第一閾值;若否,則只讀取所述讀操作信令所請求讀取的數據,若是,則進入步驟S24。
進一步地,在步驟S25中確定存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息之后,還可包括
步驟S26,判斷該歷史位置信息對應的預取層級的命中率是否大于預設的第二閾值;
由于一個歷史位置信息對應一個預取層級,因此,在步驟S25中確定出與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息之后,即可知道該歷史信息對應的滿足預取條件的預取層級。其中,該滿足預取條件的預取層級一定不是默認預取層級。
其中,通過步驟S25中確定出的歷史位置信息對應的預取層級來確定是否啟動數據預取,并在運行一段時間后,判斷該預取層級的命中率是否大于第二閾值。其中,第二閾值是預設的參考值,該參考值用于衡量通過判斷該預取層級是否滿足預取條件來確定是否啟動數據預取的方式是否合理。若判斷結果為是,即大于預設的第二閾值,則進入步驟S27。
步驟S27,將該歷史位置信息對應的預取層級設定為默認預取層級。
若步驟S27中的判斷結果為是,則表明通過判斷該歷史位置信息對應的預取層級是否滿足預取條件來確定是否啟動數據預取的方式是合理的,因此需要將該預取層級設定為默認預取層級。如此,在下次讀操作到來時,能夠較快地判斷出滿足預取條件的預取層級,節省了開銷。
本實施例中,通過先判斷讀操作信令所請求讀取的數據位置信息與為所述多層級判定架構中默認預取層級記錄的歷史位置信息是否相鄰,以及在判斷結果為否時,再分別判斷所述讀操作信令所請求讀取的數據位置信息與為所述多層級判定架構中其它任一預取層級記錄的歷史位置信息是否相鄰的方式,達到了依次判斷多層級判定架構中是否存在滿足預取條件的預取層級的目的。
請參考圖3,是本發明提供的一種數據預取方法第二實施例的流程圖,所述方法包括
步驟S31,接收讀操作信令;
本步驟與圖1所示的實施例中步驟Sll相同,在此不重復描述。
步驟S32,判斷所有節點的剩余內存之和是否大于預設的第三閾值;
本步驟中所述的節點,指的是多核處理裝置系統架構中,距離同一塊內存距離相等的CPU的集合,所有節點的集合,則稱為全局。可以理解的是,一個節點中,包括多個CPU, 該多個CPU訪問該內存的速度相同,該內存則稱為節點中所有CPU的本地內存。
本步驟中所述的第三閾值,是預先設定的、用以判斷是否需要啟動數據預取的參考值,該參考值可以動態調整。若判斷所有節點的剩余內存(包括空閑內存和潛在可以交換出去的內存)之和小于或等于該第三閾值,則表示此時全局的內存比較小,負載較重,沒有必要啟動數據預取。若所有節點的剩余內存之和大于該第三閾值,則表明此時全局的內存較大,負載較輕,可以啟動數據預取。
步驟S33,判斷為多層級判定架構中多個預取層級分別記錄的歷史位置信息中,是否存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息;其中,所述歷史位置信息包括為所述多層級判定架構中任一預取層級記錄的上一次讀操作所讀取的數據位置信息;
步驟S34,確定存在滿足預取條件的預取層級,啟動數據預取;
步驟S33-步驟S34的操作與圖1實施例中步驟S12-步驟S13的操作相同,在此不重復描述。可以理解的是,在執行步驟S33時,可以采用圖2所示的實施例中的方法。
進一步地,由于在現有預取技術中,對于預取后得到的預取數據的存放位置并沒有充分考慮。然而,某些多核處理裝置系統架構中,例如在NUMA架構中,CPU訪問本地內存的速度比訪問其它節點的內存的速度快,若能更合理地控制預取數據的存放位置,還能進一步提高多核處理裝置的性能。因此,在本發明實施例的方法中,在啟動數據預取之后,還需要執行
步驟S35,按照處理預取數據的進程最多的CPU距離所述預取數據最近的原則,控制所述預取數據的存放位置;其中所述預取數據是啟動數據預取得到的。1
其中,啟動數據預取具體是由進程來操作的,具體實現中,步驟S35包括
若判斷啟動數據預取的進程所在的CPU處理所述預取數據的進程最多且本地剩余內存足夠大,則控制進程將所述預取數據存入該CPU的本地內存中;
若判斷啟動數據預取的進程所在的CPU處理所述預取數據的進程最多且本地剩余內存不夠時,則控制進程將所述預取數據存入該CPU臨近節點的內存中;或者控制進程將一部分預取數據存放在當前CPU的本地內存,將另一部分預取數據存入當前CPU臨近節點的內存中。
若判斷啟動數據預取的進程所在的CPU處理所述預取數據的進程少,查詢是否存在處理所述預取數據的進程最多的CPU ;若查詢到處理所述預取數據的進程最多的CPU,判斷所述處理所述預取數據的進程最多的CPU的本地剩余內存是否足夠大,若是,則控制進程將所述預取數據存入該CPU的本地內存中;若否,則控制進程所述預取數據存入該CPU臨近節點的內存中;
若未查詢到處理所述預取數據的進程最多的CPU,則控制進程將所述預取數據平均分發到處理所述預取數據的進程數量相同的CPU的本地內存中。
本實施例中,通過判斷所有節點的剩余內存之和是否大于預設的第三閾值,并在剩余內存之和大于第三閾值時判斷為多層級判定架構中多個預取層級分別記錄的歷史位置信息中,是否存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息, 并在判斷結果為存在時,啟動數據預取。如此設計,與現有技術中只判斷一個預取層級是否滿足預取條件的預取機制相比,本實施例在負載較小時,能夠判斷多個預取層級是否滿足預取條件,并在任一預取層級滿足預取條件時啟動數據預取,從而提高了啟動數據預取的機率。
當多核處理裝置采用本實施例中的方法進行數據預取時,能夠使得其啟動數據預取的機率盡可能地不受其服務類型的限制,盡可能地避免了不同服務類型的多核處理裝置采用相同數據預取控制方法判斷其是否啟動數據預取時得到的預取機率不一樣的情況,進而提高了多核處理裝置的性能。
同時,本實施例中還將預取得到的預取數據,按照操作所述預取數據進程最多的 CPU距離所述預取數據最近的原則,控制預取數據在多核處理裝置內的存放位置,從而使得預取數據盡可能地靠近操作其最多的CPU,提高了多核處理裝置獲取預取數據的速度,從而提高了所述CPU處理所述預取數據的效率,進一步提高了多核處理裝置的性能。
上述圖1-圖3對本發明實施例提供的一種數據預取方法進行了詳細的接收,下面結合圖4-圖6,對應用上述方法進行數據預取的裝置進行詳細介紹。
請參考圖4,是本發明提供的一種數據預取裝置的結構示意圖,所述裝置包括
接收模塊41,用于接收讀操作信令;
位置信息判斷模塊42,用于判斷為多層級判定架構中多個預取層級分別記錄的歷史位置信息中,是否存在與所述接收模塊41接收的讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息;其中,所述歷史位置信息包括為所述多層級判定架構中任一預取層級記錄的上一次讀操作所讀取的數據位置信息;
位置信息判斷模塊42在判斷是否啟動數據預取時,采用一種多層級判定架構。所述多層級判定架構包括多個預取層級,位置信息判斷模塊42在判斷是否啟動數據預取時,可根據當前接收模塊41接收的讀操作信令,判斷該多層級判定架構中是否存在滿足預取條件的預取層級,并在存在滿足預取條件的預取層級時,啟動數據預取。
具體實現中,位置信息判斷模塊42可通過判斷為多層級判定架構中多個預取層級分別記錄的歷史位置信息中,是否存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息的方式,判斷多層級判定架構中是否存在滿足預取條件的預取層級。若判斷為多層級判定架構中多個預取層級分別記錄的歷史位置信息中存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息時,則判斷多層級判定架構中存在滿足預取條件的預取層級,進而可以啟動數據預取。
其中,所述多個預取層級根據多核處理裝置的系統架構的層級結構相應設定。 其中,多核處理裝置可以為多核服務器等,例如,當多核處理裝置的系統架構為NUMA(Non Uniform Memory Access 非一致內存訪問)架構時,其層級結構包括CPU層、節點層、以及全局層;相應地,多層級判定架構的預取層級則包括CPU層、節點層、以及全局層。需要說明的是,若NUMA架構中的CPU為多核時,其層級結構還包括內核層,相應地,多層級判定架構的預取層級則還包括內核層。也就是說,多層級判定架構中的預取層級是變化的,具體可以根據多核處理裝置的系統架構的不同層級結構,相應建立多層級判定架構的預取層級。
其中,所述讀操作信令請求讀取的數據位置信息,指的當前讀操作信令請求讀取的數據在磁盤中的存儲位置。
其中,為多層級判定結構中的一個預取層級對應記錄一個歷史位置信息,可以這樣理解,在確定了與所述讀操作信令請求讀取的數據位置信息相鄰的歷史位置信息之后, 就確定了滿足預取條件的預取層級。其中,歷史位置信息包括為所述多層級判定架構中任一預取層級記錄的上一次讀操作所讀取的數據位置信息。具體地,為多層級判定架構中任一預取層級分別記錄的歷史位置信息,包括
若預取層級是CPU層,則為其記錄的歷史位置信息包括由多個子數據位置信息組成的數據位置信息,一個子數據位置信息對應CPU層中的一個CPU上一次讀操作所讀取數據的數據位置信息,具體地說,是該數據在磁盤中的存儲位置;其中,為CPU層記錄的子數據位置信息的個數與多核處理裝置系統架構中CPU的數量一一對應。
若預取層級是節點層,則為其記錄的歷史位置信息包括由多個子數據位置信息組成的數據位置信息,一個子數據位置信息對應節點層中一個節點上一次讀操作讀取數據的數據位置信息,具體地說是該數據在磁盤中的存儲位置;其中,為節點層記錄的子數據位置信息的個數與多核處理裝置系統架構中節點的數量一一對應。
若預取層級是全局層,則為其記錄的歷史位置信息包括僅由一個子數據位置信息組成的數據位置信息,該子數據位置信息對應多核處理裝置上一次讀操作所讀取數據的數據位置信息,具體地說是該數據在磁盤中的存儲位置。
其中,位置信息判斷模塊42在判斷該多層級判定架構是否存在滿足預取條件的預取層級時,對預取層級的判斷順序沒有要求,可以依次判斷任一預取層級是否滿足預取條件;例如,位置信息判斷模塊42可將當前讀操作信令請求讀取的數據位置信息與為CPU 層記錄的多個子數據位置信息分別比較,如果判斷請求讀取的數據位置信息與為CPU層記錄的任一子數據位置信息相鄰,則控制數據預取模塊43啟動數據預取,以及停止判斷剩余的預取層級是否滿足預取條件。當然,位置信息判斷模塊42也可同時判斷所有的預取層級是否滿足預取條件,即同時將記錄的各個歷史位置信息與當前讀操作信令所請求讀取的數據位置信息進行比較,若判斷記錄的各個歷史位置中,存在與當前讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息,則控制數據預取模塊43啟動數據預取,若判斷記錄的所有歷史信息中,均不存在與當前讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息,則位置信息判斷模塊42只讀取所述讀操作信令請求讀取的數據。
數據預取模塊43,用于在所述位置信息判斷模塊42的判斷結果為存在時,確定存在滿足預取條件的預取層級,啟動數據預取。
其中,數據預取模塊43在啟動數據預取時,還需要確定預取數據的數量,具體地說,是確定需要讀取的操作塊的數量。一般地,可通過確定當前是連續第幾次預取來確定需要讀取的操作塊的數量。例如,采用增量預取的方法來確定需要讀取的操作塊的數量,即 若判斷當前是第一次啟動數據預取,則讀取所述讀操作請求讀取的操作塊數量的兩倍,若是當前是連續第二次啟動數據預取,則讀取所述讀操作請求讀取的操作塊數量的四倍,依次類推。當然,確定需要讀取的操作塊數量的方法是可以動態調整的。
本實施例中,位置信息判斷模塊42根據接收模塊41接收的讀操作信令,判斷為多層級判定架構中多個預取層級分別記錄的歷史位置信息中,是否存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息,并在判斷結果為存在時,控制數據預取模塊43啟動數據預取。與現有技術中只判斷一個預取層級是否滿足預取條件的預取機制相比,本實施例能夠判斷多個預取層級是否滿足預取條件,并在任一預取層級滿足預取條件時啟動數據預取,從而提高了啟動數據預取的機率。
需要說明的是,當數據預取裝置為多核處理裝置,如多核服務器時,本實施例能夠使得多核服務器啟動數據預取的機率盡可能地不受其服務類型的限制,盡可能地避免了不同服務類型的多核處理服務器采用相同預取機制判斷其是否啟動數據預取時得到的預取機率不一樣的情況,進而提高了多核服務器的性能。
請參考圖5,是本發明圖4實施例中位置信息判斷模塊42的實施例的結構示意圖, 所述位置信息判斷模塊42包括
第一判斷單元51,用于判斷所述接收模塊41接收的讀操作信令所請求讀取的數據位置信息與為默認預取層級記錄的歷史位置信息是否相鄰;
其中,多層級判定架構中的默認預取層級,是預先設定的、用于判斷預取層級是否滿足預取條件的第一個預取層級,即默認預取標識從哪個預取層級開始判斷預取層級是否滿足預取條件。在NUMA架構下,默認預取層級可以為CPU層、節點層、或全局層中的任意一層。進一步地,若NUMA架構下的CPU包括多個內核時,默認預取層級則可以為內核層、CPU 層、節點層、或全局層的任一層。一般地,默認預取層級為CPU層。
其中,若默認預設層級為CPU層,第一判斷單元51則將當前讀操作信令請求讀取的數據位置信息與為CPU層記錄的多個子數據位置信息分別比較,如果判斷請求讀取的數據位置信息與記錄的任一子數據位置信息相鄰,則控制第一確定單元52的工作,并停止判斷剩余的預取層級是否滿足預取條件;若判斷不相鄰,則控制第二判斷單元53進行判斷。 當默認預設層級為其它預取層級時,判斷方法類似,在此不描述。
第一確定單元52,用于在所述第一判斷單元51的判斷結果為相鄰時,確定存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息;
第二判斷單元53,用于在所述第一判斷單元51的判斷結果為不相鄰時,判斷所述接收模塊41接收的讀操作信令所請求讀取的數據位置信息與為所述多層級判定架構中其它任一預取層級記錄的歷史位置信息是否相鄰;
第二判斷單元53判斷所述接收模塊41接收的讀操作信令所請求讀取的數據位置信息與為其它任一預取層級記錄的歷史位置信息是否相鄰的方法與第一判斷單元51的判斷方法類似,在此不贅述。并且,第二判斷單元53判斷其它任一預取層級是否滿足預取條件的順序沒有明確的限定。一般地,若默認預取層級為CPU層,則第二判斷單元53的判斷順序可以為先節點層,再全局層;若默認預取層級為全局層,則第二判斷單元53的判斷順序可以為先節點層,再CPU層,若存在內核層時,最后才是內核層。若第二判斷單元53的判斷結果為相鄰時,則控制第二確定單元M的工作,若判斷結果為否,則控制數據預取模塊43不啟動數據預取。
第二確定單元M,還用于在所述第二判斷單元53的判斷結果為相鄰時,確定存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息;
進一步地,位置信息判斷模塊42還可以包括
命中率判斷單元55,用于在所述第一判斷單元51的判斷結果為不相鄰時,判斷記錄的所述默認預取層級的命中率是否小于預設的第一閾值;其中,所述命中率為所述默認預取層級滿足預取條件的次數與未滿足預取條件的次數的比值。所述默認預取層級滿足預取條件,指的是當前讀操作信令所請求讀取的數據位置信息與為所述默認預取層級記錄的歷史位置信息相鄰。其中,第一閾值是預設的參考值,該參考值用于衡量通過判斷默認預取層級是否滿足預取條件來確定啟動數據預取的方式是否是合理的。若判斷命中率大于或等于第一閾值,則認為通過判斷當前的預取層級是否滿足預取條件來確定是否啟動數據預取的方式是合理的,即認為這種方式能夠保證多核處理裝置的性能處于較佳的狀態。其中,命中率判斷單元陽判斷命中率是否小于預設的第一閾值的原因是需要考慮開銷問題。
其中,所述第二判斷單元53,用于在所述命中率判斷單元55的判斷結果為是時, 判斷所述接收模塊41接收的讀操作信令所請求讀取的數據位置信息與為所述多層級判定架構中其它任一預取層級記錄的歷史數據位置信息是否相鄰。
所述命中率判斷單元55,還用于在所述第二確定單元M確定出存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息之后,判斷該歷史位置信息對應的預取層級的命中率是否大于預設的第二閾值;
由于一個歷史位置信息對應一個預取層級,因此,在第二確定單元64確定出與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息之后,即可知道該歷史信息對應的滿足預取條件的預取層級。其中,該滿足預取條件的預取層級一定不是默認預取層級。
通過第二確定單元M確定出的歷史位置信息對應的預取層級來控制是否啟動數據預取,并在運行一段時間后,命中率判斷單元55還用于判斷第二確定單元M確定出的歷史位置信息對應的預取層級的命中率是否大于第二閾值。其中,第二閾值是預設的參考值, 該參考值用于衡量通過判斷該預取層級是否滿足預取條件來確定是否啟動數據預取的方式能否保證多核處理裝置的性能。
進一步地,所述位置信息判斷模塊42還包括
默認預取層級設定單元56,用于在所述命中率判定判斷單元55判斷該歷史位置信息對應的預取層級的命中率大于第二閾值時,將所述第二確定單元M確定出的歷史位置信息對應的預取層級設定為默認預取層級。
其中,命中率判定判斷單元55的判斷結果是大于第二閾值時,則表明通過判斷當前的預取層級是否滿足預取條件來確定是否啟動數據預取的方式是合理的,因此默認預取層級設定單元56需要將該預取層級設定為默認預取層級。如此,在下次讀操作到來時,能夠較快地判斷出滿足預取條件的預取層級,節省了開銷。
本實施例中,通過第一判斷單元先判斷讀操作信令所請求讀取的數據位置信息與為所述多層級判定架構中默認預取層級記錄的歷史位置信息是否相鄰,以及在判斷結果為否時,再通過第二判斷單元分別判斷所述讀操作信令所請求讀取的數據位置信息與為所述多層級判定架構中其它任一預取層級記錄的歷史位置信息是否相鄰的方式,達到了依次判斷多層級判定架構中是否存在滿足預取條件的預取層級的目的。
請參考圖6,是本發明提供的一種數據預取裝置第二實施例的結構示意圖,所述裝置包括
接收模塊41,用于接收讀操作信令;
節點剩余內存判斷模塊44,用于在所述接收模塊41接收到讀操作信令后,判斷所有節點的剩余內存之和是否大于預設的第三閾值;
其中,所述節點指的是多核處理裝置系統架構中,距離同一塊內存距離相等的CPU 的集合,所有節點的集合,則稱為全局。可以理解的是,一個節點中,包括多個CPU,該多個 CPU訪問該內存的速度相同,該內存則稱為節點中所有CPU的本地內存。
所述第三閾值,是預先設定的、用以判斷是否需要啟動數據預取的參考值,該參考值可以動態調整。若節點剩余內存判斷模塊44判斷所有節點的剩余內存(包括空閑內存和潛在可以交換出去的內存)之和小于或等于該第三閾值,則表示此時全局的內存比較小, 負載較重,沒有必要啟動數據預取。若所有節點的剩余內存之和大于該第三閾值,則表明此時全局的內存較大,負載較輕,可以啟動數據預取。
位置信息判斷模塊42,用于判斷為多層級判定架構中多個預取層級分別記錄的歷史位置信息中,是否存在與所述接收模塊41接收的讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息;其中,所述歷史位置信息包括為所述多層級判定架構中任一預取層級記錄的上一次讀操作所讀取的數據位置信息;
數據預取模塊43,用于在所述位置信息判斷模塊42的判斷結果為存在時,啟動數據預取。
存放位置控制模塊45,用于按照處理預取數據的進程最多的CPU距離所述預取數據最近的原則,控制預取數據的存放位置;其中,所述預取數據是所述數據預取模塊43啟動數據預取之后得到的。
其中,啟動數據預取具體是由數據預取模塊43中的進程操作的,具體實現中,存放位置控制模塊45控制預取數據的存放位置的方式為
若判斷啟動數據預取的進程所在的CPU處理所述預取數據的進程最多且本地剩余內存足夠大,則控制進程將所述預取數據存入該CPU的本地內存中;
若判斷啟動數據預取的進程所在的CPU處理所述預取數據的進程最多且本地剩余內存不夠時,則控制進程將所述預取數據存入該CPU臨近節點的內存中;或者控制進程將一部分預取數據存放在當前CPU的本地內存,將另一部分預取數據存入當前CPU臨近節點的內存中。
若判斷啟動數據預取的進程所在的CPU處理所述預取數據的進程少,查詢是否存在處理所述預取數據的進程最多的CPU ;若查詢到處理所述預取數據的進程最多的CPU,判斷所述處理所述預取數據的進程最多的CPU的本地剩余內存是否足夠大,若是,則控制進程將所述預取數據存入該CPU的本地內存中;若否,則控制進程所述預取數據存入該CPU臨近節點的內存中;
若未查詢到處理所述預取數據的進程最多的CPU,則控制進程將所述預取數據平均分發到處理作所述預取數據的進程數量相同的CPU的本地內存中。
本實施例中,通過判斷所有節點的剩余內存之和是否大于預設的第三預設閾值, 并在剩余內存之和大于第三閾值時為多層級判定架構中多個預取層級分別記錄的歷史位置信息中,是否存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息, 并在判斷結果為存在時,啟動數據預取。如此設計,與現有技術中只判斷一個預取層級是否滿足預取條件的預取機制相比,本實施例得在負載較小時,能夠判斷多個預取層級是否滿足預取條件,并在任一預取層級的歷史位置信息滿足預取條件時啟動數據預取,從而提高了啟動數據預取的機率。
當需要說明的是,當數據預取裝置為多核處理裝置,如多核服務器時,本實施例能夠使得多核服務器啟動數據預取的機率盡可能地不受其服務類型的限制,盡可能地避免了不同服務類型的多核服務器采用相同預取機制判斷其是否啟動數據預取時得到的預取機率不一樣的情況,進而提高了多核服務器的性能。
同時,本實施例中還將預取得到的預取數據,按照操作所述預取數據進程最多的 CPU距離所述預取數據最近的原則,控制預取數據在多核處理裝置內的存放位置,從而使得預取數據盡可能地靠近操作其最多的CPU,提高了多核處理裝置獲取預取數據的速度,從而提高了所述CPU處理所述預取數據的效率,進一步提高了多核處理裝置的性能。
本領域普通技術人員可以理解實現上述實施例方法中的全部或部分流程,是可以通過計算機程序來指令相關的硬件來完成,所述的程序可存儲于一計算機可讀取存儲介質中,該程序在執行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory, ROM)或隨機存儲記憶體(Random Access Memory, RAM)等。
以上所揭露的僅為本發明較佳實施例而已,當然不能以此來限定本發明之權利范圍,本領域普通技術人員可以理解實現上述實施例的全部或部分流程,并依本發明權利要求所作的等同變化,仍屬于發明所涵蓋的范圍。
權利要求
1.一種數據預取方法,其特征在于,包括接收讀操作信令;判斷為多層級判定架構中多個預取層級分別記錄的歷史位置信息中,是否存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息;其中,所述歷史位置信息包括為所述多層級判定架構中任一預取層級記錄的上一次讀操作所讀取的數據位置信息;若存在,確定存在滿足預取條件的預取層級,啟動數據預取。
2.如權利要求1所述的方法,其特征在于,判斷為多層級判定架構中多個預取層級分別記錄的歷史位置信息中,是否存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息,包括判斷所述讀操作信令所請求讀取的數據位置信息與為多層級判定架構中默認預取層級記錄的歷史位置信息是否相鄰;若相鄰,則確定存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息;若不相鄰,判斷所述讀操作信令所請求讀取的數據位置信息與為所述多層級判定架構中其它任一預取層級記錄的歷史位置信息是否相鄰;若所述讀操作信令所請求讀取的數據位置信息與為所述多層級判定架構中其它任一預取層級記錄的歷史位置信息相鄰,確定存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息。
3.如權利要求2所述的方法,其特征在于,在判斷所述讀操作信令所請求讀取的數據位置信息與為多層級判定架構中其它任一預取層級記錄的歷史位置信息是否相鄰之前,還包括判斷記錄的所述默認預取層級的命中率是否小于預設的第一閾值;其中,所述命中率為所述默認預取層級滿足預取條件的次數與未滿足預取條件的次數的比值;若是,則執行判斷所述讀操作信令所請求讀取的數據位置信息與為所述多層級判定架構中其它任一預取層級記錄的歷史位置信息是否相鄰的步驟。
4.如權利要求2或3所述的方法,其特征在于,在所述讀操作信令所請求讀取的數據位置信息與為所述多層級判定架構中其它任一預取層級記錄的歷史位置信息相鄰,確定存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息之后,所述方法還包括判斷該歷史位置信息對應的預取層級的命中率是否大于預設的第二閾值;若大于預設的第二閾值,則將該歷史位置信息對應的預取層級設定為默認預取層級。
5.如權利要求1-4任一項所述的方法,其特征在于,所述多層級判定架構中的預取層級根據多核處理裝置的系統架構的層級結構相應設定。
6.如權利要求1-5任一項所述的方法,其特征在于,在所述啟動數據預取之后,所述方法還包括按照處理預取數據的進程最多的CPU距離所述預取數據最近的原則,控制所述預取數據的存放位置;其中所述預取數據是啟動數據預取得到的。
7.如權利要求1-5任一項所述的方法,其特征在于,在判斷為多層級判定架構中多個預取層級分別記錄的歷史位置信息中,是否存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息之前,還包括判斷所有節點的剩余內存之和是否大于預設的第三閾值,若是,則執行判斷為多層級判定架構中多個預取層級分別記錄的歷史位置信息中,是否存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息的步驟。
8.一種數據預取裝置,其特征在于,包括 接收模塊,用于接收讀操作信令;位置信息判斷模塊,用于判斷為多層級判定架構中多個預取層級分別記錄的歷史位置信息中,是否存在與所述接收模塊接收的讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息;其中,所述歷史位置信息包括為所述多層級判定架構中任一預取層級記錄的上一次讀操作所讀取的數據位置信息;數據預取模塊,用于在所述位置信息判斷模塊的判斷結果為存在時,確定存在滿足預取條件的預取層級,啟動數據預取。
9.如權利要求8所述的裝置,其特征在于,所述位置信息判斷模塊包括第一判斷單元,用于判斷所述接收模塊接收的讀操作信令所請求讀取的數據位置信息與為多層級判定架構中默認預取層級記錄的歷史位置信息是否相鄰;第一確定單元,用于在所述第一判斷單元的判斷結果為相鄰時,確定存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息;第二判斷單元,用于在所述第一判斷單元的判斷結果為不相鄰時,判斷所述接收模塊接收的讀操作信令所請求讀取的數據位置信息與為所述多層級判定架構中其它任一預取層級記錄的歷史位置信息是否相鄰;第二確定單元,還用于在所述第二判斷單元的判斷結果為相鄰時,確定存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息。
10.如權利要求9所述的裝置,其特征在于,所述位置信息判斷模塊還包括命中率判斷單元,用于在所述第一判斷單元的判斷結果為不相鄰時,判斷記錄的所述默認預取層級的命中率是否小于預設的第一閾值;其中,所述命中率為所述默認預取層級滿足預取條件的次數與未滿足預取條件的次數的比值;所述第二判斷單元,用于在所述命中率判斷單元的判斷結果為是時,判斷所述接收模塊接收的讀操作信令所請求讀取的數據位置信息與為所述多層級判定架構中其它任一預取層級記錄的歷史數據位置信息是否相鄰。
11.如權利要求10所述的裝置,其特征在于,所述命中率判斷單元,還用于在所述第二確定單元確定存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息之后,判斷該歷史位置信息對應的預取層級的命中率是否大于第二閾值;所述位置信息判斷模塊還包括默認預取層級設定單元,用于在所述命中率判定判斷單元判斷大于第二閾值時,將所述第二確定單元確定出的該歷史位置信息對應的預取層級設定為默認預取層級。
12.如權要求8-11任一項所述的裝置,其特征在于,所述多層級判定架構中的預取層級根據多核處理裝置的系統架構的層級結構相應設定。
13.如權利要求8-12任一項所述的裝置,其特征在于,所述裝置還包括存放位置控制模塊,用于按照處理預取數據的進程最多的CPU距離所述預取數據最近的原則,控制預取數據的存放位置;其中,所述預取數據是所述數據預取模塊啟動數據預取之后得到的。
14.如權利要求8-12任一項所述的裝置,其特征在于,所述裝置還包括 節點剩余內存判斷模塊,用于在所述接收模塊接收到讀操作信令后,判斷所有節點的剩余內存之和是否大于預設的第三閾值;所述位置信息判斷模塊,用于在所述節點剩余內存判斷模塊的判斷結果為是時,判斷判斷為多層級判定架構中多個預取層級分別記錄的歷史位置信息中,是否存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息。
全文摘要
本發明實施例公開了一種數據預取方法,包括接收讀操作信令;判斷為多層級判定架構中多個預取層級分別記錄的歷史位置信息中,是否存在與所述讀操作信令所請求讀取的數據位置信息相鄰的歷史位置信息;若存在,確定存在滿足預取條件的預取層級,啟動數據預取。本發明實施例還公開了一種數據預取裝置。采用本發明實施例,與現有技術中只判斷一個預取層級是否滿足預取條件的預取機制相比,本實施例能夠判斷多個預取層級是否滿足預取條件,并在任一預取層級滿足預取條件時啟動數據預取,從而提高了啟動數據預取的幾率。
文檔編號G06F9/345GK102508642SQ20111035460
公開日2012年6月20日 申請日期2011年11月10日 優先權日2011年11月10日
發明者劉獎, 李海偉, 王偉, 章曉峰 申請人:華為技術有限公司