一種處理輸入輸出請求的方法及設備的制造方法
【技術領域】
[0001] 本發(fā)明涉及計算機領域,特別涉及一種處理輸入輸出請求的方法及設備。
【背景技術】
[0002] 隨著計算機技術的快速發(fā)展,在一個主機上可以模擬出多個虛擬機。每個虛擬機 上會運行多個應用程序,當該應用程序需要存儲系統(tǒng)執(zhí)行某個操作時,該應用程序向該存 儲系統(tǒng)發(fā)送一個IO (input/output,輸入/輸出)請求,虛擬機通過該主機上的虛擬機監(jiān)視 器將該IO請求發(fā)送給存儲系統(tǒng)。
[0003] 其中,一個虛擬機對應多個虛擬磁盤,虛擬磁盤保存在存儲系統(tǒng)上。由于虛擬機執(zhí) 行操作時以虛擬磁盤為操作粒度,而存儲系統(tǒng)執(zhí)行操作時以LUN(Logical Unit Number,邏 輯單元號)為操作粒度,所以為了保證虛擬機的操作粒度與存儲系統(tǒng)的操作粒度一致,存儲 系統(tǒng)為每個虛擬磁盤分配一個LUN。由于主機和存儲系統(tǒng)之間是通過SCSKSmall Computer System Interface,小型計算機系統(tǒng)接口)協(xié)議進行IO通信的,而SCSI協(xié)議要求一個IO指 令只能對一個LUN進行操作,所以虛擬機監(jiān)視器獲取同一個LUN對應的IO請求,根據(jù)該LUN 對應的IO請求需要訪問的邏輯地址和該LUN對應的IO請求的優(yōu)先級,對該LUN對應的IO 請求進行IO排序和合并,將IO排序和合并之后得到的IO指令發(fā)送給存儲系統(tǒng)。存儲系統(tǒng) 接收該IO指令,對該IO指令進行處理。
[0004] 由于虛擬磁盤與LUN是一一對應的關系,因此虛擬機監(jiān)視器只能將一個虛擬磁盤 發(fā)出的IO請求進行IO排序和合并,無法做到將一個虛擬機的IO請求進行整體IO排序和 合并,更無法做到對多個虛擬機的IO請求進行整體IO排序和合并。如此,導致存儲系統(tǒng)會 面對大量的IO指令,大大降低了存儲系統(tǒng)的讀寫性能和吞吐量。
【發(fā)明內(nèi)容】
[0005] 為了解決現(xiàn)有技術的問題,本發(fā)明實施例提供了一種處理輸入輸出請求的方法及 設備。所述技術方案如下:
[0006] 第一方面,提供了一種處理輸入輸出請求的方法,所述方法包括:
[0007] 獲取多個輸入輸出IO請求;
[0008] 根據(jù)獲取的多個IO請求的參數(shù),將所述獲取的多個IO請求封裝成一個IO指令, 所述多個IO請求中的每一個IO請求的參數(shù)至少包括IO請求對應的LUN、IO請求的優(yōu)先級 和IO請求的命令描述字;
[0009] 將所述IO指令發(fā)送給存儲系統(tǒng),使所述存儲系統(tǒng)從所述IO指令中解析出所述多 個IO請求,并對所述多個IO請求分別進行處理。
[0010] 結合第一方面,在上述第一方面的第一種可能的實現(xiàn)方式中,所述根據(jù)獲取的多 個IO請求的參數(shù),將所述獲取的多個IO請求封裝成一個IO指令,包括:
[0011] 將每個IO請求對應的LUN填充在IO指令的LUN字段中;
[0012] 根據(jù)所述LUN字段中LUN對應的IO請求的順序,將所述每個IO請求的優(yōu)先級填 充在所述IO指令的優(yōu)先級字段中;
[0013] 根據(jù)所述LUN字段中LUN對應的IO請求的順序,將所述每個IO請求的命令描述 字填充在所述IO指令的命令描述字字段中;
[0014] 將所述LUN字段、所述優(yōu)先級字段和所述命令描述字段封裝成一個IO指令。
[0015] 結合第一方面,在上述第一方面的第二種可能的實現(xiàn)方式中,所述根據(jù)獲取的多 個IO請求的參數(shù),將所述獲取的多個IO請求封裝成一個IO指令,包括:
[0016] 將每個IO請求對應的LUN、所述每個IO請求的優(yōu)先級和所述每個IO請求的命令 描述字,分別填充在所述每個IO請求對應的信息字段中,所述信息字段包括LUN字段、優(yōu)先 級字段和命令描述字字段;
[0017] 將所述每個IO請求對應的信息字段封裝成一個IO指令。
[0018] 結合第一方面、第一方面的第一種可能的實現(xiàn)方式或第一方面的第二種可能的實 現(xiàn)方式,在上述第一方面的第三種可能的實現(xiàn)方式中,所述IO指令中還包括所述獲取的多 個IO請求的數(shù)量。
[0019] 結合第一方面,在上述第一方面的第四種可能的實現(xiàn)方式中,所述根據(jù)獲取的多 個IO請求的參數(shù),將所述獲取的多個IO請求封裝成一個IO指令,包括:
[0020] 將所述獲取的多個IO請求劃分為多個IO請求組;
[0021] 對于所述多個IO請求組中的任一個IO請求組,為所述IO請求組選擇一個主請 求;
[0022] 將所述IO請求組中除所述主請求之外的其他IO請求確定為所述IO請求組的從 請求,并將所述從請求封裝在所述主請求的IO請求參數(shù)頁中;
[0023] 根據(jù)所述主請求對應的LUN、所述主請求的優(yōu)先級和所述主請求的命令描述字,將 所述主請求封裝成一個IO指令,所述IO指令中攜帶所述主請求的IO請求參數(shù)頁。
[0024] 結合第一方面的第四種可能的實現(xiàn)方式,在上述第一方面的第五種可能的實現(xiàn)方 式中,所述將所述獲取的多個IO請求劃分為多個IO請求組,包括:
[0025] 判斷獲取的多個IO請求中是否存在攜帶參數(shù)的IO請求;
[0026] 如果存在,則根據(jù)攜帶參數(shù)的IO請求的數(shù)量,將所述獲取的多個IO請求劃分為多 個IO請求組,使每個IO請求組中最多包括一個攜帶參數(shù)的IO請求;
[0027] 如果不存在,則將所述獲取的多個IO請求劃分為多個IO請求組。
[0028] 結合第一方面的第四種可能的實現(xiàn)方式或第一方面的第五種可能的實現(xiàn)方式,在 上述第一方面的第六種可能的實現(xiàn)方式中,所述為所述IO請求組選擇一個主請求,包括:
[0029] 如果所述IO請求組中包括攜帶參數(shù)的IO請求,則將攜帶參數(shù)的IO請求確定為所 述IO請求組的主請求;
[0030] 如果所述IO請求組中沒有包括攜帶參數(shù)的IO請求,貝U從所述IO請求組中隨機選 擇一個IO請求,將選擇的IO請求確定為所述IO請求組的主請求。
[0031] 結合第一方面的第四種可能的實現(xiàn)方式,在上述第一方面的第七種可能的實現(xiàn)方 式中,所述將所述從請求封裝在所述主請求的IO請求參數(shù)頁中,包括:
[0032] 將每個從請求對應的LUN、所述每個從請求的優(yōu)先級和所述每個從請求的命令描 述字分別填充在所述每個從請求對應的IO參數(shù)列表中;
[0033] 為所述主請求的IO請求參數(shù)頁設置頁碼和子頁碼,將所述頁碼、所述子頁碼和所 述每個從請求對應的IO參數(shù)列表封裝在所述主請求的IO請求參數(shù)頁中。
[0034] 結合第一方面的第四種可能的實現(xiàn)方式,在上述第一方面的第八種可能的實現(xiàn)方 式中,所述根據(jù)所述主請求對應的LUN、所述主請求的優(yōu)先級和所述主請求的命令描述字, 將所述主請求封裝成一個IO指令,所述IO指令中攜帶所述主請求的IO請求參數(shù)頁之前, 還包括:
[0035] 如果所述主請求的命令描述字中包括參數(shù)列表長度字段,則將所述參數(shù)列表長度 字段修改為所述主請求的IO請求參數(shù)頁的長度;
[0036] 如果所述主請求的命令描述字中不包括參數(shù)列表長度字段,則在所述主請求的命 令描述字中增加參數(shù)列表長度字段,并設置所述參數(shù)列表長度字段為所述主請求的IO請 求參數(shù)頁的長度。
[0037] 第二方面,提供了一種處理輸入輸出請求的設備,所述設備包括:
[0038] 獲取模塊,用于獲取多個輸入輸出IO請求;
[0039] 封裝模塊,用于根據(jù)獲取的多個IO請求的參數(shù),將所述獲取的多個IO請求封裝成 一個IO指令,所述多個IO請求中的每一個IO請求的參數(shù)至少包括IO請求對應的LUN、IO 請求的優(yōu)先級和IO請求的命令描述字;
[0040] 第一發(fā)送模塊,用于將所述IO指令發(fā)送給存儲系統(tǒng),使所述存儲系統(tǒng)從所述IO指 令中解析出所述多個IO請求,并對所述多個IO請求分別進行處理。
[0041] 結合第二方面,在上述第二方面的第一種可能的實現(xiàn)方式中,所述封裝模塊包 括:
[0042] 第一填充單元,用于將每個IO請求對應的LUN填充在IO指令的LUN字段中;
[0043] 第二填充單元,用于根據(jù)所述LUN字段中LUN對應的IO請求的順序,將所述每個 IO請求的優(yōu)先級填充在所述IO指令的優(yōu)先級字段中;
[0044] 第三填充單元,用于根據(jù)所述LUN字段中LUN對應的IO請求的順序,將所述每個 IO請求的命令描述字填充在所述IO指令的命令描述字字段中;
[0045] 第一封裝單元,用于將所述LUN字段、所述優(yōu)先級字段和所述命令描述字段封裝 成一個IO指令。
[0046] 結合第二方面,在上述第二方面的第二種可能的實現(xiàn)方式中,所述封裝模塊包 括:
[0047] 第四