本發(fā)明涉及存儲系統(tǒng)技術(shù)領(lǐng)域,特別是涉及一種多控制器中處理有序命令的方法。
背景技術(shù):
目前,SCSI(Small Computer Systems Interface,小型計算機系統(tǒng)接口)協(xié)議規(guī)定執(zhí)行Ordered Command的順序必須與接收到Ordered Command的順序一致,因此對于有序命令Ordered Command,只有在保證所有的SCSI Command即SCSI命令執(zhí)行完畢之后Ordered Command才能開始執(zhí)行?,F(xiàn)有技術(shù)中,在多個控制器中,每個控制器都是各自執(zhí)行各自的SCSI命令中的無序命令Unordered Command,當(dāng)一個控制器接收到有序命令Ordered Command后,僅僅只能考慮自身無序命令Unordered Command是否已完成,不能考慮到其他所有控制器是否都已經(jīng)執(zhí)行完Unordered Command命令,因此無法保證所有Unordered Command命令執(zhí)行完畢之后Ordered Command才能開始執(zhí)行,無法實現(xiàn)在多控制器中完成有序命令Ordered Command的正常執(zhí)行。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是提供一種多控制器中處理有序命令的方法,以實現(xiàn)在多控制器中完成有序命令Ordered Command的正常執(zhí)行。
為解決上述技術(shù)問題,本發(fā)明提供一種多控制器中處理有序命令的方法,該方法包括:
在存儲系統(tǒng)中,當(dāng)一個控制器接收到有序命令Ordered Command時,所述控制器中的事件處理器EM向存儲系統(tǒng)中所有的控制器發(fā)送請求消息Qr;
所述所有的控制器接收請求消息Qr,均繼續(xù)執(zhí)行當(dāng)前的無序命令Unordered Command,執(zhí)行完畢后向所述事件處理器EM發(fā)送反饋消息Qc;
當(dāng)所述事件處理器EM接收到的反饋消息Qc的數(shù)量與存儲系統(tǒng)中所有控制器的數(shù)量一致時,接收到所述有序命令Ordered Command的控制器開始執(zhí)行所述有序命令Ordered Command。
優(yōu)選的,所述所有的控制器接收請求消息Qr之后,還包括:
所述所有的控制器均停止執(zhí)行新接收到的SCSI命令,并將新接收到的SCSI命令插入到靜止隊列Quiesce Queue中。
優(yōu)選的,所述接收到所述有序命令Ordered Command的控制器開始執(zhí)行所述有序命令Ordered Command之后,還包括:
執(zhí)行所述有序命令Ordered Command完畢后,所述接收到所述有序命令Ordered Command的控制器向所述事件處理器EM發(fā)送命令完成消息Qd。
優(yōu)選的,所述接收到所述有序命令Ordered Command的控制器向所述事件處理器EM發(fā)送命令完成消息Qd之后,還包括:
所述事件處理器EM將所述命令完成消息Qd發(fā)送至所述所有的控制器;
所述所有的控制器開始執(zhí)行靜止隊列Quiesce Queue中的命令。
優(yōu)選的,所述方法還包括:
對于存儲系統(tǒng)中每一個控制器,當(dāng)控制器接收到隊列命令頭信息時,將所述隊列命令頭信息插入到靜止隊列Quiesce Queue的隊頭。
優(yōu)選的,所述執(zhí)行完畢后向所述事件處理器EM發(fā)送命令完成消息Qc之后,還包括:
所述所有的控制器均停止執(zhí)行任何命令。
優(yōu)選的,所述存儲系統(tǒng)中所有的控制器中包括接收到所述有序命令Ordered Command的控制器。
優(yōu)選的,所述,存儲系統(tǒng)中所有的控制器的個數(shù)為至少兩個。
本發(fā)明所提供的一種多控制器中處理有序命令的方法,在存儲系統(tǒng)中,當(dāng)一個控制器接收到有序命令Ordered Command時,所述控制器中的事件處理器EM向存儲系統(tǒng)中所有的控制器發(fā)送請求消息Qr;所述所有的控制器接收請求消息Qr,均繼續(xù)執(zhí)行當(dāng)前的無序命令Unordered Command,執(zhí)行完畢后向所述事件處理器EM發(fā)送反饋消息Qc;當(dāng)所述事件處理器EM接收到的反饋消息Qc的數(shù)量與存儲系統(tǒng)中所有控制器的數(shù)量一致時,接收到所述有序命令Ordered Command的控制器開始執(zhí)行所述有序命令Ordered Command。可見,在存儲系統(tǒng)中,當(dāng)Qc的數(shù)量與存儲系統(tǒng)中所有控制器的數(shù)量一致時,表示所有控制器執(zhí)行Unordered Command命令結(jié)束,即所有的控制器中的Unordered Command命令執(zhí)行完畢之后,接收到有序命令Ordered Command的控制器才開始執(zhí)行有序命令Ordered Command,保證所有Unordered Command命令執(zhí)行完畢之后Ordered Command才能開始執(zhí)行,實現(xiàn)在多控制器中完成有序命令Ordered Command的正常執(zhí)行。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1為本發(fā)明所提供的一種多控制器中處理有序命令的方法的流程圖;
圖2為Ordered Command命令執(zhí)行流程圖。
具體實施方式
本發(fā)明的核心是提供一種多控制器中處理有序命令的方法,以實現(xiàn)在多控制器中完成有序命令Ordered Command的正常執(zhí)行。
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
請參考圖1,圖1為本發(fā)明所提供的一種多控制器中處理有序命令的方法的流程圖,該方法包括:
S11:在存儲系統(tǒng)中,當(dāng)一個控制器接收到有序命令Ordered Command時,控制器中的事件處理器EM向存儲系統(tǒng)中所有的控制器發(fā)送請求消息Qr;
S12:所有的控制器接收請求消息Qr,均繼續(xù)執(zhí)行當(dāng)前的無序命令Unordered Command,執(zhí)行完畢后向事件處理器EM發(fā)送反饋消息Qc;
S13:當(dāng)事件處理器EM接收到的反饋消息Qc的數(shù)量與存儲系統(tǒng)中所有控制器的數(shù)量一致時,接收到有序命令Ordered Command的控制器開始執(zhí)行有序命令Ordered Command。
可見,在存儲系統(tǒng)中,當(dāng)Qc的數(shù)量與存儲系統(tǒng)中所有控制器的數(shù)量一致時,表示所有控制器執(zhí)行Unordered Command命令結(jié)束,即所有的控制器中的Unordered Command命令執(zhí)行完畢之后,接收到有序命令Ordered Command的控制器才開始執(zhí)行有序命令Ordered Command,保證所有Unordered Command命令執(zhí)行完畢之后Ordered Command才能開始執(zhí)行,實現(xiàn)在多控制器中完成有序命令Ordered Command的正常執(zhí)行。
基于所述方法,具體的,所有的控制器接收請求消息Qr之后,所有的控制器均停止執(zhí)行新接收到的SCSI命令,并將新接收到的SCSI命令插入到靜止隊列Quiesce Queue中。然后所有控制器均繼續(xù)執(zhí)行當(dāng)前的無序命令Unordered Command,執(zhí)行完畢后向事件處理器EM發(fā)送反饋消息Qc。
其中,無序命令Unordered Command為沒有順序的指令,執(zhí)行過程沒有先后順序。有序命令Ordered Command為有順序的指令,執(zhí)行過程有先后順序。有序命令Ordered Command應(yīng)該在所有的無序命令Unordered Command都執(zhí)行完后再執(zhí)行。
其中,存儲系統(tǒng)中所有的控制器中包括接收到有序命令Ordered Command的控制器。
進一步的,步驟S12中,執(zhí)行完畢后向事件處理器EM發(fā)送反饋消息Qc之后,還包括:所有的控制器均停止執(zhí)行任何命令。
進一步的,步驟S13中,接收到有序命令Ordered Command的控制器開始執(zhí)行有序命令Ordered Command之后,還包括:執(zhí)行所述有序命令Ordered Command完畢后,接收到有序命令Ordered Command的控制器向事件處理器EM發(fā)送命令完成消息Qd。
進一步的,接收到有序命令Ordered Command的控制器向事件處理器EM發(fā)送命令完成消息Qd之后,事件處理器EM將命令完成消息Qd發(fā)送至所有的控制器;所有的控制器開始執(zhí)行靜止隊列Quiesce Queue中的命令。
具體的,所述方法還包括:對于存儲系統(tǒng)中每一個控制器,當(dāng)控制器接收到隊列命令頭信息時,將隊列命令頭信息插入到靜止隊列Quiesce Queue的隊頭。
其中,存儲系統(tǒng)中所有的控制器的個數(shù)為至少兩個。
詳細的,每個控制器都有一個EM,用于發(fā)送或者接受控制器之間同步的消息,消息包括Quiesce Request,Quiesce Complete,Quiesce Command Done。接收到Ordered Command之后,所有控制器停止執(zhí)行新接收到的SCSI Command,并將其插入到Quiesce Queue中,包括Ordered Command和Unordered Command??刂破鹘邮盏降腛rdered Command,Ordered Command的順序必須與接收到Ordered Command 的順序一致,只有在保證所有Unordered Command命令執(zhí)行完畢之后Ordered Command才能開始執(zhí)行。
隊列命令頭信息即為Head Of Queue Command,Head Of Queue Command是一種特殊的Ordered Command,在接收到Head Of Queue Command之后必須將其插入到Command Queue的隊頭,以保證其最先執(zhí)行,即便接收到的下一條命令任然是Head Of Queue Command,也需要把它插入到隊頭。每一個控制器需要維護一個命令接收隊列Quiesce Queue,即每一個控制器中對應(yīng)有一個Quiesce Queue。
對于事件處理器Event Manager,簡稱EM,每個控制器都有一個EM,用于發(fā)送或者接受控制器之間同步的消息,消息包括Quiesce Request、Quiesce Complete、Quiesce Command Done。
對于Quiesce Request消息,該消息為請求消息,具體是靜止請求消息,簡稱Qr,當(dāng)控制器接受到Ordered Command的時候會發(fā)送給EM Qr消息,EM隨后將Qr發(fā)送到所有控制器。
對于Quiesce Complete消息,該消息為反饋消息,具體是靜止完成消息,簡稱Qc,控制器執(zhí)行完在執(zhí)行的Unordered Commad之后向EM發(fā)送Qc消息,EM再將Qc消息發(fā)送到所有控制器。
對于Quiesce Command Done消息,該消息為命令完成消息,具體為靜止命令完成消息,簡稱Qd,當(dāng)控制器執(zhí)行完Ordered Command之后,會向EM發(fā)送Qd消息,EM再將Qd發(fā)送到所有控制器,控制器在接收到Qd消息之后就可以執(zhí)行Quiesce Queue隊列中的消息。
對于Quiesce Queue隊列,接收到Ordered Command之后,所有控制器停止執(zhí)行新接收到的SCSI Command,并將其插入到Quiesce Queue中,包括Ordered Command和Unordered Command。
對于多控制器存儲,主機端可以通過存儲的任何一個控制器訪問邏輯卷,當(dāng)任一個控制器接收到Ordered Command的時候,需要保證其他所有控制器在執(zhí)行完在執(zhí)行的命令之后停止繼續(xù)處理下一條命令,這就需要控制器之間有相應(yīng)的通信協(xié)調(diào)機制。
具體的,每一個控制器都有一個事件處理器Event Manager(EM),EM負責(zé)在控制器之間接收和發(fā)送消息,消息包括Quiesce Request,Quiesce Complete,Quiesce Command Done,控制器根據(jù)接收到的消息來執(zhí)行對應(yīng)的事件處理函數(shù),以保證Ordered Command的執(zhí)行順序。
當(dāng)一個存儲控制器接收到Ordered Command的時候,會發(fā)送Qr消息到EM,EM將Qr發(fā)送到所有的控制器,包括發(fā)出Qr的控制器也會接收到。當(dāng)接收到Qr之后控制器停止繼續(xù)執(zhí)行命令,并將新接收到的SCSI命令插入到Quiesce Queue隊列中。此時控制器中會有正在執(zhí)行的Unordered Command,當(dāng)控制器中正在執(zhí)行的unordered command執(zhí)行完畢之后向EM發(fā)送Qc消息,EM在接收到Qc消息之后向所有控制器發(fā)送Qc消息,包括所在控制器,每個控制器會記錄接收到的Qc消息。當(dāng)Quiesce Complete消息數(shù)量達到系統(tǒng)中所有控制器的數(shù)量時,表示所有控制器執(zhí)行Unordered Command命令結(jié)束,接收到Ordered Command的控制器可以執(zhí)行Ordered Command命令。當(dāng)Ordered Command命令執(zhí)行完畢之后,控制器向EM發(fā)送Qd消息,EM將此消息發(fā)送到所有控制器,包括所在控制器。接收到Qd消息的控制器開始執(zhí)行Quiesce Queue中的消息。參考圖2,圖2為Ordered Command執(zhí)行流程,圖中是將控制器A和控制器B的EM抽象為一個單獨的EM,實際每個控制器一個EM,Qc1、Qc2均為Quiesce Complete消息,Qd1和Qd2均為Quiesce Command Done消息。
Quiesce Queue中的SCSI命令中包含Ordered Command的時候,會再次執(zhí)行上述步驟,完成Ordered Command命令。由于主機端發(fā)送Ordered Command命令的幾率比較小,所以并不會影響到存儲控制器的效率。
對于命令接收隊列Quiesce Queue,也稱為靜止隊列,在存儲端接收到Ordered Command之后會繼續(xù)接收主機端發(fā)送過來的SCSI命令,所以每一個存儲端控制器需要維護一個命令接收隊列Quiesce Queue,隊列包括Unordered Command和Ordered Command,所有新接收到的SCSI Command都要插入到此隊列中。當(dāng)接收到Head Of Queue Command的時候需要將其插入到Quiesce Queue隊列的隊頭。
綜上,本發(fā)明所提供的一種多控制器中處理有序命令的方法,在存儲系統(tǒng)中,當(dāng)一個控制器接收到有序命令Ordered Command時,控制器中的事件處理器EM向存儲系統(tǒng)中所有的控制器發(fā)送請求消息Qr;所有的控制器接收請求消息Qr,均繼續(xù)執(zhí)行當(dāng)前的無序命令Unordered Command,執(zhí)行完畢后向事件處理器EM發(fā)送反饋消息Qc;當(dāng)事件處理器EM接收到的反饋消息Qc的數(shù)量與存儲系統(tǒng)中所有控制器的數(shù)量一致時,接收到有序命令Ordered Command的控制器開始執(zhí)行有序命令Ordered Command??梢?,在存儲系統(tǒng)中,當(dāng)Qc的數(shù)量與存儲系統(tǒng)中所有控制器的數(shù)量一致時,表示所有控制器執(zhí)行Unordered Command命令結(jié)束,即所有的控制器中的Unordered Command命令執(zhí)行完畢之后,接收到有序命令Ordered Command的控制器才開始執(zhí)行有序命令Ordered Command,保證所有Unordered Command命令執(zhí)行完畢之后Ordered Command才能開始執(zhí)行,實現(xiàn)在多控制器中完成有序命令Ordered Command的正常執(zhí)行。
以上對本發(fā)明所提供的一種多控制器中處理有序命令的方法進行了詳細介紹。本文中應(yīng)用了具體個例對本發(fā)明的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想。應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以對本發(fā)明進行若干改進和修飾,這些改進和修飾也落入本發(fā)明權(quán)利要求的保護范圍內(nèi)。