專利名稱:一種輸入輸出調(diào)度方法和裝置的制作方法
技術(shù)領域:
本發(fā)明涉及輸入輸出(10, I叩ut/Output)調(diào)度技術(shù),具體涉及一種10 調(diào)度方法和一種IO調(diào)度裝置。
背景技術(shù):
在網(wǎng)絡中,為了提高兩個通信設備之間的帶寬和路徑可靠性,目前一般 采用多條路徑來連接兩個通信設備,信息發(fā)送方通過選路算法選擇當前路 徑,通過選定的當前路徑進行數(shù)據(jù)傳輸。這種多路徑技術(shù)應用在很多環(huán)境下, 例如網(wǎng)絡存儲系統(tǒng)的應用主機和存儲系統(tǒng)之間,再例如兩個采用聚合路徑通 信的網(wǎng)絡設備之間。
以網(wǎng)絡存儲系統(tǒng)為例,圖1示出了網(wǎng)絡存儲系統(tǒng)中多路徑的連接示意 圖,如圖l所示,存儲設備與應用主機之間通過多條路徑相連接。存儲設備 中的一個塊設備與應用主機上的多個塊設備相映射,應用主機上的多個塊設 備分別通過獨立的物理路徑與存儲設備上的同 一塊設備相連,從而形成多路 徑。如圖1所示,存儲設備中的塊設備1在應用主機上映射多4個塊設備, 分別記為塊Al ~塊Dl。塊Al ~塊Dl分別通過4條獨立的物理路徑與存儲 設備上的塊設備1相連。這4條物理路徑分別記為路徑A ~路徑D,這里將 路徑A ~路徑D稱為成員路徑。
應用主機中還包括為上層應用服務的控制塊DM1。 DM1通過選路算法 確定當前通過哪條路徑傳輸數(shù)據(jù)。當確定路徑A進行數(shù)據(jù)傳輸時,采用預 先確定的10請求個lt X進行IO調(diào)度,即向塊Al發(fā)送X個10請求。塊 Al將接收到的X個IO請求緩存到其發(fā)送隊列中,然后逐個通過路徑A發(fā) 送給存儲設備。每發(fā)送一個IO請求后,會接收到存儲設備返回的一個確認
6響應,此時發(fā)送下一個IO請求。存儲設備通過路徑A返回被請求的數(shù)據(jù)量。當所有的IO請求發(fā)送完畢,再次執(zhí)行選路算法,確定下一條傳輸數(shù)據(jù)的路徑。
目前,不對多路徑中的不同路徑進行區(qū)分。無論哪條路徑被選中為當前路徑,均采用預先確定的10請求個數(shù)X進行10調(diào)度。該預先確定的10請求個數(shù)X是手工配置的固定數(shù)值,適用于所有成員路徑。
但是,這種配置固定10請求個數(shù)的方式會帶來如下缺陷
首先,不同應用下,相同的IO請求個數(shù)對應的數(shù)據(jù)量是不同的,因此傳輸不同數(shù)據(jù)量所需實際帶寬也是不同的。采用固定的IO請求個數(shù)通常也要求構(gòu)成多路徑的所有成員路徑的物理帶寬相同。那么,當多路徑為數(shù)據(jù)量小的應用l服務時,所需實際帶寬小于成員路徑的物理帶寬,從而不能令帶寬利用率達到最大化,浪費了帶寬;當多路徑為數(shù)據(jù)量大的應用2服務時,所需實際帶寬可能大于成員路徑的物理帶寬,此時會產(chǎn)生堵塞。
其次,在多路徑方案中, 一條物理路徑可以被多個應用占用,如圖2所示,DM1為應用l服務,DM2為應用2服務,當路徑A同時被這兩個應用占用時,路徑A的帶寬被兩個應用分享。此時提供給單個應用的實際帶寬減少,增加了路徑A的堵塞幾率。
可見,以上缺陷的產(chǎn)生均是由于IO請求個數(shù)的數(shù)值是人工預先配置的,無法與路徑的實際帶寬相適應。而且采用固定的IO請求個數(shù)還要求采用物理帶寬相同的路徑構(gòu)成多路徑,對多路徑的配置造成很大限制。
同理,采用聚合路徑通信的網(wǎng)絡設備中雖然沒有塊設備的概念,但是10調(diào)度的原理是相同的,也是向當前路徑發(fā)送固定的IO數(shù)據(jù)包,發(fā)送完畢再選擇下一條路徑,并發(fā)送相同數(shù)量的IO數(shù)據(jù)包。故同樣存在上述問題。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供了一種輸入輸出調(diào)度方法,使得多路徑中的每個成員路徑都可以根據(jù)實際帶寬自適應調(diào)整其使用的10個數(shù)。
7該方法中,多路徑中的每個成員路徑使用自身對應的輸入輸出10個數(shù);
該方法包括
A、 當 一成員路徑一皮選中為當前路徑時,采用當前路徑對應的TO個數(shù)進行IO調(diào)度,并統(tǒng)計當前路徑的實時帶寬;
B、 根據(jù)統(tǒng)計的實時帶寬,確定所述當前路徑的較佳IO個數(shù);
C、 采用步驟B確定的較佳10個數(shù)更新所述當前路徑對應的IO個數(shù);
D、 所述當前路徑再次被選中時,執(zhí)行所述步驟A。
其中,步驟A所述統(tǒng)計當前路徑的實時帶寬為在預設時間長度內(nèi),統(tǒng)計當前路徑上成功發(fā)送的IO個數(shù),將統(tǒng)計的IO個數(shù)與預設時間長度的商作為當前路徑的實時帶寬。
其中,所迷步驟B包括
bl、在預設數(shù)值范圍內(nèi),選擇至少一個不同于步驟A使用的IO個數(shù)的數(shù)值作為待嘗試IO個數(shù);
b2、所述當前路徑再次被選中時,采用待嘗試IO個數(shù)進行IO調(diào)度,并統(tǒng)計當前路徑的實時帶寬;比較當前統(tǒng)計的實時帶寬和步驟A統(tǒng)計的實時帶寬,將實時帶寬最大者對應的IO個數(shù)確定為所述當前路徑的較佳IO個數(shù)。
其中,所述步驟bl為在預設數(shù)值范圍內(nèi),隨機選擇一個不同于步驟A使用的IO個數(shù)的數(shù)值作為待嘗試10個數(shù);
所述步驟b2包括所述當前路徑再次被選中時,采用隨機選擇的待嘗試IO個數(shù)進行IO調(diào)度,并統(tǒng)計當前路徑的實時帶寬;比較當前統(tǒng)計的實時帶寬和步驟A統(tǒng)計的實時帶寬,如果當前統(tǒng)計的實時帶寬大于步驟A統(tǒng)計的實時帶寬,則將所述隨機選擇的待嘗試IO個數(shù)確定為所述當前路徑的較佳IO個數(shù);否則,將步驟A使用的IO個數(shù)確定為所述當前路徑的較佳IO個數(shù)。
其中,所述步驟bl為在預設數(shù)值范圍內(nèi),選擇至少兩個待嘗試IO個數(shù)組成嘗試集合,至少有一個待嘗試IO個數(shù)大于步驟A使用的IO個數(shù);至少有一個待嘗試IO個數(shù)小于步驟A使用的IO個數(shù)。其中,所述步驟b2包括
b21 、從嘗試集合中選擇一 個未被處理的待嘗試IO個數(shù);
b22、所述當前路徑再次被選中時,采用當前選擇的10個數(shù)進行10調(diào)
度,并統(tǒng)計當前路徑的實時帶寬;
b23、比較當前統(tǒng)計的實時帶寬和步驟A統(tǒng)計的實時帶寬,如果當前統(tǒng)
計的實時帶寬大于步驟A統(tǒng)計的實時帶寬,則將所述當前選擇的待嘗試10
個數(shù)確定為所述當前路徑的較佳10個數(shù),執(zhí)行所述步驟C;否則,執(zhí)行步
驟b24。
b24、判斷嘗試集合中是否還有未被處理的IO個數(shù);如果是,則返回執(zhí)行所述步驟b21;否則,執(zhí)行步驟b25;
b25、將步驟A使用的10個數(shù)確定為所述當前路徑的較佳10個數(shù),執(zhí)行所述步驟C。
或者,所述步驟b2包括
b21、從嘗試集合中選擇一個未被處理的待嘗試IO個數(shù);
b22、所述當前路徑再次被選中時,采用當前選擇的10個數(shù)進行IO調(diào)度,并統(tǒng)計當前路徑的實時帶寬;
b23、判斷嘗試集合中是否還有未被處理的IO個數(shù);如果是,則返回執(zhí)行所述步驟b21;否則,執(zhí)行步驟b24;
b24、判斷嘗試集合中各IO個數(shù)對應的實時帶寬中,實時帶寬最大者是否大于步驟A統(tǒng)計的實時帶寬;如果是,則將所述帶寬最大者對應的IO個數(shù)確定為所述當前路徑的較佳IO個數(shù),執(zhí)行所述步驟C;否則,將步驟A使用的IO個數(shù)確定為所述當前路徑的較佳IO個數(shù),執(zhí)行所述步驟C。
其中,所述選擇至少兩個待嘗試IO個數(shù)組成嘗試集合為選擇兩個待嘗試10個數(shù)組成嘗試集合,其中一個大于步驟A使用的IO個數(shù),另一個待嘗試10個數(shù)小于步驟A使用的10個數(shù),并且兩個待嘗試IO個數(shù)與步驟A使用的10個數(shù)之差的絕對值相等。
較佳地,該方法進一步包括保存各成員路徑的較佳10個數(shù);當多路徑被單個應用占用時,根據(jù)保存的較佳10個數(shù)分別為各成員路徑設置對應的固定10個數(shù),各成員路徑后續(xù)被選中時采用對應的固定10個數(shù)進行10調(diào)度。
其中,所述多路徑中的不同成員路徑的物理帶寬相同或不同。
本發(fā)明還提供了 一種輸入輸出調(diào)度裝置,使得多路徑中的每個成員路徑
都可以根據(jù)實際帶寬自適應調(diào)整其使用的10個數(shù)。該裝置包括IO個數(shù)存儲單元和調(diào)度單元;
所述IO個數(shù)存儲單元,用于存儲多路徑中各成員路徑對應的IO個數(shù),每個成員路徑使用自身對應的IO個數(shù);
所述調(diào)度單元,用于在一成員路徑被選中為當前路徑時,從所述IO個數(shù)存儲單元中獲取當前路徑對應的IO個數(shù),采用獲取的10個數(shù)進行10調(diào)度,并統(tǒng)計當前路徑的實時帶寬;根據(jù)統(tǒng)計的實時帶寬,確定所述當前路徑的較佳IO個數(shù),采用所確定的較佳10個數(shù)更新所述IO個數(shù)存儲單元存儲的當前路徑對應的IO個數(shù),使得所述當前路徑再次被選中時采用更新后的較佳10個數(shù)進行10調(diào)度。
其中,所述調(diào)度單元包括第一調(diào)度模塊、更新模塊和每個成員路徑對應的嘗試模塊;
所述第一調(diào)度模塊,用于在一成員路徑被選中為當前路徑時,判斷當前路徑對應的嘗試模塊是否完成嘗試搡作;如果是,則從所述IO個數(shù)存儲單元中獲取當前路徑對應的10個數(shù),采用獲耳又的IO個數(shù)進行10調(diào)度,并統(tǒng)計當前路徑的實時帶寬,然后向嘗試模塊發(fā)送開始嘗試的通知,該通知攜帶本次IO調(diào)度使用IO個數(shù)和統(tǒng)計的實時帶寬;否則,不執(zhí)行操作;
所述嘗試模塊,用于在接收到開始嘗試的通知后開始嘗試操作;在嘗試操作中,在預設數(shù)值范圍內(nèi),選擇至少一個不同于所接收通知中10個數(shù)的數(shù)值作為待嘗試10個數(shù);在對應的成員路徑再次被選中為當前路徑時,采用待嘗試IO個數(shù)進行IO調(diào)度,并統(tǒng)計當前5各徑的實時帶寬;比4支當前統(tǒng)計的實時帶寬和所接收通知中的實時帶寬,將實時帶寬最大者對應的10個數(shù)確定為所述當前路徑的較佳IO個數(shù),將當前路徑的較佳10個數(shù)發(fā)送給所述更新模塊,并通知所述第一調(diào)度模塊已完成嘗試操作;
所述更新模塊,用于采用接收的較佳IO個數(shù)更新所述10個數(shù)存儲單元存儲的當前路徑對應的IO個數(shù)。
較佳地,所述嘗試模塊隨機選擇一個不同于所接收通知中IO個數(shù)的數(shù)值作為待嘗試IO個數(shù)。
較佳地,所述嘗試模塊選擇至少兩個待嘗試IO個數(shù)組成嘗試集合,至
少有一個待嘗試IO個數(shù)大于所接收通知中的IO個數(shù);至少有一個待嘗試IO個數(shù)小于所接收通知中的IO個數(shù)。
較佳地,該裝置進一步包括單應用處理單元,用于保存各成員路徑的較
佳IO個數(shù);當多路徑被單個應用占用時,根據(jù)保存的較佳IO個數(shù)分別為各成員路徑設置對應的固定IO個數(shù),各成員路徑后續(xù)被選中時采用對應的固定IO個數(shù)進行IO調(diào)度。
根據(jù)以上技術(shù)方案可見,本發(fā)明根據(jù)成員路徑傳送IO數(shù)據(jù)包時的實時帶寬確定該成員路徑的較佳IO個數(shù),并作為該成員路徑再次被選中時使用的K)個數(shù)。這樣不斷循環(huán),當成員路徑帶寬變化時,其對應的IO個數(shù)也隨之變化,從而實現(xiàn)了 IO個數(shù)根據(jù)帶寬變化的自適應調(diào)整。
由于各路徑的IO個數(shù)可以根據(jù)該路徑的實時帶寬調(diào)整,因此不必規(guī)定多路徑中每個成員路徑的物理帶寬相同,可以采用相同或不同物理帶寬的路徑組成多路徑,使得多路徑的配置更為靈活。
此外,當一條成員路徑被多個應用占用時,每個應用都可以根據(jù)實際占用的帶寬調(diào)整使用的IO個數(shù),以適應實際環(huán)境,從而避免因?qū)嶋H帶寬被其它應用占用造成堵塞情況頻發(fā)。
圖1為現(xiàn)有網(wǎng)絡存儲系統(tǒng)中多路徑的連接示意圖。
圖2為現(xiàn)有網(wǎng)路存儲系統(tǒng)中多路徑的另 一連接示意圖。圖3為本發(fā)明IO調(diào)度方案的示例性流程圖。
圖4為本發(fā)明IO調(diào)度方案應用于網(wǎng)絡存儲系統(tǒng)的實施例一的流程圖。圖5為本發(fā)明IO調(diào)度方案應用于網(wǎng)絡存儲系統(tǒng)的實施例二的流程圖。
圖6為本發(fā)明IO調(diào)度方案應用于網(wǎng)絡存儲系統(tǒng)的實施例三的流程圖。圖7為本發(fā)明實施例中IO調(diào)度裝置的結(jié)構(gòu)示意圖。
具體實施例方式
下面結(jié)合附圖并舉實施例,對本發(fā)明進行詳細描述。
本發(fā)明提供了一種IO調(diào)度方案,其基本思想為多路徑中的每個成員路徑使用自身對應的10個數(shù);當某個成員路徑被選中為當前路徑后,根據(jù)當前路徑的實時帶寬確定該當前路徑的較佳10個數(shù),該IO較佳個數(shù)在當前路徑后續(xù)被選中時使用。在使用該較佳10個數(shù)的同時,繼續(xù)進行較佳IO個數(shù)的測定,從而達到各路徑根據(jù)自身實際帶寬變化自適應調(diào)整所使用10個數(shù)的目的。
圖3示出了基于以上基本思想的IO調(diào)度方案的示例性流程圖,如圖3所示,該流程包括以下步驟
步驟301:當某成員路徑被選中為當前路徑時,采用當前路徑對應的IO個數(shù)進行IO調(diào)度,并統(tǒng)計當前路徑的實時帶寬。
其中,當前路徑對應的10個數(shù)是指當前被認為是較佳的IO個數(shù),初始化時,該對應的10個數(shù)被設置為預設的初始值,例如100。-執(zhí)行一輪較佳10個數(shù)測定流程后,該設置的10個數(shù)被更新。
步驟302:根據(jù)統(tǒng)計的實時帶寬,確定當前路徑的較佳IO個數(shù)。
步驟303:采用步驟302確定的較佳10個數(shù)更新當前路徑對應的IO個數(shù),使得所述較佳10個數(shù)在當前路徑再次選中時被使用。
步驟304:當前路徑再次被選中時,執(zhí)行步驟301 。
根據(jù)上述流程,采用圖3的處理方法,當路徑帶寬變化時,該路徑對應的10個數(shù)也隨之變化,從而實現(xiàn)了 IO個數(shù)的自適應調(diào)整。由于各路徑的10個數(shù)可以根據(jù)該路徑的實時帶寬調(diào)整,因此不必規(guī)定 多路徑中每個成員路徑的物理帶寬相同,可以采用相同或不同物理帶寬的路 徑組成多路徑,使得多路徑的配置更為靈活。
此外,當一條成員路徑被多個應用占用時,每個應用都可以根據(jù)實際占 用的帶寬調(diào)整使用的10個數(shù),以適應實際環(huán)境,從而避免因?qū)嶋H帶寬被其 它應用占用造成堵塞情況頻發(fā)。
本發(fā)明方案可以應用于采用多個成員路徑組成一條傳輸路徑的環(huán)境。下 面以網(wǎng)絡存儲系統(tǒng)為例對本發(fā)明的10調(diào)度方案進行詳細描述。在網(wǎng)絡存儲 系統(tǒng)中10個數(shù)為10請求個數(shù)。
本發(fā)明中根據(jù)統(tǒng)計的實時帶寬確定當前路徑的較佳10個數(shù)為關(guān)鍵步
驟,在實際中,可以采用多種方法實現(xiàn),例如嘗試法、隨機法、預先設置法,等等。
其中,嘗試法就是在預設數(shù)值范圍內(nèi),選擇至少一個不同于步驟301 使用的IO請求個數(shù)的數(shù)值作為待嘗試IO個數(shù)。在當前路徑后續(xù)被選中時, 采用待嘗試IO請求個數(shù)進行IO調(diào)度,并統(tǒng)計當前路徑的實時帶寬。比較當 前統(tǒng)計的實時帶寬和步驟301統(tǒng)計的實時帶寬,將實時帶寬最大者對應的10 請求個數(shù)確定為當前路徑的較佳IO請求個數(shù)。整個嘗試過程就是較佳10請 求個數(shù)的測定過程。通過不斷的測定,使得IO請求個數(shù)朝著最佳數(shù)值靠攏, 當實際帶寬發(fā)生變化時,IO請求個數(shù)也隨之變化,從而實現(xiàn)了自適應。
下面就舉實施例一和實施例二對采用嘗試法實現(xiàn)IO調(diào)度的方案進行詳 細描迷。
圖4為本發(fā)明10調(diào)度方案應用于網(wǎng)絡存儲系統(tǒng)的實施例 一的流程圖。 如圖4所示,該方法包括以下步驟
步驟401:當圖1中的路徑A被選中為當前路徑時,采用路徑A對應 的10請求個數(shù)進行10調(diào)度。
假設路徑A對應的IO請求個數(shù)為XI,則本步驟中,采用路徑A對應 的10請求個數(shù)進行IO調(diào)度是指圖1中的DM1向塊Al發(fā)送XI個IO請求,塊Al緩存這XI個10請求,并通過路徑A向存儲設備傳輸緩存的10請求。
初始化時,將路徑A對應的IO請求個數(shù)設置為預設數(shù)值,例如100。 步驟402:在^"徑A傳輸10請求過程中,統(tǒng)計J各徑A的實時帶寬,記 為W0。
本步驟中,統(tǒng)計當前路徑的實時帶寬可以為在預設時間長度內(nèi),統(tǒng)計 路徑A上成功發(fā)送10請求的個數(shù),將統(tǒng)計的IO請求個數(shù)與預設時間長度 的商作為路徑A的實時帶寬。預設時間長度可以是一秒或幾秒,合理而定。
在實際中,統(tǒng)計當前路徑實際帶寬的方式不限于本實施例示出的這種, 只要能夠得到路徑帶寬即可應用在本發(fā)明中。
步驟403:在預設數(shù)值范圍內(nèi),選擇至少兩個待嘗試10請求個數(shù)組成 嘗試集合,且至少有一個待嘗試IO請求個數(shù)大于步驟401使用的IO請求個 數(shù),至少有 一個待嘗試IO請求個數(shù)小于步驟401使用的10請求個數(shù)。
本實施例中,較佳地,選擇兩個待嘗試10請求個數(shù)——X2和X3, X2 和X3組成嘗試集合,其中X2大于步驟401使用的IO請求個數(shù)Xl, X3小 于X1。 X2和X3不能與XI相差太多,較佳地,令X2與X1之差的絕對值 等于X3與XI之差的絕對值。
步驟404:從嘗試集合中,選擇一個未被處理的待嘗試IO請求個數(shù)。
本步驟選出的待嘗試10請求個數(shù)作為路徑A下一次被調(diào)用時嘗試使用 的IO請求個數(shù)。在選擇時,可以按照先大再小的次序,或先小再大的次序, 沒有一定之規(guī)。
步驟405:當路徑A再次被選中時,采用步驟404選擇的IO請求個數(shù) 進行IO調(diào)度,并統(tǒng)計路徑A的實時帶寬,記為Wn,其中n為本輪最佳IO 請求個數(shù)測定中的第n次嘗試。
步驟406:比較步驟405統(tǒng)計的實時帶寬Wn與步驟402統(tǒng)計的實時帶 寬WO,如果步驟405統(tǒng)計的實時帶寬Wn大于WO,則執(zhí)行步驟407;否則, 執(zhí)行步驟408。步驟407:將步驟404選擇的待嘗試10請求個數(shù)確定為路徑A的較佳 IO請求個數(shù)。執(zhí)行步驟410。
步驟408:判斷嘗試集合中是否還有未被處理的IO請求個數(shù),如果是, 則返回執(zhí)行步驟404;否則,執(zhí)行步驟409。
步驟409:將步驟401使用的10請求個數(shù)確定為路徑A的較佳10請求 個數(shù)。執(zhí)行步驟410。
步驟410:采用確定的較佳10請求個數(shù)更新路徑A對應的IO請求個數(shù), 使得所述確定的較佳10請求個數(shù)在路徑A再次選中時被使用。
步驟411:路徑A再次被選中時,返回執(zhí)行所述步驟40L *;;??汲舒?*。
從本實施例一的流程可見,本實施例中,通過設置嘗試集合并嘗試嘗試 集合中的IO請求個數(shù),確定路徑A上連續(xù)發(fā)送多少個IO請求時路徑A的 帶寬最大,那么這條路徑下次被選中時就使用這個10請求個數(shù),并開始下
一輪嘗試。
這里針對圖4的實施方式舉個實例。假設路徑A對應的IO請求個數(shù)是 100,那么在路徑A被選中并用IOO進行IO調(diào)度時,采用99和101組成嘗 試集合,先嘗試99再嘗試101。
如果嘗試99后,路徑A的實時帶寬增大,那么就將99作為本輪確定 的較佳10請求個數(shù),并將路徑A對應的10請求個數(shù)設為99,使得在路徑 A下一次被選中時采用99執(zhí)行調(diào)度。然后,繼續(xù)嘗試98和100,以此類推, 不停的嘗試。
如果嘗試99后,路徑A的實時帶寬未增大,那么在路徑A下一次被選 中時嘗試IOI。此時,如果路徑帶寬大于使用IOO時的帶寬,則將101作為 本輪確定的較佳IO請求個數(shù),并將路徑A對應的IO請求個數(shù)設為101,使 得在路徑A下一次被選中時采用101執(zhí)行調(diào)度。之后繼續(xù)嘗試100和102, 以此類推,不停的嘗試。
如果嘗試99和101后,路徑A的實時帶寬均未增大,則將100作為本輪確定的較佳IO請求個數(shù),并將路徑A對應的IO請求個數(shù)設為100,使得
在路徑A下一次被選中時仍采用100執(zhí)行調(diào)度。之后再次嘗試99和101, 以此類推,不停的嘗試。
采用實施例一的實施方式,在嘗試過程中,只要出現(xiàn)帶寬增加的情況, 就停止嘗試,采用當前嘗試的IO請求個數(shù)作為較佳10請求個數(shù)。在實際中, 可能一個嘗試集合中有多個待嘗試IO請求個數(shù)對應的實時帶寬均大于原帶 寬W0,且很可能還未來得及被嘗試的10請求個數(shù)對應的帶寬大于已經(jīng)被 嘗試的IO請求個數(shù)對應的帶寬,因此采用本實施例的嘗試方式雖然能夠在 本輪嘗試中盡快得到較佳結(jié)果,但是從整個效果來看,向帶寬最大化的方向 收斂速度比較慢。為了增加收斂速度,可以采用實施例二的方案。
圖5示出了本發(fā)明IO調(diào)度方案應用于網(wǎng)絡存儲系統(tǒng)的實施例二的流程 圖。如圖5所示,該流程包括以下步驟
步驟501 ~步驟503與實施例一中的步驟401 ~步驟403相同,這里不 贅述。
步驟504:從嘗試集合中,選擇一個未被處理的待嘗試IO請求個數(shù)。
步驟505:當路徑A再次#皮選中時,采用步驟504選擇的IO請求個數(shù) 進行10調(diào)度,并統(tǒng)計路徑A的實時帶寬,記為Wn。
步驟506:判斷嘗試集合中是否還有未被處理的IO請求個數(shù),如果是, 則返回執(zhí)行步驟504;否則,執(zhí)行步驟507。
歩驟507:判斷嘗試集合中各IO請求個數(shù)對應的實時帶寬中,實時帶 寬最大者是否大于步驟502統(tǒng)計的實時帶寬W0,如果是,則執(zhí)行步驟508; 否則,執(zhí)行步驟509。
步驟508:將實時帶寬最大者對應的IO請求個數(shù)確定為路徑A的較佳 l()請求個數(shù)。執(zhí)行步驟510。
步驟509:將步驟501使用的10請求個數(shù)確定為路徑A的較佳10請求 個數(shù)。執(zhí)行步驟510。
步驟510:采用確定的較佳IO請求個數(shù)更新路徑A對應的I()請求個數(shù),使得較佳IO請求個數(shù)在路徑A再次選中時被使用。
步驟511:路徑A再次被選中時,返回執(zhí)行所述步驟501。 至此,本流程結(jié)束。
以上兩個實施例均采用嘗試法對嘗試集合中的值進行嘗試,以確定較佳 10請求個數(shù)。在本發(fā)明實施例三中采用隨機法實現(xiàn)較佳10請求個數(shù)的測定。
圖6示出了本發(fā)明IO調(diào)度方案應用于網(wǎng)絡存儲系統(tǒng)的實施例二的流程 圖。如圖6所示,該流程包括以下步驟
步驟601:當圖1中的路徑A被選中為當前路徑時,采用路徑A對應 的IO請求個數(shù)進行IO調(diào)度。
步驟602:在路徑A傳輸IO請求過程中,統(tǒng)計路徑A的實時帶寬,記 為W0。
步驟603:在預設數(shù)值范圍內(nèi),隨機選擇一個不同于步驟601使用的10 請求個數(shù)作為待嘗試IO請求個數(shù)。隨機值不能隨意取,太大太小都不符合 實際情況,因此可以預先設定數(shù)值范圍作為允許的IO請求個數(shù)取值集合, 隨機選擇時只能在預設數(shù)值范圍內(nèi)選擇,避免數(shù)值選擇的不合理。步驟604:當^4圣A再次凈皮選中時,采用步驟603選擇的待嘗試10請 求個數(shù)進行10調(diào)度,并統(tǒng)計路徑A的實時帶寬,記為W2。
步驟605:判斷W2是否大于W1,如果是,則執(zhí)行步驟606;否則,執(zhí) 行步驟607。
步驟606:將步驟603選擇的待嘗試10請求個數(shù)確定為路徑A的較佳 10請求個數(shù)。執(zhí)行步驟608。
步驟607:將步驟601使用的10請求個數(shù)確定為路徑A的較佳IO請求 個數(shù)。執(zhí)行步驟608。
步驟608:采用確定的較佳IO請求個數(shù)更新路徑A對應的IO請求個數(shù), 使得較佳10請求個數(shù)在路徑A再次選中時被使用。
步驟609:路徑A再次-波選中時,返回執(zhí)行所述步驟601。
至此,本流程結(jié)束。以上三個實施例中無論是隨機法還是嘗試法均有嘗試過程,在本發(fā)明另一個實施例中采用預先設置法確定較佳10個數(shù)。具體來說,預先設定各帶
寬值對應的IO請求個數(shù);當統(tǒng)計到路徑A的實時帶寬后,查找該實時帶寬值對應的預設10請求個數(shù),將查找到的預設IO請求個數(shù)確定為路徑A的較佳10請求個數(shù),并更新路徑A對應的10請求個數(shù),使得在路徑A下一次被選中時可以采用本次查找到的預設10請求個數(shù)進行10調(diào)度。這種方式比較簡單,但是需要預先根據(jù)經(jīng)驗進行設置,不夠精確。
以上描述的多種實施方式可以應用于多路徑:故單個應用占用的情況,也可以應用于多路徑被多個應用同時占用的情況。當被多個應用占用時,各路徑的實際帶寬可能根據(jù)占用情況發(fā)生變化,例如時刻1路徑A被兩個應用占用,那么留給應用l的實際帶寬就少,時刻2路徑A只被應用1占用,留給應用l的實際帶寬就多。當多路徑只被單個應用占用時,路徑只為一個應用提供服務,因此多路徑中各成員路徑的實際帶寬固定不變。在多路徑只被單個應用占用的情況下,完全可以分別對各路徑設置固定的較佳10請求個數(shù),無需變化。這些固定設置的較佳IO請求個數(shù)可以通過采用圖4或圖5的流程進行預先實驗得到。實驗時,令多路徑被單個應用占用,當較佳IO請求個數(shù)變化停止或在某個數(shù)值左右徘徊時,證明較佳IO請求個數(shù)出現(xiàn)。保存各成員路徑的較佳IO請求個數(shù)。當多路徑被單個應用占用時,根據(jù)保存的較佳IO請求個數(shù),分別為各成員路徑設置對應的固定IO請求個數(shù),各成員路徑被選中時采用對應的固定IO請求個數(shù)進行IO調(diào)度。較佳地,在保存各成員路徑的較佳IO請求個數(shù)時,針對不同應用分別保存。
由于IO請求個數(shù)可以自適應調(diào)整,因此本發(fā)明不局限于采用相同物理帶寬的成員路徑組成多路徑,還可以采用不同物理帶寬的成員路徑組成多路徑。
為了實現(xiàn)本發(fā)明的IO調(diào)度方法,本發(fā)明還提供了一種IO調(diào)度裝置。圖7為本發(fā)明實施例中10調(diào)度裝置的結(jié)構(gòu)示意圖。如圖7所示,該裝置包括10個數(shù)存儲單元71和調(diào)度單元72。其中,10個數(shù)存儲單元71,用于存儲多路徑中各成員路徑對應的IO個數(shù),每 個成員路徑使用自身對應的IO個數(shù)。
調(diào)度單元72,用于在一成員路徑被選中為當前路徑時,從IO個數(shù)存儲 單元71中獲取當前路徑對應的IO個數(shù),采用獲取的IO個數(shù)進行IO調(diào)度, 并統(tǒng)計當前路徑的實時帶寬。根據(jù)統(tǒng)計的實時帶寬,確定當前路徑的較佳10 個數(shù),采用所確定的較佳10個數(shù)更新10個數(shù)存儲單元71存儲的當前路徑 對應的IO個數(shù),使得當前路徑后續(xù)再次被選中時能夠采用更新后的較佳10 個數(shù)進行IO調(diào)度。
調(diào)度單元72具體包括第 一調(diào)度模塊721 、嘗試模塊722和更新模塊723。 本實施例中,嘗試模塊722可以設置多個,每個嘗試模塊722負責一條成員 路徑。當然在實際中也可以采用 一個嘗試模塊722負責多路徑中的所有成員 路徑。
第一調(diào)度模塊721,用于在一成員路徑被選中為當前路徑時,判斷當前 路徑對應的嘗試模塊722是否完成嘗試操作;如果是,則從IO個數(shù)存儲單 元71中獲取當前路徑對應的10個數(shù),采用獲取的10個數(shù)進行IO調(diào)度,并 統(tǒng)計當前路徑的實時帶寬,然后向嘗試模塊722發(fā)送開始嘗試的通知,該通 知攜帶本次10調(diào)度使用10個數(shù)和統(tǒng)計的實時帶寬。如果當前路徑對應的嘗 試模塊722還未完成較佳10個數(shù)的嘗試操作,則該第一調(diào)度模塊721不對 當前路徑執(zhí)行操作,而是由嘗試模塊722繼續(xù)其嘗試操作。
嘗試模塊722,用于接收到第 一調(diào)度模塊721發(fā)來的開始嘗試的通知后, 進入嘗試操作階段。在嘗試階段中,嘗試模塊722在預設數(shù)值范圍內(nèi),選擇 至少一個不同于所接收通知中10個數(shù)的數(shù)值作為待嘗試IO個數(shù);在對應的 成員路徑后續(xù)被選中為當前路徑時,采用待嘗試IO個數(shù)進行IO調(diào)度,并統(tǒng) 計當前路徑的實時帶寬;比較當前統(tǒng)計的實時帶寬和所接收通知攜帶的實時 帶寬,將實時帶寬最大者對應的IO個數(shù)確定為所述當前路徑的較佳IO個數(shù), 將當前路徑的較佳10個數(shù)發(fā)送給更新模塊723,并通知所述第一調(diào)度模塊 721自身已經(jīng)完成了嘗試操作。該嘗試模塊722在選擇待嘗試10個數(shù)時,可以隨機選擇一個不同于所
接收10個數(shù)的數(shù)值作為待嘗試10個數(shù);或者選擇至少兩個待嘗試IO個數(shù) 組成嘗試集合,其中至少有一個待嘗試IO個數(shù)大于所接收通知中的IO個數(shù); 至少有一個待嘗試10個數(shù)小于所接收通知中的IO個數(shù)。并且采用嘗試集合 中的數(shù)據(jù)進行嘗試時,可以嘗試完集合中的所有待嘗試IO個數(shù)后再確定哪 個待嘗試IO個數(shù)對應的實時帶寬最大,也可以在首次出現(xiàn)實時帶寬大于通 知中實時帶寬時,確定當前嘗試的IO個數(shù)對應的實時帶寬最大。
更新模塊723,用于采用接收的較佳IO個數(shù)更新IO個數(shù)存儲單元71 存儲的當前路徑對應的IO個數(shù)。
較佳地,本發(fā)明實施例的IO調(diào)度裝置進一步包括單應用處理單元73, 用于保存各成員路徑的較佳IO個數(shù);當多路徑被單個應用占用時,調(diào)度單 元72不工作,由單應用處理單元73接管調(diào)度工作,該單應用處理單元73 根據(jù)保存的較佳IO個數(shù),分別為各成員路徑設置對應的固定IO個數(shù),各成 員路徑被選中時采用對應的固定IO個數(shù)進行IO調(diào)度。
綜上所述,以上僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的 保護范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改 進等,均應包含在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
1、一種輸入輸出調(diào)度方法,其特征在于,多路徑中的每個成員路徑使用自身對應的輸入輸出IO個數(shù);該方法包括A、當一成員路徑被選中為當前路徑時,采用當前路徑對應的IO個數(shù)進行IO調(diào)度,并統(tǒng)計當前路徑的實時帶寬;B、根據(jù)統(tǒng)計的實時帶寬,確定所述當前路徑的較佳IO個數(shù);C、采用步驟B確定的較佳IO個數(shù)更新所述當前路徑對應的IO個數(shù);D、所述當前路徑再次被選中時,執(zhí)行所述步驟A。
2、 如權(quán)利要求1所述的方法,其特征在于,步驟A所述統(tǒng)計當前路徑的 實時帶寬為在預設時間長度內(nèi),統(tǒng)計當前路徑上成功發(fā)送的IO個數(shù),將統(tǒng)計 的10個數(shù)與預設時間長度的商作為當前路徑的實時帶寬。
3、 如權(quán)利要求l所述的方法,其特征在于,所述步驟B包括bl 、在預設數(shù)值范圍內(nèi),選擇至少一個不同于步驟A使用的10個數(shù)的數(shù) 值作為待嘗試I()個數(shù);b2、所述當前路徑再次被選中時,采用待嘗試IO個數(shù)進行IO調(diào)度,并統(tǒng) 計當前路徑的實時帶寬;比較當前統(tǒng)計的實時帶寬和步驟A統(tǒng)計的實時帶寬, 將實時帶寬最大者對應的10個數(shù)確定為所述當前路徑的較佳IO個數(shù)。
4、 如權(quán)利要求3所述的方法,其特征在于,所述步驟bl為在預設數(shù)值 范圍內(nèi),隨機選擇一個不同于步驟A使用的10個數(shù)的數(shù)值作為待嘗試IO個數(shù);所述步驟b2包括所述當前路徑再次被選中時,采用隨機選擇的待嘗試IO 個數(shù)進行IO調(diào)度,并統(tǒng)計當前路徑的實時帶寬;比較當前統(tǒng)計的實時帶寬和步 驟A統(tǒng)計的實時帶寬,如果當前統(tǒng)計的實時帶寬大于步驟A統(tǒng)計的實時帶寬, 則將所述隨機選擇的待嘗試10個數(shù)確定為所述當前路徑的較佳IO個數(shù);否則,
5、 如權(quán)利要求3所述的方法,其特征在于,所述步驟bl為在預設數(shù)值 范圍內(nèi),選擇至少兩個待嘗試IO個數(shù)組成嘗試集合,至少有一個待嘗試IO個數(shù)大于步驟A使用的10個數(shù);至少有一個待嘗試IO個數(shù)小于步驟A使用的 10個數(shù)。
6、 如權(quán)利要求5所述的方法,其特征在于,所述步驟b2包括 b21 、從嘗試集合中選擇一個未被處理的待嘗試10個數(shù);b22、所述當前路徑再次被選中時,采用當前選4奪的10個數(shù)進行10調(diào)度, 并統(tǒng)計當前路徑的實時帶寬;b23、比較當前統(tǒng)計的實時帶寬和步驟A統(tǒng)計的實時帶寬,如果當前統(tǒng)計 的實時帶寬大于步驟A統(tǒng)計的實時帶寬,則將所述當前選擇的待嘗試IO個數(shù) 確定為所述當前路徑的較佳IO個數(shù),執(zhí)行所述步驟C;否則,執(zhí)行步驟b24。b24、判斷嘗試集合中是否還有未被處理的10個數(shù);如果是,則返回執(zhí)行 所述步驟b21;否則,^L行步驟b25;b25 、將步驟A使用的10個數(shù)確定為所述當前路徑的較佳IO個數(shù),執(zhí)行 所述步驟C。
7、 如權(quán)利要求5所述的方法,其特征在于,所述步驟b2包括 b21、從嘗試集合中選擇一個未被處理的待嘗試10個數(shù);b22、所述當前^各徑再次被選中時,采用當前選擇的10個數(shù)進行IO調(diào)度, 并統(tǒng)計當前i 各徑的實時帶寬;b23、判斷嘗試集合中是否還有未被處理的IO個數(shù);如果是,則返回執(zhí)行 所述步驟b21;否則,執(zhí)行步驟b24;b24、判斷嘗試集合中各IO個數(shù)對應的實時帶寬中,實時帶寬最大者是否 大于步驟A統(tǒng)計的實時帶寬;如果是,則將所述帶寬最大者對應的10個數(shù)確 定為所述當前路徑的較佳10個數(shù),執(zhí)行所述步驟C;否則,將步驟A使用的 10個數(shù)確定為所述當前路徑的較佳10個數(shù),執(zhí)行所述步驟C。
8、 如權(quán)利要求5所述的方法,其特征在于,所述選4奪至少兩個待嘗試IO 個數(shù)組成嘗試集合為選擇兩個待嘗試IO個數(shù)組成嘗試集合,其中一個大于步 驟A使用的10個數(shù),另 一個待嘗試IO個數(shù)小于步驟A使用的IO個數(shù),并且
9、 如權(quán)利要求3至8任意一項所述的方法,其特征在于,該方法進一步包括保存各成員路徑的較佳IO個數(shù);當多路徑被單個應用占用時,根據(jù)保存的 較佳10個數(shù)分別為各成員路徑設置對應的固定IO個數(shù),各成員路徑后續(xù)被選 中時釆用對應的固定10個數(shù)進行10調(diào)度。
10、 如權(quán)利要求1所述的方法,其特征在于,所述多路徑中的不同成員路 徑的物理帶寬相同或不同。
11、 一種輸入輸出調(diào)度裝置,其特征在于,該裝置包括IO個數(shù)存儲單元和 調(diào)度單元;所述IO個數(shù)存儲單元,用于存儲多路徑中各成員路徑對應的IO個數(shù),每 個成員路徑使用自身對應的10個數(shù);所述調(diào)度單元,用于在一成員路徑被選中為當前路徑時,從所述IO個數(shù)存 儲單元中獲取當前路徑對應的10個數(shù),采用獲取的10個數(shù)進行10調(diào)度,并 統(tǒng)計當前路徑的實時帶寬;根據(jù)統(tǒng)計的實時帶寬,確定所述當前路徑的較佳IO 個數(shù),采用所確定的較佳10個數(shù)更新所述10個數(shù)存儲單元存儲的當前路徑對10調(diào)度。
12、 如權(quán)利要求11所述的裝置,其特征在于,所述調(diào)度單元包括第一調(diào)度 模塊、更新模塊和每個成員路徑對應的嘗試模塊;所述第一調(diào)度模塊,用于在一成員路徑被選中為當前路徑時,判斷當前路 徑對應的嘗試對莫塊是否完成嘗試操作;如果是,則從所述IO個數(shù)存儲單元中獲 取當前路徑對應的10個數(shù),采用獲取的IO個數(shù)進行10調(diào)度,并統(tǒng)計當前路 徑的實時帶寬,然后向嘗試模塊發(fā)送開始嘗試的通知,該通知攜帶本次IO調(diào)度 使用IO個數(shù)和統(tǒng)計的實時帶寬;否則,不執(zhí)行操作;所述嘗試模塊,用于在接收到開始嘗試的通知后開始嘗試操作;在嘗試操 作中,在預設數(shù)值范圍內(nèi),選擇至少一個不同于所接收通知中IO個數(shù)的數(shù)值作 為待嘗試10個數(shù);在對應的成員路徑再次被選中為當前路徑時,采用待嘗試 IO個數(shù)進行I()調(diào)度,并統(tǒng)計當前路徑的實時帶寬;比較當前統(tǒng)計的實時帶寬和所接收通知中的實時帶寬,將實時帶寬最大者對應的10個數(shù)確定為所述當前 路徑的較佳IO個數(shù),將當前路徑的較佳IO個數(shù)發(fā)送給所述更新模塊,并通知所述第 一調(diào)度模塊已完成嘗試操作;所述更新模塊,用于采用接收的較佳10個數(shù)更新所述IO個數(shù)存儲單元存 儲的當前路徑對應的IO個數(shù)。
13、 如權(quán)利要求12所述的裝置,其特征在于,所述嘗試模塊隨機選擇一個 不同于所接收通知中10個數(shù)的數(shù)值作為待嘗試10個數(shù)。
14、 如權(quán)利要求12所述的裝置,其特征在于,所述嘗試模塊選擇至少兩個 待嘗試10個數(shù)組成嘗試集合,至少有一個待嘗試10個數(shù)大于所接收通知中的 10個數(shù);至少有一個待嘗試10個數(shù)小于所接收通知中的10個數(shù)。
15、 如權(quán)利要求12所述的裝置,其特征在于,該裝置進一步包括單應用處 理單元,用于保存各成員路徑的較佳IO個數(shù);當多路徑被單個應用占用時,根 據(jù)保存的較佳10個數(shù)分別為各成員路徑設置對應的固定10個數(shù),各成員路徑 后續(xù)被選中時采用對應的固定10個數(shù)進行10調(diào)度。
全文摘要
本發(fā)明公開了一種輸入輸出調(diào)度方法和裝置。在所述方法中,多路徑中的每個成員路徑使用自身對應的IO個數(shù);當一成員路徑被選中為當前路徑時,采用當前路徑對應的IO個數(shù)進行IO調(diào)度并統(tǒng)計當前路徑的實時帶寬;根據(jù)統(tǒng)計的實時帶寬,確定當前路徑的較佳IO個數(shù);采用確定的較佳IO個數(shù)更新所述當前路徑對應的IO個數(shù),這樣在當前路徑再次被選中時,可以采用更新后的IO個數(shù)進行IO調(diào)度。使用本發(fā)明多路徑中的每個成員路徑都可以根據(jù)實際帶寬自適應調(diào)整其使用的IO個數(shù)。
文檔編號H04L12/24GK101478436SQ20091007750
公開日2009年7月8日 申請日期2009年1月21日 優(yōu)先權(quán)日2009年1月21日
發(fā)明者廖東方, 文 洪, 賴守鋒 申請人:杭州華三通信技術(shù)有限公司