本發(fā)明涉及通信領(lǐng)域,具體涉及一種分布式存儲系統(tǒng)中的文件讀取方法及服務端。
背景技術(shù):
分布式文件系統(tǒng)的應用范圍越來越廣,而當今的音視頻媒體文件、圖片文件也越來越大,用戶下載時對速度的要求也越來越高。而磁盤作為慢設(shè)備,越來越成為讀取文件的瓶頸。雖說現(xiàn)如今固態(tài)硬盤SSD(Solid State Drives)技術(shù)發(fā)展很快,但是無論是容量還是價格方面的因素,SSD仍然不能替代傳統(tǒng)的機械盤。因此怎樣高效的利用磁盤的讀性能,最大程度的滿足用戶下載速度,成為分布式文件系統(tǒng)一個急需解決的問題?,F(xiàn)有分布式文件系統(tǒng)是多線程同步處理用戶并發(fā)的讀請求,如圖1所示,客戶端將讀請求發(fā)給讀線程,讀線程將讀請求扔到對應磁盤的隊列中,各個磁盤對應的處理線程將請求從隊列中取出,讀完后按原路返回給工作線程,此時工作線程才能給用戶返回讀的文件。這樣,每個讀線程必須要等到返回讀的文件后,才能釋放出來處理下一條讀請求,這樣降低的讀請求的處理效率,進一步降低獲取文件的效率。
技術(shù)實現(xiàn)要素:
本發(fā)明要解決的主要技術(shù)問題是,提供一種分布式存儲系統(tǒng)中的文件讀取方法及服務端,解決現(xiàn)有在讀線程必須要等到返回讀的文件后,才能釋放出來處理下一條讀請求,導致讀請求的處理效率低的問題。
為解決上述問題,本發(fā)明提供一種分布式存儲系統(tǒng)中的文件讀取方法,包 括:
服務端通過讀線程從客戶端獲取讀請求;
所述服務端根據(jù)所述讀請求從對應的磁盤中獲取到相應的文件數(shù)據(jù);
所述服務端將獲取的文件數(shù)據(jù)通過預先建立的返回線程發(fā)送給所述客戶端。
在本發(fā)明的一種實施例中,所述根據(jù)所述讀請求從對應的磁盤中獲取到相應的文件數(shù)據(jù)包括:
根據(jù)所述讀請求從對應的多個磁盤中分別讀取對應的文件數(shù)據(jù),將讀取后的文件數(shù)據(jù)存入數(shù)據(jù)緩存區(qū)中;
所述將獲取的文件數(shù)據(jù)通過預先建立的返回線程發(fā)送給所述客戶端包括:
判斷所述數(shù)據(jù)緩存區(qū)是否存在文件數(shù)據(jù),如果存在文件數(shù)據(jù),立即將所述文件數(shù)據(jù)通過預先建立的返回線程發(fā)送給所述客戶端。
在本發(fā)明的一種實施例中,所述返回線程包括多個子返回線程,每個子返回線程對應一個數(shù)據(jù)緩存區(qū);判斷所述數(shù)據(jù)緩存區(qū)是否存在文件數(shù)據(jù)包括:所述服務端通過子返回線程根據(jù)預設(shè)規(guī)則查詢其對應的數(shù)據(jù)緩存區(qū)是否存在文件數(shù)據(jù);所述將所述文件數(shù)據(jù)通過預先建立的返回線程發(fā)送給所述客戶端包括:將查詢到的文件數(shù)據(jù)通過對應的子返回線程發(fā)送給所述客戶端。
在本發(fā)明的一種實施例中,在服務端通過讀線程從客戶端獲取讀請求后,根據(jù)所述讀請求從對應的磁盤中讀取到相應的文件數(shù)據(jù)之前包括:將所述讀請求存入內(nèi)核異步處理隊列;所述服務端根據(jù)所述讀請求從對應的磁盤中獲取到相應的文件數(shù)據(jù)包括:所述服務端按照預設(shè)處理規(guī)則從所述內(nèi)核異步處理隊列取出讀請求,根據(jù)取出的讀請求從對應的磁盤中獲取到相應的文件數(shù)據(jù)。
在本發(fā)明的一種實施例中,所述預設(shè)處理規(guī)則包括:
按照預設(shè)周期取出所述內(nèi)核異步處理隊列中的所有讀請求,將扇區(qū)位置在一定預設(shè)范圍值內(nèi)的讀請求合并處理,同時獲取扇區(qū)位置在一定預設(shè)范圍值內(nèi)的多個讀請求各自對應的多個文件數(shù)據(jù);
或
按照存入內(nèi)核異步處理隊列的先后的順序從所述內(nèi)核異步處理隊列中的讀請求,根據(jù)獲取所述讀請求對應的文件數(shù)據(jù)。
為解決上述問題,本發(fā)明還提供一種服務端,包括讀請求獲取模塊、文件數(shù)據(jù)獲取模塊和返回線程模塊:
所述讀請求獲取模塊用于通過讀線程從客戶端獲取讀請求;
所述文件數(shù)據(jù)獲取模塊用于根據(jù)所述讀請求從對應的磁盤中獲取到相應的文件數(shù)據(jù);
所述返回線程模塊用于將獲取的文件數(shù)據(jù)通過預先建立的返回線程發(fā)送給所述客戶端。
在本發(fā)明的一種實施例中,所述文件數(shù)據(jù)獲取模塊包括文件數(shù)據(jù)獲取子模塊和數(shù)據(jù)緩存子模塊:
所述數(shù)據(jù)獲取子模塊用于根據(jù)所述讀請求從對應的多個磁盤中分別讀取對應的文件數(shù)據(jù),數(shù)據(jù)緩存子模塊用于所述數(shù)據(jù)獲取子模塊將讀取后的文件數(shù)據(jù)存入數(shù)據(jù)緩存區(qū)中;
所述返回線程模塊還用于判斷所述數(shù)據(jù)緩存區(qū)是否存在文件數(shù)據(jù),如果存在文件數(shù)據(jù),立即將所述文件數(shù)據(jù)通過預先建立的返回線程發(fā)送給所述客戶端。
在本發(fā)明的一種實施例中,所述返回線程包括多個子返回線程,每個子返回線程對應一個數(shù)據(jù)緩存區(qū);所述數(shù)據(jù)獲取子模塊還用于:所述服務端通過子返回線程根據(jù)預設(shè)查詢規(guī)則查詢其對應的數(shù)據(jù)緩存區(qū)是否存在文件數(shù)據(jù);所述 返回線程模塊還用于:將查詢到的文件數(shù)據(jù)通過對應的子返回線程發(fā)送給所述客戶端。
在本發(fā)明的一種實施例中,還包括內(nèi)核異步處理隊列;所述內(nèi)核異步處理隊列用于在服務端通過讀線程從客戶端獲取讀請求后,根據(jù)所述讀請求從對應的磁盤中讀取到相應的文件數(shù)據(jù)之前,將所述讀請求存入內(nèi)核異步處理隊列;所述文件數(shù)據(jù)獲取模塊還包括接收子模塊:所述接收子模塊用于按照預設(shè)處理規(guī)則從所述內(nèi)核異步處理隊列取出讀請求,所述數(shù)據(jù)獲取子模塊還用于根據(jù)取出的讀請求從對應的磁盤中獲取到相應的文件數(shù)據(jù)。
在本發(fā)明的一種實施例中,所述預設(shè)處理規(guī)則包括:
按照預設(shè)周期取出所述內(nèi)核異步處理隊列中的所有讀請求,將扇區(qū)位置在一定預設(shè)范圍值內(nèi)的讀請求合并處理,同時獲取扇區(qū)位置在一定預設(shè)范圍值內(nèi)的多個讀請求各自對應的多個文件數(shù)據(jù);
或
按照存入內(nèi)核異步處理隊列的先后的順序從所述內(nèi)核異步處理隊列中的讀請求,根據(jù)獲取所述讀請求對應的文件數(shù)據(jù)。
為解決上述問題,本發(fā)明提供一種分布式存儲系統(tǒng)中的文件讀取方法,包括:
服務端通過讀線程從客戶端獲取讀請求;
所述服務端根據(jù)所述讀請求從對應的磁盤中獲取到相應的文件數(shù)據(jù);
所述服務端將獲取的文件數(shù)據(jù)通過預先建立的返回線程發(fā)送給所述客戶端。
在本發(fā)明的一種實施例中,所述根據(jù)所述讀請求從對應的磁盤中獲取到相應的文件數(shù)據(jù)包括:
根據(jù)所述讀請求從對應的多個磁盤中分別讀取對應的文件數(shù)據(jù),將讀取后的文件數(shù)據(jù)存入數(shù)據(jù)緩存區(qū)中;
所述將獲取的文件數(shù)據(jù)通過預先建立的返回線程發(fā)送給所述客戶端包括:
判斷所述數(shù)據(jù)緩存區(qū)是否存在文件數(shù)據(jù),如果存在文件數(shù)據(jù),立即將所述文件數(shù)據(jù)通過預先建立的返回線程發(fā)送給所述客戶端。
在本發(fā)明的一種實施例中,所述返回線程包括多個子返回線程,每個子返回線程對應一個數(shù)據(jù)緩存區(qū);所述判斷異步輸入輸出等待區(qū)是否存在文件數(shù)據(jù)包括:所述服務端通過子返回線程根據(jù)預設(shè)規(guī)則查詢其對應的數(shù)據(jù)緩存區(qū)是否存在文件數(shù)據(jù);所述將所述文件數(shù)據(jù)通過預先建立的返回線程發(fā)送給所述客戶端包括:將查詢到的文件數(shù)據(jù)通過對應的子返回線程發(fā)送給所述客戶端。
在本發(fā)明的一種實施例中,在服務端通過讀線程從客戶端獲取讀請求后,根據(jù)所述讀請求從對應的磁盤中讀取到相應的文件數(shù)據(jù)之前包括:將所述讀請求存入內(nèi)核異步處理隊列;所述服務端根據(jù)所述讀請求從對應的磁盤中獲取到相應的文件數(shù)據(jù)包括:所述服務端按照預設(shè)處理規(guī)則從所述內(nèi)核異步處理隊列取出讀請求,根據(jù)取出的讀請求從對應的磁盤中獲取到相應的文件數(shù)據(jù)。
在本發(fā)明的一種實施例中,所述預設(shè)處理規(guī)則包括:
按照預設(shè)周期取出所述內(nèi)核異步處理隊列中的所有讀請求,將扇區(qū)位置在一定預設(shè)范圍值內(nèi)的讀請求合并處理,同時獲取扇區(qū)位置在一定預設(shè)范圍值內(nèi)的多個讀請求各自對應的多個文件數(shù)據(jù);
或
按照存入內(nèi)核異步處理隊列的先后的順序從所述內(nèi)核異步處理隊列中的讀 請求,根據(jù)獲取所述讀請求對應的文件數(shù)據(jù)。
為解決上述問題,本發(fā)明還提供一種服務端,包括讀請求獲取模塊、文件數(shù)據(jù)獲取模塊和返回線程模塊:
所述讀請求獲取模塊用于通過讀線程從客戶端獲取讀請求;
所述文件數(shù)據(jù)獲取模塊用于根據(jù)所述讀請求從對應的磁盤中獲取到相應的文件數(shù)據(jù);
所述返回線程模塊用于將獲取的文件數(shù)據(jù)通過預先建立的返回線程發(fā)送給所述客戶端。
在本發(fā)明的一種實施例中,所述文件數(shù)據(jù)獲取模塊包括文件數(shù)據(jù)獲取子模塊和數(shù)據(jù)緩存子模塊:
所述數(shù)據(jù)獲取子模塊用于根據(jù)所述讀請求從對應的多個磁盤中分別讀取對應的文件數(shù)據(jù),數(shù)據(jù)緩存子模塊用于所述數(shù)據(jù)獲取子模塊將讀取后的文件數(shù)據(jù)存入數(shù)據(jù)緩存區(qū)中;
所述返回線程模塊還用于判斷所述數(shù)據(jù)緩存區(qū)是否存在文件數(shù)據(jù),如果存在文件數(shù)據(jù),立即將所述文件數(shù)據(jù)通過預先建立的返回線程發(fā)送給所述客戶端。
在本發(fā)明的一種實施例中,所述返回線程包括多個子返回線程,每個子返回線程對應一個數(shù)據(jù)緩存區(qū);所述數(shù)據(jù)獲取子模塊還用于:所述服務端通過子返回線程根據(jù)預設(shè)查詢規(guī)則查詢其對應的數(shù)據(jù)緩存區(qū)是否存在文件數(shù)據(jù);所述返回線程模塊還用于:將查詢到的文件數(shù)據(jù)通過對應的子返回線程發(fā)送給所述客戶端。
在本發(fā)明的一種實施例中,還包括內(nèi)核異步處理隊列;所述內(nèi)核異步處理隊列用于在服務端通過讀線程從客戶端獲取讀請求后,根據(jù)所述讀請求從對應的磁盤中讀取到相應的文件數(shù)據(jù)之前,將所述讀請求存入內(nèi)核異步處理隊列; 所述文件數(shù)據(jù)獲取模塊還包括接收子模塊:所述接收子模塊用于按照預設(shè)處理規(guī)則從所述內(nèi)核異步處理隊列取出讀請求,所述數(shù)據(jù)獲取子模塊還用于根據(jù)取出的讀請求從對應的磁盤中獲取到相應的文件數(shù)據(jù)。
在本發(fā)明的一種實施例中,所述預設(shè)處理規(guī)則包括:
按照預設(shè)周期取出所述內(nèi)核異步處理隊列中的所有讀請求,將扇區(qū)位置在一定預設(shè)范圍值內(nèi)的讀請求合并處理,同時獲取扇區(qū)位置在一定預設(shè)范圍值內(nèi)的多個讀請求各自對應的多個文件數(shù)據(jù);
或
按照存入內(nèi)核異步處理隊列的先后的順序從所述內(nèi)核異步處理隊列中的讀請求,根據(jù)獲取所述讀請求對應的文件數(shù)據(jù)。
本發(fā)明的有益效果是:
本發(fā)明提供一種分布式存儲系統(tǒng)中的文件讀取方法以及服務端,首先,服務端通過讀線程從客戶端獲取讀請求;然后,服務端根據(jù)讀請求從對應的磁盤中獲取到相應的文件數(shù)據(jù);最后,服務端將獲取的文件數(shù)據(jù)通過預先建立的返回線程發(fā)送給客戶端。與現(xiàn)有技術(shù)相比,由于是通過預先建立的返回線程將文件發(fā)給客戶端,而不是通過讀線程來返回文件數(shù)據(jù),這樣,讀線程就不必等到返回讀的文件數(shù)據(jù)后,才能釋放出來處理下一條讀請求,能夠盡早釋放出來處理下一條讀請求,提高了的讀請求的處理效率,進一步提高獲取文件數(shù)據(jù)的效率,節(jié)約處理時間,增強用戶體驗度。
附圖說明
圖1為現(xiàn)有分布式存儲系統(tǒng)中的文件讀取方法流程示意圖;
圖2為本發(fā)明實施例一提供的分布式存儲系統(tǒng)中的文件讀取方法流程示意 圖;
圖3為本發(fā)明實施例二提供的服務端結(jié)構(gòu)示意圖一;
圖4為本發(fā)明實施例二提供的服務端結(jié)構(gòu)示意圖二;
圖5為本發(fā)明實施例二提供的服務端結(jié)構(gòu)示意圖三;
圖6為本發(fā)明實施例三提供的分布式存儲系統(tǒng)中的文件讀取方法流程示意圖;
圖7為本發(fā)明實施例三提供的分布式存儲系統(tǒng)中的文件讀取方法中的一種服務端結(jié)構(gòu)示意圖;
圖8為本發(fā)明實施例三提供的分布式存儲系統(tǒng)中的文件讀取方法中的異步輸入輸出模塊結(jié)構(gòu)示意圖。
具體實施方式
下面通過具體實施方式結(jié)合附圖對本發(fā)明作進一步詳細說明。
實施例一:
本實施例提供的切換時延測量方法,如圖2所示,包括以下步驟:
步驟S101:服務端通過讀線程從客戶端獲取讀請求;
在該步驟中,客戶端獲取用戶的讀請求,讀請求包括讀請求參數(shù),讀請求參數(shù)包括、文件句柄、偏移、長度等。客戶端將讀請求去元數(shù)據(jù)服務器獲取對應的副本位置(服務器、磁盤),將讀請求發(fā)到對應的服務端。也即服務端通過讀線程從客戶端獲取讀請求。值得主要的是,這里的文件數(shù)據(jù)可以一個讀請求對應的完整的文件數(shù)據(jù),也可以說該讀請求對應的部分文件數(shù)據(jù)。例如,用戶要讀取A文件數(shù)據(jù),該文件為視頻文件,A文件數(shù)據(jù)分布存儲在某個視頻服務器中磁盤1、磁盤2和磁盤3中。服務端就從該視頻服務器就通過讀線程從客戶端 獲取A文件數(shù)據(jù)的讀請求。
步驟S102:服務端根據(jù)讀請求從對應的磁盤中獲取到相應的文件數(shù)據(jù);
在該步驟中,這里相應的文件數(shù)據(jù)是指與讀請求對應的文件分布存儲在該磁盤中的部分文件。結(jié)合步驟S101中例子說明,服務端在收到A文件數(shù)據(jù)的讀請求后,就從存儲A文件數(shù)據(jù)的服務器中的磁盤1、磁盤2和磁盤3中分別獲取對應的A文件數(shù)據(jù)的部分文件數(shù)據(jù)。
步驟S103:服務端將獲取的文件數(shù)據(jù)通過預先建立的返回線程發(fā)送給客戶端。
在該步驟中,返回線程應該理解為與讀線程不同,可以用來返回獲取的文件數(shù)據(jù)的線程。結(jié)合步驟S102中例子說明,在從磁盤1、磁盤2和磁盤3中分別獲取對應的A文件的部分文件數(shù)據(jù)后,將這些文件數(shù)據(jù)通過返回線程發(fā)送給客戶端。而不是采用現(xiàn)有中,通過讀完后按原路即讀線程返回給客戶端。這樣可以快速的將讀請求釋放出來,對下一個讀請求進行處理。
進一步,由于不同磁盤的讀取數(shù)據(jù)可能不相同,避免由于某個磁盤的盤處理慢會影響到多個工作線程的處理,值得注意的是,這里的工作線程是指所有用來處理讀請求的線程,包括讀線程和返回線程等在處理讀請求中涉及到的線程??梢允姑總€磁盤針對某個讀請求進行異步處理,具體的實現(xiàn)可以為,在上述步驟S102中根據(jù)讀請求從對應的磁盤中獲取到相應的文件數(shù)據(jù)可以為:根據(jù)讀請求從對應的多個磁盤中分別讀取對應的文件數(shù)據(jù),將讀取后的文件數(shù)據(jù)存入數(shù)據(jù)緩存區(qū)中;優(yōu)選的,文件數(shù)據(jù)讀取后,立即放入數(shù)據(jù)緩存區(qū)中。在上述步驟S103中將獲取的文件數(shù)據(jù)通過預先建立的返回線程發(fā)送給客戶端包括:判斷數(shù)據(jù)緩存區(qū)是否存在文件數(shù)據(jù),如果存在文件數(shù)據(jù),立即將文件數(shù)據(jù)通過預先建立的返回線程發(fā)送給客戶端。這樣,對于先處理完的磁盤和對應的讀請求, 就可以進行下一個讀請求的處理,去獲得下一個讀請求對應的文件數(shù)據(jù),提高的讀文件的處理效率和磁盤的并發(fā)吞吐利用率。
進一步,為了盡快的將文件數(shù)據(jù)給客戶端,防止獲取到的文件數(shù)據(jù)阻塞線程影響后面磁盤的數(shù)據(jù)處理和磁盤的吞吐量。具體可以設(shè)置返回線程包括多個子返回線程,每個子返回線程對應一個數(shù)據(jù)緩存區(qū);上述判斷異步輸入輸出等待區(qū)是否存在文件數(shù)據(jù)可以為服務端通過子返回線程根據(jù)預設(shè)規(guī)則查詢其對應的數(shù)據(jù)緩存區(qū)是否存在文件數(shù)據(jù);上述將文件數(shù)據(jù)通過預先建立的返回線程發(fā)送給客戶端可以為將查詢到的文件數(shù)據(jù)通過對應的子返回線程發(fā)送給客戶端。優(yōu)選的,這里的預設(shè)規(guī)則查詢?yōu)檩喸儾樵円?guī)則。
進一步,為了提高讀請求的釋放和更大的提高讀請求的處理效率,最大限度的提升磁盤的吞吐能力。在上述步驟S101之后,步驟S102之前還可以包括步驟,即在服務端通過讀線程從客戶端獲取讀請求后,根據(jù)讀請求從對應的磁盤中讀取到相應的文件數(shù)據(jù)之前包括步驟:將讀請求存入內(nèi)核異步處理隊列;上述步驟S102即服務端根據(jù)讀請求從對應的磁盤中獲取到相應的文件數(shù)據(jù)具體可以為服務端按照預設(shè)處理規(guī)則從內(nèi)核異步處理隊列取出讀請求,根據(jù)取出的讀請求從對應的磁盤中獲取到相應的文件數(shù)據(jù)。具體的,預設(shè)處理規(guī)則包括:按照預設(shè)周期取出內(nèi)核異步處理隊列中的所有讀請求,將扇區(qū)位置在一定預設(shè)范圍值內(nèi)的讀請求合并處理,同時獲取扇區(qū)位置在一定預設(shè)范圍值內(nèi)的多個讀請求各自對應的多個文件數(shù)據(jù);或按照存入內(nèi)核異步處理隊列的先后的順序從內(nèi)核異步處理隊列中的讀請求,根據(jù)獲取讀請求對應的文件數(shù)據(jù)。當然,還可以設(shè)置其他規(guī)則來提高磁盤的最大吞吐量。
實施例二:
本實施例提供的一種服務端,如圖3所示,包括讀請求獲取模塊、文件數(shù)據(jù)獲取模塊和返回線程模塊:讀請求獲取模塊用于通過讀線程從客戶端獲取讀請求;文件數(shù)據(jù)獲取模塊用于根據(jù)讀請求從對應的磁盤中獲取到相應的文件數(shù)據(jù);返回線程模塊用于將獲取的文件數(shù)據(jù)通過預先建立的返回線程發(fā)送給客戶端。
進一步,本實施例還提供的一種服務端,如圖4所示,文件數(shù)據(jù)獲取模塊包括文件數(shù)據(jù)獲取子模塊和數(shù)據(jù)緩存子模塊:數(shù)據(jù)獲取子模塊用于根據(jù)讀請求從對應的多個磁盤中分別讀取對應的文件數(shù)據(jù),數(shù)據(jù)緩存子模塊用于數(shù)據(jù)獲取子模塊將讀取后的文件數(shù)據(jù)存入數(shù)據(jù)緩存區(qū)中;返回線程模塊還用于判斷數(shù)據(jù)緩存區(qū)是否存在文件數(shù)據(jù),如果存在文件數(shù)據(jù),立即將文件數(shù)據(jù)通過預先建立的返回線程發(fā)送給客戶端。
進一步,返回線程包括多個子返回線程,每個子返回線程對應一個數(shù)據(jù)緩存區(qū);數(shù)據(jù)獲取子模塊還用于:服務端通過子返回線程根據(jù)預設(shè)查詢規(guī)則查詢其對應的數(shù)據(jù)緩存區(qū)是否存在文件數(shù)據(jù);返回線程模塊還用于:將查詢到的文件數(shù)據(jù)通過對應的子返回線程發(fā)送給客戶端。
進一步,本實施例還提供的一種服務端,如圖5所示,還包括內(nèi)核異步處理隊列模塊;內(nèi)核異步處理隊列模塊用于在服務端通過讀線程從客戶端獲取讀請求后,根據(jù)讀請求從對應的磁盤中讀取到相應的文件數(shù)據(jù)之前,將讀請求存入內(nèi)核異步處理隊列;文件數(shù)據(jù)獲取模塊還包括接收子模塊:接收子模塊用于按照預設(shè)處理規(guī)則從內(nèi)核異步處理隊列取出讀請求,數(shù)據(jù)獲取子模塊還用于根據(jù)取出的讀請求從對應的磁盤中獲取到相應的文件數(shù)據(jù)。
具體的,預設(shè)處理規(guī)則包括:按照預設(shè)周期取出內(nèi)核異步處理隊列中的所有讀請求,將扇區(qū)位置在一定預設(shè)范圍值內(nèi)的讀請求合并處理,同時獲取扇區(qū) 位置在一定預設(shè)范圍值內(nèi)的多個讀請求各自對應的多個文件數(shù)據(jù);或按照存入內(nèi)核異步處理隊列的先后的順序從內(nèi)核異步處理隊列中的讀請求,根據(jù)獲取讀請求對應的文件數(shù)據(jù)。值得注意的是,這里的預設(shè)范圍值內(nèi)的讀請求合并處理是指將扇區(qū)位置較近的讀請求合并處理,減少不必要的尋道時間。
實施例三:
本實施例提供的切換時延測量方法,如圖6所示,包括以下步驟:
步驟S301:用戶(這里的用戶是針對文件系統(tǒng)而言,也就是調(diào)用文件系統(tǒng)接口的進程)調(diào)用文件系統(tǒng)的讀數(shù)據(jù)接口;
步驟S302:客戶端程序根據(jù)用于提交的讀請求參數(shù)(文件句柄、偏移、長度等)去元數(shù)據(jù)服務器獲取對應的副本位置(服務器、磁盤),將讀請求發(fā)到對應的服務端。
步驟S303:服務端根據(jù)客戶端在元數(shù)據(jù)服務器獲取到的磁盤信息,將讀請求放到對應磁盤的異步處理隊列。
步驟S304:內(nèi)核的AIO模塊會不停地掃描異步隊列中的讀請求,在一定的時間范圍內(nèi),將扇區(qū)靠近的讀請求合并執(zhí)行,最大程度地降低尋道帶來的耗時。磁盤的讀請求返回后,會將這些得到響應的數(shù)據(jù)請求放到響應隊列中
步驟S305:輪詢線程在不停的查詢對應磁盤AIO模塊,如果AIO的等待區(qū)沒有數(shù)據(jù),繼續(xù)輪詢,一直到有數(shù)據(jù)為止,進入S306。
步驟S306:輪詢線程獲取到數(shù)據(jù)后,將這些數(shù)據(jù)返回給客戶端駐留程序。繼續(xù)輪詢AIO模塊。這里輪詢線程的工作就是不停的掃描AIO模塊的等待區(qū),有數(shù)據(jù)就發(fā)給客戶端駐留程序。
步驟S307:客戶端駐留程序獲取到數(shù)據(jù)后,給用戶返回。
進一步,結(jié)合圖7所示,圖7中簡要的展示了服務端的構(gòu)成,值得注意的是,這里的結(jié)構(gòu)構(gòu)成僅是服務端的一種,當然還可以為其他不同結(jié)構(gòu)的服務端。異步輸入輸出(AIO)模塊是上述實施例二中文件數(shù)據(jù)獲取模塊的一種,輪詢線程為返回線程的一種。具體的,AIO接收器為接收子模塊的一種,AIO處理器為數(shù)據(jù)獲取子模塊的一種,AIO等待區(qū)為緩存子模塊的一種。可以比較明顯的看出,每個讀線程,只要將讀請求放到內(nèi)核異步處理隊列,立即可以釋放出來處理下一條請求,不會一直懸在那邊。而這時有一個異步輸入輸出(AIO)模塊會將放到異步處理隊列中的請求取出后進行處理(圖8做了詳細說明),進行排序和聚合,最大程度的發(fā)揮磁盤的吞吐量。如圖8所示,AIO模塊主要分為三個部分:AIO接收器、AIO處理器和AIO等待區(qū),AIO接收器主要負責定期從AIO隊列取出讀請求,比如可以100us取一次,把這些請求丟給AIO處理器,AIO處理器會整理這些請求,將扇區(qū)位置較近的讀請求合并處理,減少不必要的尋道時間。另外AIO處理完的請求數(shù)據(jù),放到AIO等待區(qū),等待輪詢線程來獲取。
本領(lǐng)域普通技術(shù)人員可以理解上述方法中的全部或部分步驟可通過程序來指令相關(guān)硬件完成,上述程序可以存儲于計算機可讀存儲介質(zhì)中,如只讀存儲器、磁盤或光盤等。可選地,上述實施例的全部或部分步驟也可以使用一個或多個集成電路來實現(xiàn)。相應地,上述實施例中的各模塊/單元可以采用硬件的形式實現(xiàn),也可以采用軟件功能模塊的形式實現(xiàn)。本發(fā)明不限制于任何特定形式的硬件和軟件的結(jié)合。
以上實施例僅用以說明本發(fā)明的技術(shù)方案而非限制,僅僅參照較佳實施例對本發(fā)明進行了詳細說明。本領(lǐng)域的普通技術(shù)人員應當理解,可以對本發(fā)明的技術(shù)方案進行修改或者等同替換,而不脫離本發(fā)明技術(shù)方案的精神和范圍,均應涵蓋在本發(fā)明的權(quán)利要求范圍當中。