一種處理并發順序讀io的方法及裝置的制造方法
【技術領域】
[0001]本發明屬于存儲技術領域,尤其涉及一種處理并發順序讀10的方法及裝置。
【背景技術】
[0002]隨著大數據的發展,人們把越來越多的服務器連接到同一個存儲陣列上,并且隨著服務器的發展,同一個服務器也會出現多核的CPU,這就出現可能同時幾十路甚至上百路的順序讀10( Input/Output)需要同一個存儲陣列的處理,這就需要存儲陣列的10處理算法能夠并發的順序讀10。且每個順序讀10的觸發條件,塊大小,預讀的深度都跟具體的應用相關,如何動態地調整存儲的預讀算法使之能跟上應用的發展,就成了存儲陣列能否跟上大數據發展時代的關鍵因素了。
[0003]現有技術中,通常針對特定的應用進行優化。但這樣對于多應用場景的客戶環境來說都有些不便,例如需要分析客戶的應用特點,并根據相應的應用進行修改算法,并編譯測試等,操作繁瑣。并且通常只考慮到單路的讀10,并沒有相應的方法處理并發的多路順序讀10。
【發明內容】
[0004]本發明提供一種處理并發順序讀10的方法及裝置,可通過調整預讀10的相關參數,動態調整預讀算法,提高存儲陣列處理并發順序讀10的效率。
[0005]本發明提供的處理并發順序讀10的方法,包括:
[0006]接收調整順序讀10的第一預讀深度參數的指令,并按照所述指令進行參數配置;接收順序讀10的指令,并將所述順序讀10加入到所屬的順序讀10隊列;判斷隊列中順序讀10的數量是否大于預置目標數量;若是,則根據當前預讀狀態參數,通過動態調整第二預讀深度參數以調整順序讀10的預讀深度;按照調整后的順序讀10的預讀深度,調用后端存儲接口從存儲陣列中讀取10數據。
[0007]本發明提供的處理并發順序讀10的裝置,包括:
[0008]接收模塊,用于接收調整順序讀10的第一預讀深度參數的指令;配置模塊,用于按照所述指令進行參數配置;所述接收模塊,還用于接收順序讀10的指令;加入模塊,用于將所述順序讀10加入到所屬的順序讀10隊列;判斷模塊,用于判斷隊列中順序讀10的數量是否大于預置目標數量;調整模塊,用于若是,則根據當前預讀狀態參數,通過動態調整第二預讀深度參數以調整順序讀10的預讀深度;讀取模塊,用于按照調整后的順序讀10的預讀深度,調用后端存儲接口從存儲陣列中讀取10數據。
[0009]從上述本發明實施例可知,本發明通過調整預讀深度相關參數,來調整順序讀10的預讀深度,提高并發處理多路順序讀10的效率和能力。
【附圖說明】
[0010]為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動性的前提下,還可以根據這些附圖獲得其他的附圖。
[0011]圖1是本發明實施例中處理并發順序讀10的內部模塊結構示意圖;
[0012]圖2是本發明第一實施例提供的處理并發順序讀10的方法的實現流程示意圖;
[0013]圖3是本發明第二實施例提供的處理并發順序讀10的方法的實現流程示意圖;
[0014]圖4是本發明第三實施例提供的處理并發順序讀10的裝置的結構示意圖;
[0015]圖5是本發明第四實施例提供的處理并發順序讀10的裝置的結構示意圖。
【具體實施方式】
[0016]為使得本發明的發明目的、特征、優點能夠更加的明顯和易懂,下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而非全部實施例。基于本發明中的實施例,本領域技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
[0017]請參閱圖1,本發明實施例中,執行處理并發順序讀10的方法的裝置內部結構可包括如下軟件或硬件模塊:
[0018]存儲前端101、觸發模塊102、預讀模塊103、存儲后端104以及存儲陣列(可以是磁盤陣列)105。
[0019]其中,存儲前端101,是接收主機發出的順序讀10命令并解析其中順序讀10相關的參數。
[0020]觸發模塊102,用于觸發預讀與該順序10命令指示的讀取數據的操作。
[0021]預讀模塊103,用于根據指令執行預讀數據的操作,其中內置預讀算法。
[0022]存儲后端104,用于通過與存儲陣列105之間的存儲接口從存儲陣列105中讀取數據。該存儲接口不僅提供讀10的接口,還提供查詢后端讀10壓力的接口。
[0023]存儲陣列105,用于存儲數據。
[0024]以上各模塊可以單獨或集成在該裝置中。
[0025]請參閱圖2,圖2為本發明第一實施例提供的處理并發順序讀10的方法的實現流程示意圖,主要包括以下步驟S201至步驟S205:
[0026]S201、接收調整順序讀10的第一預讀深度參數的指令,并按照該指令進行參數配置;
[0027]調整順序讀10的第一預讀深度參數的指令可以是調試人員或使用人員發出,該指令用于調整順序讀10的第一預讀深度參數,按照該指令進行參數配置,使得按照配置后的參數進行預讀。
[0028]S202、接收順序讀10的指令,并將該順序讀10加入到所屬的順序讀10隊列;
[0029]S203、判斷隊列中順序讀10的數量是否大于預置目標數量;
[0030]一個隊列中順序讀10的數量大于預置目標數量,是觸發預讀線程的觸發條件。
[0031]S204、若是,則根據當前預讀狀態參數,通過動態調整第二預讀深度參數以調整順序讀10的預讀深度;
[0032]若該順序讀10所在的隊列中,順序讀10的數量是否大于該預置目標數量,則觸發預讀線程,調整預讀深度,具體地,根據當前預讀狀態參數,通過動態調整第二預讀深度參數,來調整順序讀10的預讀深度。若當前預讀狀態參數顯示預讀深度還可以增加,則執行步驟205按照新的預讀深度讀取數據,若當前預讀狀態參數顯示預讀深度已到極限,再增加則影響系統整體運行狀況,例如,影響執行主機發出的順序讀10指令的反應速度,則不對當前的預讀深度進行調整。
[0033]S205、按照調整后的順序讀10的預讀深度,調用后端存儲接口從存儲陣列中讀取10數據。
[0034]本發明實施例,通過調整預讀深度相關參數,來調整順序讀10的預讀深度,提高并發處理多路順序讀10的效率和能力。
[0035]請參閱圖3,圖3為本發明第二實施例提供的處理并發順序讀10的方法的實現流程示意圖,主要包括以下步驟S301至步驟S307:
[0036]S301、接收調整順序讀10的第一預讀深度參數的指令,并按照該指令進行參數配置;
[0037]該順序讀10的第一預讀深度參數至少包括以下一種參數:
[0038]順序讀10的最佳的預讀長度化6忖6(:1:_口;^8丨26)、睡眠的預讀長度(7丨61(1_?;^8126)、正常的預讀長度(1101'1]^1_。;1^_8丨26)、順序讀10線程允許運行數量化;1;'_131187_1:11^3(1)以及順序讀10的觸發數量(triger)。
[0039]具體地,通過調整最佳的預讀長度、睡眠的預讀長度和正常的預讀長度可直接調整預讀的深度。通過調整順序讀10線程允許運行數量可調整預讀線程同時訪問后端模塊的能力。通過調整順序讀10的目標數量調整順序讀10的同時觸發數量。
[0040]按照該指令中的參數進行配置,使得預讀模塊按照配置后的參數進行預讀。
[0041 ] S302、接收順序讀10的指令,判斷該順序讀10是否為新的順序讀10;
[0042]存儲前端接收到順序讀10的指令,解析該指令中10相關參數,調用PF_CACHEadd_fe函數以觸發預讀。
[0043]首先檢查該順序讀10的合法性,即檢查該順序讀10的起始地址和長度是否合法,若合法,則判斷該順序讀10是否為新的順序讀10。
[0044]順序讀10的相關信息存放在以下數組中:
[0045]Pf_Result.CacheNstoreThreadData[PF_RESULT_NUM]
[0046]通過如下的操作判斷其是否是新的順序10,如果下面的條件不符合,則是新的順序10:
[0047]for(pf_rlt_index=0;pf_rlt_index<PF_RESULT_NUM;pf_rlt_index++)
[0048]{
[0049]if((Pf_Result.CacheNstoreThreadData[pf_rlt_index].1o_start+
[0050]Pf_Result.CacheNstoreThreadData[pf_rlt_index].