一種隊(duì)列調(diào)度方法及計(jì)算系統(tǒng)的制作方法
【專利摘要】本申請(qǐng)?zhí)峁┮环N隊(duì)列調(diào)度方法及計(jì)算系統(tǒng)。該方法應(yīng)用于基于SR-IOV的計(jì)算系統(tǒng),計(jì)算系統(tǒng)包括通用處理器以及專用硬件芯片。通用處理器用于運(yùn)行一個(gè)或多個(gè)虛擬機(jī)。專用硬件芯片用于基于SR-IOV協(xié)議實(shí)現(xiàn)PF以及一個(gè)或多個(gè)VF。每個(gè)虛擬機(jī)與至少一個(gè)VF對(duì)應(yīng)。專用硬件芯片包括第一隊(duì)列空閑鏈表,第一隊(duì)列空閑鏈表包括多個(gè)按鏈表結(jié)構(gòu)進(jìn)行連接的空閑的第一隊(duì)列,第一隊(duì)列為位于專用硬件芯片中的隊(duì)列。該方法包括:從第一隊(duì)列空閑鏈表中分配一個(gè)或多個(gè)第一隊(duì)列分別給與虛擬機(jī)對(duì)應(yīng)的一個(gè)或多個(gè)VF,分配給每個(gè)VF的第一隊(duì)列的數(shù)量與每個(gè)VF對(duì)應(yīng)的虛擬機(jī)中的程序需要用到的第二隊(duì)列的數(shù)量一致;獲取虛擬機(jī)中的第二隊(duì)列中的數(shù)據(jù),將第二隊(duì)列中的數(shù)據(jù)存放到第一隊(duì)列中進(jìn)行處理。
【專利說(shuō)明】一種隊(duì)列調(diào)度方法及計(jì)算系統(tǒng)
【技術(shù)領(lǐng)域】
[0001] 本申請(qǐng)涉及通信【技術(shù)領(lǐng)域】,尤其涉及一種隊(duì)列調(diào)度方法及計(jì)算系統(tǒng)。
【背景技術(shù)】
[0002] 請(qǐng)參考圖1所示,為一種基于支持單根輸入輸出虛擬化(Single Root 10 Virtrualiztion,SR-I0V)技術(shù)的計(jì)算系統(tǒng)結(jié)構(gòu)圖。如圖1所示,該系統(tǒng)包括:通用處理 器,例如:中央處理器(Central Processing Unit, CPU),例如為X86結(jié)構(gòu)的CPU,用于運(yùn) 行通用的操作系統(tǒng)、虛擬機(jī)軟件等。該系統(tǒng)還包括專用硬件芯片,例如:專用集成電路(英 文:Application Specific Integrated Circuit;簡(jiǎn)稱:ASIC)、現(xiàn)場(chǎng)可編程門陣列(英 文:Field Programmable Gate Array;簡(jiǎn)稱:FPGA)、復(fù)雜可編程邏輯器件(英文:Complex Programmable Logic Device ;簡(jiǎn)稱:CPLD)等。專用硬件芯片與通用處理器通過(guò)接口連接, 例如:通過(guò)快速周邊兀件擴(kuò)展接口(Peripheral Component Interconnect Express,PCIe) 連接。通用處理器上運(yùn)行有m個(gè)虛擬機(jī)(Virtual Manufacturing,VM),m為正整數(shù),如圖1 中所示的VM0、VM1··· VMm。每個(gè)VM都對(duì)應(yīng)一個(gè)或多個(gè)虛擬功能(Virtual Function,VF), 在圖1中,每個(gè)VM對(duì)應(yīng)一個(gè)VF,如VF0至VFm,虛擬機(jī)通過(guò)驅(qū)動(dòng)來(lái)訪問(wèn)對(duì)應(yīng)的VF。
[0003] 專用硬件芯片包括N個(gè)隊(duì)列,N為大于等于m的正整數(shù)。N個(gè)隊(duì)列與m個(gè)VF之間 具有一種動(dòng)態(tài)的配置關(guān)系,這種配置關(guān)系滿足SR-I0V下不同VF具有不同的帶寬、不同的業(yè) 務(wù)和不同優(yōu)先級(jí)的需求。
[0004] 請(qǐng)?jiān)賲⒖紙D1所示,在現(xiàn)有技術(shù)中,采用等分法分配隊(duì)列,即N個(gè)隊(duì)列被平均分配 到每個(gè)VF的每個(gè)優(yōu)先級(jí),所以N的取值為VF的數(shù)量m乘以優(yōu)先級(jí)的數(shù)量再乘以每個(gè)優(yōu)先 級(jí)下的隊(duì)列數(shù)目。假設(shè)隊(duì)列的總數(shù)量N為1024,VF的數(shù)量為64,每個(gè)VF包含4個(gè)優(yōu)先級(jí), 那么采用等分法,每個(gè)優(yōu)先級(jí)會(huì)分配到4個(gè)隊(duì)列,如圖2所示,其中,PRI表示優(yōu)先級(jí)。
[0005] 請(qǐng)?jiān)賲⒖紙D3所示,為隊(duì)列到VF和優(yōu)先級(jí)PRI配置表。配置隨機(jī)存取存儲(chǔ)器 (Random Access Memory ;RAM)的地址為隊(duì)列號(hào)0?1023,數(shù)據(jù)為VF號(hào)和優(yōu)先級(jí)PRI。每 一個(gè)隊(duì)列屬于哪個(gè)優(yōu)先級(jí),屬于哪個(gè)VF都有設(shè)定,例如VF的個(gè)數(shù)為64,優(yōu)先級(jí)有4個(gè),則 每個(gè)VF的每個(gè)優(yōu)先級(jí)有4個(gè)隊(duì)列,配置時(shí)每4個(gè)配置單位數(shù)據(jù)都是相同的,例如地址0? 3的數(shù)據(jù)都是{0,0};地址1020?1023的數(shù)據(jù)都是{63, 3}。
[0006] 因此,在等分法的隊(duì)列配置方式中,必須為每個(gè)VF和PRI的組合分配平均的隊(duì)列 數(shù)。進(jìn)一步,因?yàn)橐骄峙?,所以?dāng)VF有變化時(shí),就必須重新為所有VF分配隊(duì)列。
【發(fā)明內(nèi)容】
[0007] 本申請(qǐng)?zhí)峁┮环N隊(duì)列調(diào)度方法及計(jì)算系統(tǒng),用以解決現(xiàn)有技術(shù)中的等分法的配置 隊(duì)列方式不夠靈活的技術(shù)問(wèn)題。
[0008] 本申請(qǐng)第一方面提供了一種隊(duì)列調(diào)度方法,應(yīng)用于基于單根輸入輸出虛擬化 SR-I0V的計(jì)算系統(tǒng),所述計(jì)算系統(tǒng)包括通用處理器以及專用硬件芯片,所述通用處理器用 于運(yùn)行一個(gè)或多個(gè)虛擬機(jī),所述專用硬件芯片用于基于SR-I0V協(xié)議實(shí)現(xiàn)物理功能PF以及 一個(gè)或多個(gè)虛擬功能VF,每個(gè)所述虛擬機(jī)與一個(gè)或多個(gè)VF對(duì)應(yīng),所述專用硬件芯片包括 第一隊(duì)列空閑鏈表,所述第一隊(duì)列空閑鏈表包括多個(gè)按鏈表結(jié)構(gòu)進(jìn)行連接的空閑的第一隊(duì) 列,其中,所述第一隊(duì)列為位于所述專用硬件芯片中的隊(duì)列;所述方法由所述專用硬件芯片 內(nèi)的一個(gè)或多個(gè)功能模塊執(zhí)行,包括:
[0009] 從所述第一隊(duì)列空閑鏈表中分配一個(gè)或多個(gè)第一隊(duì)列分別給與虛擬機(jī)對(duì)應(yīng)的一 個(gè)或多個(gè)VF,其中,分配給每個(gè)VF的所述第一隊(duì)列的數(shù)量與每個(gè)VF對(duì)應(yīng)的虛擬機(jī)中的程序 需要用到的第二隊(duì)列的數(shù)量一致;
[0010] 獲取所述虛擬機(jī)中的所述第二隊(duì)列中的數(shù)據(jù),將所述第二隊(duì)列中的數(shù)據(jù)存放到所 述第一隊(duì)列中進(jìn)行處理。
[0011] 結(jié)合第一方面,在第一方面的第一種可能的實(shí)現(xiàn)方式中,當(dāng)分配給所述每個(gè)VF的 第一隊(duì)列的數(shù)量為多個(gè)時(shí),所述每個(gè)VF的多個(gè)第一隊(duì)列按鏈表結(jié)構(gòu)進(jìn)行連接。
[0012] 結(jié)合第一方面或第一方面的第一種可能的實(shí)現(xiàn)方式,在第一方面的第二種可能的 實(shí)現(xiàn)方式中,分配給每個(gè)VF的所述第一隊(duì)列的數(shù)量隨著所述第二隊(duì)列的數(shù)量的變化而進(jìn) 行同樣的變化。
[0013] 結(jié)合第一方面或第一方面的第一種可能的實(shí)現(xiàn)方式或第一方面的第二種可能的 實(shí)現(xiàn)方式,在第一方面的第三種可能的實(shí)現(xiàn)方式中,單個(gè)VF支持一個(gè)或多個(gè)優(yōu)先級(jí)PRI,所 述處理為調(diào)度處理,所述調(diào)度處理包括:
[0014] 獲得需要調(diào)度的第一 VF和第一 PRI的組合;
[0015] 在表Y中確定出與所述第一 VF和所述第一 PRI的組合對(duì)應(yīng)的隊(duì)列鏈的首隊(duì)列在 表X中的第一地址;其中,所述表X存儲(chǔ)有個(gè)數(shù)為所有隊(duì)列數(shù)的第一表項(xiàng),所述第一表項(xiàng)包 括每個(gè)VF和每個(gè)PRI的組合對(duì)應(yīng)的隊(duì)列的隊(duì)列號(hào);所述表Y存儲(chǔ)有多個(gè)第二表項(xiàng),每個(gè)所 述第二表項(xiàng)包括所述每個(gè)VF和所述每個(gè)PRI的組合,以及所述每個(gè)VF和所述每個(gè)PRI的 組合對(duì)應(yīng)的隊(duì)列的首隊(duì)列在表X中的地址;所述第二表項(xiàng)的個(gè)數(shù)為VF的個(gè)數(shù)乘以單個(gè)VF 支持的最大PRI個(gè)數(shù)的值;
[0016] 獲取上次調(diào)度的終止隊(duì)列的隊(duì)列序號(hào);所述隊(duì)列序號(hào)表征所述終止隊(duì)列在所述第 一 VF和所述第一 PRI的組合對(duì)應(yīng)的隊(duì)列中的排序;
[0017] 根據(jù)所述第一地址和所述隊(duì)列序號(hào)在所述表X中確定出針對(duì)所述第一 VF和所述 第一 PRI的組合的本次調(diào)度的起始隊(duì)列。
[0018] 結(jié)合第一方面的第三種可能的實(shí)現(xiàn)方式,在第一方面的第四種可能的實(shí)現(xiàn)方式 中,根據(jù)所述第一地址和所述隊(duì)列序號(hào)在所述表X中確定出針對(duì)所述第一 VF和所述第一 PRI的組合的本次調(diào)度的起始隊(duì)列,包括:將所述第一地址和所述隊(duì)列序號(hào)相加,獲得第二 地址;當(dāng)所述第二地址小于所述第一 VF和所述第一 PRI的組合的下一 VF和PRI的組合的 隊(duì)列的首地址時(shí),在所述表X中確定出所述第二地址對(duì)應(yīng)的隊(duì)列號(hào),所述隊(duì)列號(hào)對(duì)應(yīng)的隊(duì) 列即為所述起始隊(duì)列。
[0019] 結(jié)合第一方面的第四種可能的實(shí)現(xiàn)方式,在第一方面的第五種可能的實(shí)現(xiàn)方式 中,所述方法還包括:當(dāng)所述第二地址等于所述下一 VF和PRI的組合的隊(duì)列的首地址時(shí), 在所述表X中確定出所述第一地址對(duì)應(yīng)的隊(duì)列號(hào),所述隊(duì)列號(hào)對(duì)應(yīng)的隊(duì)列即為所述起始隊(duì) 列。
[0020] 結(jié)合第一方面的第三種可能的實(shí)現(xiàn)方式至第一方面的第五種可能的實(shí)現(xiàn)方式中 的任意一種,在第一方面的第六種可能的實(shí)現(xiàn)方式中,所述方法還包括:確定所述起始隊(duì)列 中是否有數(shù)據(jù);當(dāng)所述起始隊(duì)列中有數(shù)據(jù)時(shí),生成第一調(diào)度結(jié)果以及保存所述起始隊(duì)列的 隊(duì)列序號(hào),所述第一調(diào)度結(jié)果包括所述第一 VF、所述第一 PRI以及所述起始隊(duì)列的隊(duì)列號(hào)。
[0021] 結(jié)合第一方面的第六種可能的實(shí)現(xiàn)方式,在第一方面的第七種可能的實(shí)現(xiàn)方式 中,所述方法還包括:當(dāng)所述起始隊(duì)列中沒(méi)有數(shù)據(jù)時(shí),通過(guò)查詢所述起始隊(duì)列的數(shù)據(jù)結(jié)構(gòu) 表,確定所述下一隊(duì)列;其中,所述數(shù)據(jù)結(jié)構(gòu)表包括用于指示所述起始隊(duì)列是否有數(shù)據(jù)的指 示信息、數(shù)據(jù)的數(shù)量信息以及所述起始隊(duì)列的下一隊(duì)列的隊(duì)列號(hào);確定所述下一隊(duì)列中是 否有數(shù)據(jù);當(dāng)所述下一隊(duì)列中有數(shù)據(jù)時(shí),生成第二調(diào)度結(jié)果,所述第二調(diào)度結(jié)果包括所述第 一 VF、所述第一 PRI以及所述下一隊(duì)列的隊(duì)列號(hào);保存所述下一隊(duì)列的隊(duì)列序號(hào)。
[0022] 結(jié)合第一方面或第一方面的第一種可能的實(shí)現(xiàn)方式至第一方面的第七種可能的 實(shí)現(xiàn)方式中的任意一種,在第一方面的第八種可能的實(shí)現(xiàn)方式中,在分配一個(gè)或多個(gè)第一 隊(duì)列分別給一個(gè)或多個(gè)VF之后,所述方法還包括:從所述每個(gè)VF的一個(gè)或多個(gè)第一隊(duì)列中 刪除隊(duì)列;將刪除的隊(duì)列加入所述第一隊(duì)列空閑鏈表中。
[0023] 結(jié)合第一方面或第一方面的第一種可能的實(shí)現(xiàn)方式至第一方面的第八種可能的 實(shí)現(xiàn)方式中的任意一種,在第一方面的第九種可能的實(shí)現(xiàn)方式中,所述方法還包括:
[0024] 接收一外部數(shù)據(jù);
[0025] 確定所述外部數(shù)據(jù)對(duì)應(yīng)的VF、PRI和隊(duì)列序號(hào);其中,所述隊(duì)列序號(hào)表征將要存儲(chǔ) 所述外部數(shù)據(jù)的隊(duì)列在所述VF和所述PRI的組合對(duì)應(yīng)的隊(duì)列中的排序;
[0026] 在表Y中確定出與所述VF和所述PRI的組合對(duì)應(yīng)的隊(duì)列的首隊(duì)列在表X中的第 一地址;其中,所述表X存儲(chǔ)有個(gè)數(shù)為所有隊(duì)列數(shù)的第一表項(xiàng),所述第一表項(xiàng)包括每個(gè)VF和 每個(gè)PRI的組合對(duì)應(yīng)的隊(duì)列的隊(duì)列號(hào);所述表Y存儲(chǔ)有多個(gè)第二表項(xiàng),每個(gè)所述第二表項(xiàng)包 括所述每個(gè)VF和所述每個(gè)PRI的組合,以及所述每個(gè)VF和所述每個(gè)PRI的組合對(duì)應(yīng)的隊(duì) 列的首隊(duì)列在表X中的地址;所述第二表項(xiàng)的個(gè)數(shù)為VF的個(gè)數(shù)乘以單個(gè)VF支持的最大PRI 個(gè)數(shù)的值;
[0027] 根據(jù)所述第一地址和所述隊(duì)列序號(hào),獲得將要存儲(chǔ)所述外部數(shù)據(jù)的隊(duì)列在所述表 X中的第二地址;
[0028] 根據(jù)所述第二地址在所述表X中確定出將要存儲(chǔ)所述外部數(shù)據(jù)的隊(duì)列的隊(duì)列號(hào);
[0029] 將所述外部數(shù)據(jù)存儲(chǔ)在所述隊(duì)列號(hào)對(duì)應(yīng)的隊(duì)列中。
[0030] 本申請(qǐng)第二方面提供一種基于單根輸入輸出虛擬化SR-I0V的計(jì)算系統(tǒng),包括通 用處理器以及專用硬件芯片,所述通用處理器用于運(yùn)行一個(gè)或多個(gè)虛擬機(jī),所述專用硬件 芯片用于基于SR-I0V協(xié)議實(shí)現(xiàn)物理功能PF以及一個(gè)或多個(gè)虛擬功能VF,每個(gè)所述虛擬機(jī) 與一個(gè)或多個(gè)VF對(duì)應(yīng),
[0031] 所述專用硬件芯片包括第一隊(duì)列空閑鏈表,所述第一隊(duì)列空閑鏈表包括多個(gè)按鏈 表結(jié)構(gòu)進(jìn)行連接的空閑的第一隊(duì)列,其中,所述第一隊(duì)列為位于所述專用硬件芯片中的隊(duì) 列;
[0032] 所述專用硬件芯片還用于從所述第一隊(duì)列空閑鏈表中分配一個(gè)或多個(gè)第一隊(duì)列 分別給與虛擬機(jī)對(duì)應(yīng)的一個(gè)或多個(gè)VF,其中,分配給每個(gè)VF的所述第一隊(duì)列的數(shù)量與每個(gè) VF對(duì)應(yīng)的虛擬機(jī)中的程序需要用到的第二隊(duì)列的數(shù)量一致;以及還用于獲取所述虛擬機(jī) 中的所述第二隊(duì)列中的數(shù)據(jù),將所述第二隊(duì)列中的數(shù)據(jù)存放到所述第一隊(duì)列中進(jìn)行處理。
[0033] 結(jié)合第二方面,在第二方面的第一種可能的實(shí)現(xiàn)方式中,當(dāng)分配給所述每個(gè)VF的 第一隊(duì)列的數(shù)量為多個(gè)時(shí),所述每個(gè)VF的多個(gè)第一隊(duì)列按鏈表結(jié)構(gòu)進(jìn)行連接。
[0034] 結(jié)合第二方面或第二方面的第一種可能的實(shí)現(xiàn)方式,在第二方面的第二種可能的 實(shí)現(xiàn)方式中,分配給每個(gè)VF的所述第一隊(duì)列的數(shù)量隨著所述第二隊(duì)列的數(shù)量的變化而進(jìn) 行同樣的變化。
[0035] 結(jié)合第二方面或第二方面的第一種可能的實(shí)現(xiàn)方式或第二方面的第二種可能的 實(shí)現(xiàn)方式,在第二方面的第三種可能的實(shí)現(xiàn)方式中,單個(gè)VF支持一個(gè)或多個(gè)優(yōu)先級(jí)PRI,所 述處理為調(diào)度處理,所述專用硬件芯片具體用于:
[0036] 獲得需要調(diào)度的第一 VF和第一 PRI的組合;
[0037] 在表Y中確定出與所述第一 VF和所述第一 PRI的組合對(duì)應(yīng)的隊(duì)列鏈的首隊(duì)列在 表X中的第一地址;其中,所述表X存儲(chǔ)有個(gè)數(shù)為所有隊(duì)列數(shù)的第一表項(xiàng),所述第一表項(xiàng)包 括每個(gè)VF和每個(gè)PRI的組合對(duì)應(yīng)的隊(duì)列的隊(duì)列號(hào);所述表Y存儲(chǔ)有多個(gè)第二表項(xiàng),每個(gè)所 述第二表項(xiàng)包括所述每個(gè)VF和所述每個(gè)PRI的組合,以及所述每個(gè)VF和所述每個(gè)PRI的 組合對(duì)應(yīng)的隊(duì)列的首隊(duì)列在表X中的地址;所述第二表項(xiàng)的個(gè)數(shù)為VF的個(gè)數(shù)乘以單個(gè)VF 支持的最大PRI個(gè)數(shù)的值;
[0038] 獲取上次調(diào)度的終止隊(duì)列的隊(duì)列序號(hào);所述隊(duì)列序號(hào)表征所述終止隊(duì)列在所述第 一 VF和所述第一 PRI的組合對(duì)應(yīng)的隊(duì)列中的排序;
[0039] 根據(jù)所述第一地址和所述隊(duì)列序號(hào)在所述表X中確定出針對(duì)所述第一 VF和所述 第一 PRI的組合的本次調(diào)度的起始隊(duì)列。
[0040] 結(jié)合第二方面的第三種可能的實(shí)現(xiàn)方式,在第二方面的第四種可能的實(shí)現(xiàn)方式 中,所述專用硬件芯片具體用于:將所述第一地址和所述隊(duì)列序號(hào)相加,獲得第二地址;當(dāng) 所述第二地址小于所述第一 VF和所述第一 PRI的組合的下一 VF和PRI的組合的隊(duì)列的首 地址時(shí),在所述表X中確定出所述第二地址對(duì)應(yīng)的隊(duì)列號(hào),所述隊(duì)列號(hào)對(duì)應(yīng)的隊(duì)列即為所 述起始隊(duì)列。
[0041] 結(jié)合第二方面的第四種可能的實(shí)現(xiàn)方式,在第二方面的第五種可能的實(shí)現(xiàn)方式 中,所述專用硬件芯片具體用于:當(dāng)所述第二地址等于所述下一 VF和PRI的組合的隊(duì)列的 首地址時(shí),在所述表X中確定出所述第一地址對(duì)應(yīng)的隊(duì)列號(hào),所述隊(duì)列號(hào)對(duì)應(yīng)的隊(duì)列即為 所述起始隊(duì)列。
[0042] 結(jié)合第二方面或第二方面的第三種可能的實(shí)現(xiàn)方式或第二方面的第五種可能的 實(shí)現(xiàn)方式,在第二方面的第六種可能的實(shí)現(xiàn)方式中,所述專用硬件芯片還用于:確定所述起 始隊(duì)列中是否有數(shù)據(jù);當(dāng)所述起始隊(duì)列中有數(shù)據(jù)時(shí),生成第一調(diào)度結(jié)果以及保存所述起始 隊(duì)列的隊(duì)列序號(hào),所述第一調(diào)度結(jié)果包括所述第一 VF、所述第一 PRI以及所述起始隊(duì)列的 隊(duì)列號(hào)。
[0043] 結(jié)合第二方面的第六種可能的實(shí)現(xiàn)方式,在第二方面的第七種可能的實(shí)現(xiàn)方式 中,所述專用硬件芯片還用于:當(dāng)所述起始隊(duì)列中沒(méi)有數(shù)據(jù)時(shí),通過(guò)查詢所述起始隊(duì)列的數(shù) 據(jù)結(jié)構(gòu)表,確定所述下一隊(duì)列;其中,所述數(shù)據(jù)結(jié)構(gòu)表包括用于指示所述起始隊(duì)列是否有數(shù) 據(jù)的指示信息、數(shù)據(jù)的數(shù)量信息以及所述起始隊(duì)列的下一隊(duì)列的隊(duì)列號(hào);確定所述下一隊(duì) 列中是否有數(shù)據(jù);當(dāng)所述下一隊(duì)列中有數(shù)據(jù)時(shí),生成第二調(diào)度結(jié)果,所述第二調(diào)度結(jié)果包括 所述第一 VF、所述第一 PRI以及所述下一隊(duì)列的隊(duì)列號(hào);保存所述下一隊(duì)列的隊(duì)列序號(hào)。
[0044] 結(jié)合第二方面或第二方面的第一種可能的實(shí)現(xiàn)方式或第二方面的第七種可能的 實(shí)現(xiàn)方式中的任意一種,在第二方面的第八種可能的實(shí)現(xiàn)方式中,所述專用硬件芯片還用 于:在分配一個(gè)或多個(gè)第一隊(duì)列分別給一個(gè)或多個(gè)VF之后,從所述每個(gè)VF的一個(gè)或多個(gè)第 一隊(duì)列中刪除隊(duì)列;并將刪除的隊(duì)列加入所述第一隊(duì)列空閑鏈表中。
[0045] 結(jié)合第二方面或第二方面的第一種可能的實(shí)現(xiàn)方式或第二方面的第八種可能的 實(shí)現(xiàn)方式中的任意一種,在第二方面的第九種可能的實(shí)現(xiàn)方式中,所述專用硬件芯片還用 于:接收一外部數(shù)據(jù);
[0046] 確定所述外部數(shù)據(jù)對(duì)應(yīng)的VF、PRI和隊(duì)列序號(hào);其中,所述隊(duì)列序號(hào)表征將要存儲(chǔ) 所述外部數(shù)據(jù)的隊(duì)列在所述VF和所述PRI的組合對(duì)應(yīng)的隊(duì)列中的排序;
[0047] 在表Y中確定出與所述VF和所述PRI的組合對(duì)應(yīng)的隊(duì)列的首隊(duì)列在表X中的第 一地址;其中,所述表X存儲(chǔ)有個(gè)數(shù)為所有隊(duì)列數(shù)的第一表項(xiàng),所述第一表項(xiàng)包括每個(gè)VF和 每個(gè)PRI的組合對(duì)應(yīng)的隊(duì)列的隊(duì)列號(hào);所述表Y存儲(chǔ)有多個(gè)第二表項(xiàng),每個(gè)所述第二表項(xiàng)包 括所述每個(gè)VF和所述每個(gè)PRI的組合,以及所述每個(gè)VF和所述每個(gè)PRI的組合對(duì)應(yīng)的隊(duì) 列的首隊(duì)列在表X中的地址;所述第二表項(xiàng)的個(gè)數(shù)為VF的個(gè)數(shù)乘以單個(gè)VF支持的最大PRI 個(gè)數(shù)的值;
[0048] 根據(jù)所述第一地址和所述隊(duì)列序號(hào),獲得將要存儲(chǔ)所述外部數(shù)據(jù)的隊(duì)列在所述表 X中的第二地址;根據(jù)所述第二地址在所述表X中確定出將要存儲(chǔ)所述外部數(shù)據(jù)的隊(duì)列的 隊(duì)列號(hào);將所述外部數(shù)據(jù)存儲(chǔ)在所述隊(duì)列號(hào)對(duì)應(yīng)的隊(duì)列中。
[0049] 本申請(qǐng)實(shí)施例中提供的一個(gè)或多個(gè)技術(shù)方案,至少具有如下技術(shù)效果或優(yōu)點(diǎn):
[0050] 在本申請(qǐng)實(shí)施例中,專用硬件芯片上的第一隊(duì)列按照鏈表結(jié)構(gòu)進(jìn)行連接,形成第 一隊(duì)列空閑鏈表。然后專用硬件芯片從第一隊(duì)列空閑鏈表中分配一個(gè)或多個(gè)第一隊(duì)列分別 給與虛擬機(jī)對(duì)應(yīng)的一個(gè)或多個(gè)VF,所以每個(gè)VF的隊(duì)列是獨(dú)立的,而不受另一個(gè)VF的影響。 例如:刪除一個(gè)VF,也不需要因此為其他VF重新分配隊(duì)列。進(jìn)一步,分配給每個(gè)VF的第 一隊(duì)列的數(shù)量與每個(gè)VF對(duì)應(yīng)的虛擬機(jī)中的程序需要用到的第二隊(duì)列的數(shù)量一致,所以分 配給每個(gè)VF的隊(duì)列數(shù)可能不同,所以在本實(shí)施例中是按需進(jìn)行分配,能夠提高隊(duì)列的利用 率。因此,綜合以上兩方面,可以較大的提高隊(duì)列配置的靈活性。另外,因?yàn)榈谝魂?duì)列和第 二隊(duì)列的數(shù)量一致,所以在將第二隊(duì)列中的數(shù)據(jù)存放到第一隊(duì)列中時(shí),不需要復(fù)雜的映射 計(jì)算,所以能夠提高調(diào)度的便捷性。
【專利附圖】
【附圖說(shuō)明】
[0051] 圖1為現(xiàn)有技術(shù)中基于SR-I0V技術(shù)的計(jì)算系統(tǒng)的結(jié)構(gòu)圖;
[0052] 圖2為現(xiàn)有技術(shù)中等分法分配隊(duì)列的示意圖;
[0053] 圖3為現(xiàn)有技術(shù)中為隊(duì)列到VF和優(yōu)先級(jí)PRI配置表;
[0054] 圖4為本申請(qǐng)一實(shí)施例中的隊(duì)列調(diào)度方法的流程圖;
[0055] 圖5為本申請(qǐng)一實(shí)施例中采用鏈表進(jìn)行隊(duì)列配置的示意圖;
[0056] 圖6為本申請(qǐng)一實(shí)施例中鏈表與隊(duì)列之間的關(guān)系不意圖;
[0057] 圖7為圖4隊(duì)列調(diào)度方法的進(jìn)一步細(xì)化流程圖;
[0058] 圖8a為本申請(qǐng)一實(shí)施例中表X的示意圖;
[0059] 圖8b為本申請(qǐng)一實(shí)施例中表Y的示意圖;
[0060] 圖9為本申請(qǐng)一實(shí)施例中隊(duì)列調(diào)度方法的整體過(guò)程示意圖;
[0061] 圖10為本申請(qǐng)另一實(shí)施例中隊(duì)列調(diào)度的方法流程圖;
[0062] 圖11為本申請(qǐng)實(shí)施例中的計(jì)算系統(tǒng)的硬件實(shí)現(xiàn)的實(shí)例系統(tǒng)框圖。
【具體實(shí)施方式】
[0063] 本申請(qǐng)實(shí)施例提供一種隊(duì)列調(diào)度方法及計(jì)算系統(tǒng),用以解決現(xiàn)有技術(shù)中的調(diào)度方 法存在的不能兼容多種隊(duì)列配置方式的技術(shù)問(wèn)題。
[0064] 本申請(qǐng)實(shí)施例中的技術(shù)方案為解決上述的技術(shù)問(wèn)題,總體思路如下:
[0065] 在本申請(qǐng)實(shí)施例中,專用硬件芯片上的第一隊(duì)列按照鏈表結(jié)構(gòu)進(jìn)行連接,形成第 一隊(duì)列空閑鏈表。然后專用硬件芯片從第一隊(duì)列空閑鏈表中分配一個(gè)或多個(gè)第一隊(duì)列分別 給與虛擬機(jī)對(duì)應(yīng)的一個(gè)或多個(gè)VF,所以每個(gè)VF的隊(duì)列是獨(dú)立的,而不受另一個(gè)VF的影響。 例如:刪除一個(gè)VF,也不需要因此為其他VF重新分配隊(duì)列。進(jìn)一步,分配給每個(gè)VF的第 一隊(duì)列的數(shù)量與每個(gè)VF對(duì)應(yīng)的虛擬機(jī)中的程序需要用到的第二隊(duì)列的數(shù)量一致,所以分 配給每個(gè)VF的隊(duì)列數(shù)可能不同,所以在本實(shí)施例中是按需進(jìn)行分配,能夠提高隊(duì)列的利用 率。因此,綜合以上兩方面,可以較大的提高隊(duì)列配置的靈活性。另外,因?yàn)榈谝魂?duì)列和第 二隊(duì)列的數(shù)量一致,所以在將第二隊(duì)列中的數(shù)據(jù)存放到第一隊(duì)列中時(shí),不需要復(fù)雜的映射 計(jì)算,所以能夠提高調(diào)度的便捷性。
[0066]為使本申請(qǐng)實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本申請(qǐng)實(shí)施例 中的附圖,對(duì)本申請(qǐng)實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是 本申請(qǐng)一部分實(shí)施例,而不是全部的實(shí)施例?;诒旧暾?qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員 在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本申請(qǐng)保護(hù)的范圍。
[0067] 本文中術(shù)語(yǔ)"和/或",僅僅是一種描述關(guān)聯(lián)對(duì)象的關(guān)聯(lián)關(guān)系,表示可以存在三種 關(guān)系,例如,A和/或B,可以表示:?jiǎn)为?dú)存在A,同時(shí)存在A和B,單獨(dú)存在B這三種情況。另 夕卜,本文中字符"/",一般表示前后關(guān)聯(lián)對(duì)象是一種"或"的關(guān)系。
[0068] 下面結(jié)合附圖對(duì)本申請(qǐng)優(yōu)選的實(shí)施方式進(jìn)行詳細(xì)說(shuō)明。
[0069] 本申請(qǐng)一實(shí)施例提供一種隊(duì)列調(diào)度方法,應(yīng)用于基于SR-I0V的計(jì)算系統(tǒng),所述計(jì) 算系統(tǒng)包括通用處理器以及專用硬件芯片。通用處理器用于運(yùn)行一個(gè)或多個(gè)虛擬機(jī)。專用 硬件芯片用于基于SR-I0V協(xié)議實(shí)現(xiàn)物理功能PF以及一個(gè)或多個(gè)虛擬功能VF,每個(gè)虛擬機(jī) 與一個(gè)或多個(gè)VF對(duì)應(yīng),虛擬機(jī)可以通過(guò)驅(qū)動(dòng)來(lái)訪問(wèn)VF。
[0070] 專用硬件芯片包括第一隊(duì)列空閑鏈表,第一隊(duì)列空閑鏈表包括多個(gè)按鏈表結(jié)構(gòu)進(jìn) 行連接的空閑的第一隊(duì)列,其中,第一隊(duì)列為位于專用硬件芯片中的隊(duì)列。
[0071] 該方法由專用硬件芯片內(nèi)的一個(gè)或多個(gè)功能模塊執(zhí)行。請(qǐng)參考圖4所示,為本實(shí) 施例中隊(duì)列調(diào)度方法的流程圖,該方法包括以下內(nèi)容:
[0072] 步驟10 :從第一隊(duì)列空閑鏈表中分配一個(gè)或多個(gè)第一隊(duì)列分別給與虛擬機(jī)對(duì)應(yīng) 的一個(gè)或多個(gè)VF,其中,分配給每個(gè)VF的第一隊(duì)列的數(shù)量與每個(gè)VF對(duì)應(yīng)的虛擬機(jī)中的程序 需要用到的第二隊(duì)列的數(shù)量一致;
[0073] 步驟20 :獲取虛擬機(jī)中的第二隊(duì)列中的數(shù)據(jù),將第二隊(duì)列中的數(shù)據(jù)存放到所述第 一隊(duì)列中進(jìn)行處理。
[0074] 在一種可能的實(shí)現(xiàn)方式中,步驟10具體包括:獲取每個(gè)VF的第二隊(duì)列的數(shù)量,根 據(jù)第二隊(duì)列的數(shù)量確定分配給每個(gè)VF的第一隊(duì)列的數(shù)量;將與確定的第一隊(duì)列的數(shù)量對(duì) 應(yīng)的第一隊(duì)列分配給一個(gè)或多個(gè)VF。
[0075] 具體來(lái)說(shuō),例如:與虛擬機(jī)對(duì)應(yīng)的驅(qū)動(dòng)獲取每個(gè)VF的第二隊(duì)列的數(shù)量,然后通過(guò) 通用處理器和專用硬件芯片之間的接口傳輸給專用硬件芯片。
[0076] 然后,執(zhí)行步驟20,獲取虛擬機(jī)中的第二隊(duì)列中的數(shù)據(jù),并將第二隊(duì)列中的數(shù)據(jù)存 放到分配給每個(gè)VF的第一隊(duì)列中進(jìn)行處理。
[0077] 由此可以看出,分配給每個(gè)VF的隊(duì)列是獨(dú)立的,而不受另一個(gè)VF的影響。例如: 刪除一個(gè)VF,也不需要因此為其他VF重新分配隊(duì)列。進(jìn)一步,分配給每個(gè)VF的第一隊(duì)列的 數(shù)量與每個(gè)VF對(duì)應(yīng)的虛擬機(jī)中的程序需要用到的第二隊(duì)列的數(shù)量一致,所以分配給每個(gè) VF的隊(duì)列數(shù)可能不同,所以在本實(shí)施例中是按需進(jìn)行分配,能夠提高隊(duì)列的利用率。因此, 綜合以上兩方面,可以較大的提高隊(duì)列配置的靈活性。另外,因?yàn)榈谝魂?duì)列和第二隊(duì)列的數(shù) 量一致,所以在將第二隊(duì)列中的數(shù)據(jù)存放到第一隊(duì)列中時(shí),不需要復(fù)雜的映射計(jì)算,所以能 夠提高調(diào)度的便捷性。例如隊(duì)列號(hào)為2的第二隊(duì)列中的數(shù)據(jù)存放到隊(duì)列號(hào)為2的第一隊(duì)列 中,所以不需要再通過(guò)算法計(jì)算隊(duì)列號(hào)為2的第二隊(duì)列中的數(shù)據(jù)應(yīng)該存放到隊(duì)列號(hào)為幾的 第一隊(duì)列中。
[0078] 可選的,分配給每個(gè)VF的所述第一隊(duì)列的數(shù)量隨著所述第二隊(duì)列的數(shù)量的變化 而進(jìn)行同樣的變化,以使兩種隊(duì)列的數(shù)量相一致(如第二隊(duì)列增加2個(gè),第一隊(duì)列也增加2 個(gè);第二隊(duì)列減少1個(gè),第一隊(duì)列也減少1個(gè))。舉例來(lái)說(shuō),當(dāng)某個(gè)VF的第二隊(duì)列的數(shù)量由 10變化為8時(shí),分配給該VF的第一隊(duì)列的數(shù)量也會(huì)由10變?yōu)?。
[0079] 可選的,當(dāng)分配給每個(gè)VF的第一隊(duì)列的數(shù)量為多個(gè)時(shí),每個(gè)VF的多個(gè)第一隊(duì)列按 鏈表結(jié)構(gòu)進(jìn)行連接。例如:分配給VF0的第一隊(duì)列分別是第一隊(duì)列0、第一隊(duì)列20、第一隊(duì) 列4時(shí),那么第一隊(duì)列0、第一隊(duì)列20、第一隊(duì)列4是按照鏈表結(jié)構(gòu)進(jìn)行連接的。具體的,每 個(gè)隊(duì)列是該鏈表的節(jié)點(diǎn)。節(jié)點(diǎn)包括有數(shù)據(jù)部分以及下一個(gè)節(jié)點(diǎn)的地址。
[0080] 可選的,當(dāng)單個(gè)VF支持一個(gè)或多個(gè)優(yōu)先級(jí)PRI時(shí),每個(gè)VF和PRI的組合所對(duì)應(yīng)的 隊(duì)列按照鏈表結(jié)構(gòu)進(jìn)行連接。不同的VF和PRI的組合所對(duì)應(yīng)的鏈表互不相同。
[0081] 在本實(shí)施例中,具體可以采用單向鏈表的方式來(lái)串接相關(guān)的隊(duì)列,各種類型的隊(duì) 列分別串成一個(gè)鏈表。例如,空閑的第一隊(duì)列組成第一隊(duì)列空閑鏈表,分配組VF某個(gè)優(yōu)先 級(jí)的隊(duì)列組成一個(gè)鏈表。這樣,針對(duì)某個(gè)VF某個(gè)PRI的鏈表配置與其他VF和PRI的鏈表 配置完全無(wú)關(guān),保持了鏈表配置的獨(dú)立性,即業(yè)務(wù)的獨(dú)立性。
[0082] 鏈表的具體實(shí)現(xiàn)方式相對(duì)比較靈活,本發(fā)明實(shí)施例結(jié)合圖5、圖6對(duì)其中一種具體 的實(shí)現(xiàn)進(jìn)行介紹,本領(lǐng)域技術(shù)人員可以根據(jù)本發(fā)明實(shí)施例中的方案在不付出創(chuàng)新性的勞動(dòng) 性來(lái)進(jìn)行各種變形,以通過(guò)其他方案進(jìn)行實(shí)現(xiàn)。
[0083] 請(qǐng)參考圖5,圖5示意了 64個(gè)VF可以使用1024個(gè)隊(duì)列,其中,一部分未分配給VF 的隊(duì)列(圖中最右側(cè)一部分)組成第一隊(duì)列空閑鏈表,另一部分隊(duì)列已分配給了相應(yīng)的VF、 PRI組合(如前4個(gè)隊(duì)列分配給了 {VF0,PRI0}組合)的隊(duì)列各自再組成一個(gè)鏈表。
[0084] 參見(jiàn)圖6,圖6示出了如何管理鏈表的一些數(shù)據(jù)結(jié)構(gòu)。
[0085] 圖6中的"空閑鏈表的指示信息"包括空閑鏈表的起始隊(duì)列的地址和結(jié)束隊(duì)列的 結(jié)束地址,從而可以知道空閑鏈表從哪里開(kāi)始,哪里結(jié)束,還可以知道長(zhǎng)度是多少(假設(shè)地 址是連續(xù)的);
[0086] 圖6中的"VF,PRI鏈表結(jié)構(gòu)"的內(nèi)容與"空閑鏈表的指示信息"中的內(nèi)容類似,也 包括起始隊(duì)列和結(jié)束隊(duì)列的地址;
[0087] 圖6中的"隊(duì)列數(shù)據(jù)結(jié)構(gòu)"包括"en"、"cnt"以及"neXt_n〇de_addr"等字段,其中, "en"用于指示該隊(duì)列是否有報(bào)文,可以使用"1"來(lái)表示有報(bào)文,"0"來(lái)表示無(wú)報(bào)文;"cnt" 用于指示報(bào)文個(gè)數(shù),"cnt"不為0時(shí),"en"為1,"cnt"為0時(shí),"en"變?yōu)? ;"next_n〇de_ addr"用于指示下一個(gè)節(jié)點(diǎn)(即下一個(gè)隊(duì)列)的地址。如果該隊(duì)列為某一個(gè)VF和PRI的組 合對(duì)應(yīng)的鏈表中的最后一個(gè)隊(duì)列,那么"next_node_addr"項(xiàng)的值可設(shè)置成本身的地址。需 要說(shuō)明的是,在另一實(shí)施例中,也可以不設(shè)置"en"字段,而通過(guò)"cnt"來(lái)判斷有沒(méi)有報(bào)文, 但"cnt"在實(shí)際中數(shù)量會(huì)比較大,數(shù)據(jù)占用物理空間的bit數(shù)會(huì)比較多,而"en"可以只使 用1個(gè)bit位(表示0或1),這樣通過(guò)專用硬件芯片來(lái)實(shí)現(xiàn)時(shí)效率會(huì)更加高一點(diǎn)。
[0088] 通過(guò)上述數(shù)據(jù)結(jié)構(gòu),即可以靈活實(shí)現(xiàn)各個(gè)鏈表中隊(duì)列的增加及刪除,例如,需要從 第一隊(duì)列空閑鏈表中分配一個(gè)隊(duì)列給為VR)和PRI0組合時(shí),可以先通過(guò)空間鏈表的指示信 息找到空閑鏈表;然后修改"VF,PRI鏈結(jié)構(gòu)"中的對(duì)應(yīng)于VR)和PRI0組合的表項(xiàng)中的地址, 來(lái)表示有新隊(duì)列加入;再修改"隊(duì)列數(shù)據(jù)結(jié)構(gòu)"表中跟被分配給VR)和PRI0組合的隊(duì)列相 關(guān)的一些隊(duì)列的next_node_addr來(lái)指示各個(gè)新各隊(duì)列新的關(guān)系,具體可以結(jié)合實(shí)際情況 (如是從鏈?zhǔn)兹£?duì)列還是從鏈尾取隊(duì)列,是添加到鏈?zhǔn)走€是鏈尾)來(lái)進(jìn)行修改,具體修改方 法這些都為本領(lǐng)域技術(shù)人員所公知的技術(shù),這里不再贅述。
[0089] 接下來(lái)再介紹步驟20中的處理過(guò)程,其中處理具體為調(diào)度處理,在調(diào)度后,通過(guò) 一套報(bào)文處理機(jī)制來(lái)對(duì)隊(duì)列中的報(bào)文進(jìn)行處理,這套報(bào)文處理機(jī)制為現(xiàn)有技術(shù),本實(shí)施例 中并不對(duì)此進(jìn)行具體描述,本實(shí)施例僅針對(duì)隊(duì)列的調(diào)度進(jìn)行詳細(xì)說(shuō)明。
[0090] 具體的,參見(jiàn)圖7,本發(fā)明實(shí)施例提供的調(diào)度方法包括以下內(nèi)容:
[0091] 步驟101 :獲得需要調(diào)度的第一 VF和第一 PRI的組合;
[0092] 具體的,組合可以用{VF,PRI}這種格式表示,如{VF0,PRI2}表示"VF0,且優(yōu)先級(jí) 為2"這個(gè)組合,該組合對(duì)應(yīng)有一個(gè)或多個(gè)隊(duì)列。
[0093] 步驟102 :在表Y中確定出與第一 VF和第一 PRI的組合對(duì)應(yīng)的隊(duì)列的首隊(duì)列在表 X中的第一地址。
[0094] 其中,表X存儲(chǔ)有個(gè)數(shù)為所有隊(duì)列數(shù)的第一表項(xiàng)。其中,所有隊(duì)列數(shù)表示分配到所 有VF的隊(duì)列數(shù);第一表項(xiàng)包括每個(gè)VF和每個(gè)PRI的組合對(duì)應(yīng)的隊(duì)列的隊(duì)列號(hào)(如有1024 個(gè)隊(duì)列,隊(duì)列號(hào)可以為0-1023)。表Y存儲(chǔ)有多個(gè)第二表項(xiàng),每個(gè)第二表項(xiàng)包括每個(gè)VF和每 個(gè)PRI的組合,以及每個(gè)VF和每個(gè)PRI的組合對(duì)應(yīng)的隊(duì)列的首隊(duì)列在表X中的地址。第二 表項(xiàng)的個(gè)數(shù)為VF的個(gè)數(shù)乘以單個(gè)VF支持的最大PRI個(gè)數(shù)的值。
[0095] 步驟103 :獲取上次調(diào)度的終止隊(duì)列的隊(duì)列序號(hào);隊(duì)列序號(hào)表征終止隊(duì)列在第一 VF和第一 PRI的組合對(duì)應(yīng)的隊(duì)列中的排序;
[0096] 步驟104 :根據(jù)第一地址和隊(duì)列序號(hào)在表X中確定出針對(duì)第一 VF和第一 PRI的組 合的本次調(diào)度的起始隊(duì)列。
[0097] 舉例來(lái)說(shuō),請(qǐng)參考圖8a所示,假設(shè)VF的數(shù)量為64,單個(gè)VF支持的最大PRI個(gè)數(shù) 為4,分別為PRI0、PRI1、PRI2和PRI3。所有隊(duì)列數(shù),即隊(duì)列總數(shù)為1024。不管如何配置每 個(gè)PRI下的隊(duì)列數(shù)和/或隊(duì)列號(hào),在系統(tǒng)啟動(dòng)時(shí),或者在每次隊(duì)列配置有更新時(shí),或者是定 期掃描隊(duì)列配置的相關(guān)信息,生成或更新表X。
[0098] 在表X中,每個(gè)VF的每個(gè)PRI下的隊(duì)列均是按照順序存儲(chǔ)的。例如:VR)下的PRIO 包括有3個(gè)隊(duì)列,分別是隊(duì)列1、隊(duì)列10和隊(duì)列100,而且隊(duì)列1是一個(gè)隊(duì)列,隊(duì)列10是第 二個(gè)隊(duì)列,隊(duì)列100是第三個(gè)隊(duì)列。在存儲(chǔ)時(shí),按照隊(duì)列的順序存儲(chǔ),表X中的前三項(xiàng)依次 為1、10、100。換言之,表X中的地址0中存儲(chǔ)有1,地址1存儲(chǔ)有10,地址2中存儲(chǔ)有100。
[0099] 進(jìn)一步,在同一個(gè)VF中,也是按照PRI0至PRI3的順序存儲(chǔ)的。VF之間也是按照 VF0至VF63的順序存儲(chǔ)的。
[0100] 可選的,第一表項(xiàng)也可以包括每個(gè)VF和每個(gè)PRI的組合。
[0101] 而在表Y中,存儲(chǔ)有每個(gè)VF和每個(gè)PRI的組合以及每個(gè)VF和每個(gè)PRI的組合對(duì) 應(yīng)的隊(duì)列的首隊(duì)列在表X中的地址。舉例來(lái)說(shuō),請(qǐng)參考圖8b所示,以總隊(duì)列數(shù)為1024、VF 的個(gè)數(shù)為64、單個(gè)VF支持的最大PRI個(gè)數(shù)為4為例來(lái)說(shuō),第二表項(xiàng)的個(gè)數(shù)為64乘以4的 值,即256。在表Y中,VF0和PRI0的組合對(duì)應(yīng)的隊(duì)列的首隊(duì)列在表X中的地址為0。VF0 和PRI1的組合對(duì)應(yīng)的隊(duì)列的首隊(duì)列在表X中的地址為3。
[0102] 具體來(lái)說(shuō),在生成或更新表X時(shí),就把每個(gè)VF和每個(gè)PRI的組合對(duì)應(yīng)的隊(duì)列的首 隊(duì)列在表X中的地址寫入表Y中。
[0103] 可選的,在實(shí)際運(yùn)用中,表Y中也可以存儲(chǔ)有每個(gè)VF和每個(gè)PRI的組合對(duì)應(yīng)的隊(duì) 列的尾隊(duì)列在表X中的地址。例如:在圖8b所示的{VF0,PRI0}對(duì)應(yīng)的數(shù)據(jù)可以是(0,2), 分別表示首隊(duì)列和尾隊(duì)列在表X中的地址。
[0104] 如果是采用鏈表的形式來(lái)管理隊(duì)列,那么在建立表X和表Y時(shí),具體可以通過(guò)掃描 隊(duì)列鏈表來(lái)建立,即先查找到一個(gè)鏈表的首隊(duì)列,然后根據(jù)首隊(duì)列的數(shù)據(jù)結(jié)構(gòu)表找到下一 個(gè)隊(duì)列,依次類推,直到找到鏈表的尾隊(duì)列,從而建立表X和表Y。
[0105] 接下來(lái)介紹步驟101的實(shí)施過(guò)程。一種可能的實(shí)現(xiàn)方式與現(xiàn)有技術(shù)中類似,請(qǐng)參 考圖9所示,同一優(yōu)先級(jí)下VF之間采用輪詢(Round-Robin ;RR)調(diào)度,如圖9中所示,每個(gè) PRI對(duì)應(yīng)一個(gè)RR調(diào)度,共有4個(gè)RR調(diào)度。例如:PRI0對(duì)應(yīng)的RR調(diào)度,先查詢VF0是否有 數(shù)據(jù),具體可以通過(guò)是否有數(shù)據(jù)使能來(lái)判斷是否有數(shù)據(jù),同時(shí)查詢"VF帶寬配置表",如果有 數(shù)據(jù)的話,并且VF0具有帶寬,就輸出調(diào)度結(jié)果{VF PRI}到先入先出(First Input First Output ;FIF0)單元。然后繼續(xù)查詢VF1的PRI0,如果VF1的PRI0沒(méi)有數(shù)據(jù)使能,表示沒(méi)有 數(shù)據(jù),和/或VF1沒(méi)有帶寬,就跳過(guò)VF1的PRI0,繼續(xù)查詢VF2的PRI0,重復(fù)相同的動(dòng)作直 至查詢完最后一個(gè)VF,例如VF63。
[0106] 按照上述描述的一個(gè)RR的調(diào)度過(guò)程,本實(shí)施例中通過(guò)RR調(diào)度并行對(duì)VF的4個(gè)PRI 進(jìn)行輪詢,如果VF有帶寬,同時(shí)VF有數(shù)據(jù),那么就將調(diào)度結(jié)果{VF,PRI}輸出至FIFO單元。 對(duì)應(yīng)每個(gè)RR調(diào)度,共有4個(gè)FIFO單元,分別用于存儲(chǔ)對(duì)應(yīng)的RR調(diào)度的調(diào)度結(jié)果。
[0107] 然后采用優(yōu)先級(jí)調(diào)度的方式對(duì)4個(gè)FIFO單元中的調(diào)度結(jié)果進(jìn)行優(yōu)先級(jí)調(diào)度,根據(jù) 優(yōu)先級(jí)配置原則選出哪個(gè)VF哪個(gè)PRI需要先進(jìn)行隊(duì)列調(diào)度,例如輸出的優(yōu)先級(jí)調(diào)度的結(jié)果 為{VF0, PRI1}。相應(yīng)的,就獲得了需要調(diào)度的第一 VF和第一 PRI的組合。
[0108] 當(dāng)然,在實(shí)際運(yùn)用中,還可以通過(guò)其他方式獲得需要調(diào)度的第一 VF和第一 PRI的 組合,例如通過(guò)其他調(diào)度規(guī)則確定,或者直接由用戶配置。
[0109] 當(dāng)獲得需要調(diào)度的第一 VF和第一 PRI的組合之后,接下來(lái)執(zhí)行步驟102,即在表Y 中確定出與第一 VF和第一 PRI的組合對(duì)應(yīng)的隊(duì)列的首隊(duì)列在表X中的第一地址。
[0110] 繼續(xù)以前述圖8a和圖8b中所示的表X和表Y為例進(jìn)行說(shuō)明,假設(shè)在步驟101中獲 得的第一 VF和第一 PRI的組合為{VFO, PRI1},那么查詢圖8b中的表Y就可以獲得{VFO, PRI1}對(duì)應(yīng)的數(shù)字為3,即{VFO, PRI1}對(duì)應(yīng)的隊(duì)列的首隊(duì)列在表X中的第一地址為3。
[0111] 可選的,在步驟101之后,步驟102的同時(shí)、之前或之后,執(zhí)行步驟103 :即獲取上 次調(diào)度的終止隊(duì)列的隊(duì)列序號(hào);隊(duì)列序號(hào)表征終止隊(duì)列在第一 VF和第一 PRI的組合對(duì)應(yīng)的 隊(duì)列中的排序。其中,獲取上次調(diào)度的終止隊(duì)列的隊(duì)列序號(hào),具體例如:通過(guò)上次輪詢位置 寄存表獲取所述隊(duì)列序號(hào)。請(qǐng)參考圖9所示,上次輪詢位置寄存表中存儲(chǔ)有每個(gè)VF和每個(gè) PRI的組合對(duì)應(yīng)的上次調(diào)度中的終止隊(duì)列的隊(duì)列序號(hào)。
[0112] 需要說(shuō)明的是,在本實(shí)施例中,如果本次調(diào)度為第一次調(diào)度時(shí),上次調(diào)度的終止隊(duì) 列的隊(duì)列序號(hào)均為0。例如當(dāng)每次系統(tǒng)上電時(shí),上次輪詢位置寄存表中的每個(gè)項(xiàng)都重置為 0〇
[0113] 接下來(lái)執(zhí)行步驟104,即根據(jù)第一地址和隊(duì)列序號(hào)在表X中確定出針對(duì)第一 VF和 第一 PRI的組合的本次調(diào)度的起始隊(duì)列。
[0114] 步驟104具體包括:將第一地址和隊(duì)列序號(hào)相加,獲得第二地址;當(dāng)?shù)诙刂沸∮?第一 VF和第一 PRI的組合的下一 VF和PRI的組合的隊(duì)列的首地址時(shí),在表X中確定出第 二地址對(duì)應(yīng)的隊(duì)列號(hào),所述隊(duì)列號(hào)對(duì)應(yīng)的隊(duì)列即為所述起始隊(duì)列。
[0115] 舉例來(lái)說(shuō),請(qǐng)繼續(xù)參考圖8a所示,隊(duì)列2為{VF0,PRI1}的隊(duì)列中的第1隊(duì)列。隊(duì) 列20為{VF0,PRI1}的隊(duì)列中的第2隊(duì)列。隊(duì)列200為{VF0,PRI1}的隊(duì)列中的第3隊(duì)列。 假設(shè)上次調(diào)度的終止隊(duì)列的隊(duì)列序號(hào)為1,那么就表示上次調(diào)度的終止隊(duì)列為IVFO, PRI1} 的隊(duì)列中的第1隊(duì)列,即隊(duì)列2。那么根據(jù)步驟103,將第一地址3與隊(duì)列序號(hào)1相加,獲得 第二地址4 ;第二地址4小于下一 VF和PRI的組合,S卩{VF0,PRI2}的隊(duì)列的首地址7,所以 在表X中確定出第二地址4對(duì)應(yīng)的隊(duì)列號(hào)為20,那么隊(duì)列號(hào)為20的隊(duì)列即為本次調(diào)度的起 始隊(duì)列。
[0116] 具體來(lái)說(shuō),可以通過(guò)以下兩種但不限于以下兩種的方法確定第二地址是否小于下 一 VF和PRI的組合的隊(duì)列的首地址。
[0117] 第一種:如前述所描述,在表Y中同時(shí)也存儲(chǔ)有每個(gè)VF和每個(gè)PRI的組合對(duì)應(yīng)的 隊(duì)列的尾隊(duì)列在表X中的地址時(shí),可以通過(guò)判斷第二地址是否小于等于尾隊(duì)列的地址來(lái)確 定第二地址是否小于下一 VF和PRI的組合的隊(duì)列的首地址。具體來(lái)說(shuō),如果第二地址小于 等于尾隊(duì)列的地址,那么第二地址就小于下一VF和PRI的組合的隊(duì)列的首地址;否則,第二 地址等于下一 VF和PRI的組合的隊(duì)列的首地址。
[0118] 第二種,在表Y中讀取下一 VF和PRI的組合的隊(duì)列的首地址;直接比較第二地址 和該首地址。
[0119] 可選的,當(dāng)?shù)诙刂返扔谙乱?VF和PRI的組合的隊(duì)列的首地址時(shí),在表X中確定 出第一地址對(duì)應(yīng)的隊(duì)列號(hào);第一地址對(duì)應(yīng)的隊(duì)列號(hào)對(duì)應(yīng)的隊(duì)列即為所述起始隊(duì)列。
[0120] 舉例來(lái)說(shuō),請(qǐng)繼續(xù)參考圖8a和圖8b所示,假設(shè)獲取到的隊(duì)列序號(hào)為4,也即上次調(diào) 度的是隊(duì)列300,得到的第二地址為7 ;判斷第二地址7是否小于下一 VF和PRI的組合,即 {VF0,PRI2}的隊(duì)列的首地址7。判斷的結(jié)果為否,表示第二地址為{VF0,PRI2}的首隊(duì)列在 表X中的地址,也表示第一 VF和第一 PRI上次調(diào)度了最后一個(gè)隊(duì)列。因此,本次調(diào)度應(yīng)該 從首隊(duì)列開(kāi)始,所以就將第一地址對(duì)應(yīng)的隊(duì)列號(hào)對(duì)應(yīng)的隊(duì)列作為本次調(diào)度的起始隊(duì)列,即 隊(duì)列2為本次調(diào)度的起始隊(duì)列。
[0121] 由以上描述可以看出,不管每個(gè)VF和每個(gè)PRI的組合的隊(duì)列是如何配置的,例如 每個(gè)PRI下的隊(duì)列數(shù)不相等,或者是隊(duì)列數(shù)相等但是沒(méi)有按照隊(duì)列號(hào)順序配置,都可以通 過(guò)本實(shí)施例中隊(duì)列調(diào)度方法在表X和表Y確定出本次調(diào)度的起始隊(duì)列,所以本實(shí)施例中的 調(diào)度方法能夠適用于不同的隊(duì)列配置方式。進(jìn)一步,采用前述的隊(duì)列調(diào)度方法,因?yàn)橹恍枰?查詢表X和表Y即可,不需要去掃描{VF,PRI}的組合對(duì)應(yīng)的隊(duì)列鏈表即可確定本次調(diào)度的 起始隊(duì)列,所以可以提1?調(diào)度的效率。
[0122] 當(dāng)在步驟104中確定出本次調(diào)度的起始隊(duì)列之后,該方法還包括:確定起始隊(duì)列 中是否有數(shù)據(jù);當(dāng)起始隊(duì)列中有數(shù)據(jù)時(shí),生成第一調(diào)度結(jié)果,第一調(diào)度結(jié)果包括第一 VF、第 一 PRI以及起始隊(duì)列的隊(duì)列號(hào)。
[0123] 其中,確定起始隊(duì)列中是否有數(shù)據(jù),具體例如為:確定起始隊(duì)列中是否有數(shù)據(jù)使能 (即判斷"en"位是否是" 1"),如果是,則可確定起始隊(duì)列中有數(shù)據(jù)。若果不是,則確定起始 隊(duì)列中沒(méi)有數(shù)據(jù)。
[0124] 當(dāng)起始隊(duì)列中有數(shù)據(jù)時(shí),生成第一調(diào)度結(jié)果,第一調(diào)度結(jié)果包括第一 VF、第一 PRI 以及起始隊(duì)列的隊(duì)列號(hào),例如|VF0,PRI1,20}。如此,專用硬件芯片可以去隊(duì)列20取數(shù)據(jù), 隊(duì)列20中的數(shù)據(jù)輸出可以通過(guò)先進(jìn)先出的原則進(jìn)行輸出,也可以通過(guò)優(yōu)先級(jí)高低的原則 進(jìn)行輸出。
[0125] 進(jìn)一步,當(dāng)起始隊(duì)列中有數(shù)據(jù)時(shí),保存起始隊(duì)列的隊(duì)列序號(hào)。例如:將隊(duì)列序號(hào)2 保存在上次輪詢位置寄存表中,便于下次調(diào)度時(shí),作為第一 VF和PRI的下次調(diào)度的上次調(diào) 度的終止隊(duì)列的隊(duì)列序號(hào)。
[0126] 然后,繼續(xù)執(zhí)行步驟101,按照前述描述的過(guò)程繼續(xù)處理,進(jìn)行下一次調(diào)度過(guò)程。
[0127] 可選的,該方法還包括:當(dāng)起始隊(duì)列中沒(méi)有數(shù)據(jù)時(shí),通過(guò)查詢起始隊(duì)列的數(shù)據(jù)結(jié)構(gòu) 表,確定下一隊(duì)列;確定所述下一隊(duì)列中是否有數(shù)據(jù);當(dāng)下一隊(duì)列中有數(shù)據(jù)時(shí),生成第二調(diào) 度結(jié)果,第二調(diào)度結(jié)果包括第一 VF、第一 PRI以及下一隊(duì)列的隊(duì)列號(hào);保存下一隊(duì)列的隊(duì)列 序號(hào)。
[0128] 當(dāng)然,如果起始隊(duì)列的下一隊(duì)列中也沒(méi)有數(shù)據(jù)的話,就繼續(xù)查詢下一隊(duì)列的數(shù)據(jù) 結(jié)構(gòu)表,確定下一隊(duì)列的下一隊(duì)列,然后對(duì)下一隊(duì)列的隊(duì)列進(jìn)行查詢。如此循環(huán),直至找到 數(shù)據(jù)。輪詢完第一 VF和第一 PRI下的所有隊(duì)列之后,一定可以找出一個(gè)數(shù)據(jù),因?yàn)榈谝?VF 和第一PRI的組合具有數(shù)據(jù)使能。其中,當(dāng)再次輪詢到起始隊(duì)列時(shí),就表征已輪詢完第一VF 和第一 PRI下的所有隊(duì)列。
[0129] 需要說(shuō)明的是,在輪詢過(guò)程中,當(dāng)確定出某一隊(duì)列的下一隊(duì)列是該隊(duì)列本身時(shí),就 表示已輪詢到第一VF和第一PRI的組合對(duì)應(yīng)的隊(duì)列的最后一個(gè)隊(duì)列,那么就應(yīng)該跳到該隊(duì) 列的首隊(duì)列繼續(xù)查詢。
[0130] 可選的,當(dāng)數(shù)據(jù)從專用硬件芯片被調(diào)度出去之后,該方法還包括:刷新隊(duì)列數(shù)據(jù)結(jié) 構(gòu)表的數(shù)據(jù)使能、數(shù)據(jù)統(tǒng)計(jì)和VF輸入隊(duì)列的數(shù)據(jù)使能。例如:將"cnt"的值減1。如果減1 之后的值變?yōu)椹?那么還要將"en"項(xiàng)置為0。
[0131] 基于鏈表的隊(duì)列配置方式,步驟20還可以通過(guò)以下方法進(jìn)行隊(duì)列調(diào)度。
[0132] 第一步,與前述步驟101相同。
[0133] 第二步,查詢{VF,PRI}鏈,S卩{VF,PRI}的隊(duì)列鏈的指示信息,得到第一 VF和第一 PRI的組合對(duì)應(yīng)的首隊(duì)列的隊(duì)列號(hào)和尾隊(duì)列的隊(duì)列號(hào)。
[0134] 第三步,在上次輪詢位置寄存表中獲得上次調(diào)度的終止隊(duì)列的隊(duì)列號(hào)。
[0135] 第四步,查詢?nèi)鐖D6和圖9中的"隊(duì)列數(shù)據(jù)結(jié)構(gòu)"表,得到終止隊(duì)列的下一隊(duì)列的隊(duì) 列號(hào)next_node_addr。從next_node_addr對(duì)應(yīng)的隊(duì)列號(hào)開(kāi)始輪詢輸入隊(duì)列,當(dāng)next_node_ addr等于第一 VF,第一 PRI鏈表的尾隊(duì)列的隊(duì)列號(hào)時(shí)下一個(gè)輪詢地址要跳到第一 VF,第一 PRI鏈表的首隊(duì)列。
[0136] 與前述圖7及其相關(guān)描述相同的部分,本實(shí)施例中不再贅述。
[0137] 上述描述了如何將數(shù)據(jù)調(diào)度出去,接下來(lái)將介紹如何將數(shù)據(jù)存入第一隊(duì)列中。除 有特別說(shuō)明,相同的術(shù)語(yǔ)表征相同的意思。
[0138] 一種情況為:即將步驟20中獲取的數(shù)據(jù)存放到所述第一隊(duì)列中。因?yàn)榈诙?duì)列與 第一隊(duì)列一致,所以,當(dāng)虛擬機(jī)中的數(shù)據(jù)傳輸?shù)綄S糜布酒校瑪?shù)據(jù)攜帶了在第二隊(duì)列的 隊(duì)列號(hào),那么就可以確定存放該數(shù)據(jù)的第一隊(duì)列的隊(duì)列號(hào)。然后將該數(shù)據(jù)存儲(chǔ)在該隊(duì)列中。 具體來(lái)說(shuō),可以將數(shù)據(jù)的首地址和長(zhǎng)度存儲(chǔ)在隊(duì)列中。也可以將數(shù)據(jù)本身存儲(chǔ)在隊(duì)列中。
[0139] 可選的,存儲(chǔ)的方式可以是按照存儲(chǔ)時(shí)間的先后存儲(chǔ),也可以是按照鏈表的形式 進(jìn)行存儲(chǔ)。
[0140] 可選的,當(dāng)將數(shù)據(jù)存儲(chǔ)在該隊(duì)列中后,將該隊(duì)列的數(shù)據(jù)計(jì)數(shù)器加1。例如:將前述 所述"cnt"項(xiàng)的值加1。如果"cnt"的值是由0變成1,那么還要將"en"項(xiàng)的值置為1,表 示有數(shù)據(jù)使能。即刷新該隊(duì)列的數(shù)據(jù)結(jié)構(gòu)表。
[0141] 同時(shí)可以查詢?nèi)鐖D9中"隊(duì)列到{VF,PRI}配置表",就可以確定出該數(shù)據(jù)對(duì)應(yīng)的 VF和PRI的組合。
[0142] 進(jìn)一步,還需要將{VFx,PRIy}有數(shù)據(jù)的標(biāo)志置位,表示有數(shù)據(jù)使能。在RR調(diào)度的 時(shí)候,只有有數(shù)據(jù)使能的{VF,PRI}才會(huì)被調(diào)度。
[0143] 另一種情況為從系統(tǒng)外部獲取到的外部數(shù)據(jù),將外部數(shù)據(jù)存放到第一隊(duì)列中。請(qǐng) 再參考圖10所示,該隊(duì)列調(diào)度方法包括以下內(nèi)容:
[0144] 步驟201 :接收一外部數(shù)據(jù);
[0145] 步驟202 :確定外部數(shù)據(jù)對(duì)應(yīng)的虛擬功能VF、優(yōu)先級(jí)PRI和隊(duì)列序號(hào);
[0146] 步驟203 :在表Y中確定出與VF和PRI的組合對(duì)應(yīng)的隊(duì)列的首隊(duì)列在表X中的第 一地址;
[0147] 步驟204:根據(jù)第一地址和隊(duì)列序號(hào),獲得將要存儲(chǔ)所述外部數(shù)據(jù)的隊(duì)列在表X中 的第二地址;該第二地址與前述的第二地址不完全相同,下面將詳細(xì)介紹。
[0148] 步驟205 :根據(jù)第二地址在表X中確定出將要存儲(chǔ)所述外部數(shù)據(jù)的隊(duì)列的隊(duì)列 號(hào);
[0149] 步驟206 :將所述外部數(shù)據(jù)存儲(chǔ)在所述隊(duì)列號(hào)對(duì)應(yīng)的隊(duì)列中。
[0150] 在步驟201中,接收一外部數(shù)據(jù)。具體來(lái)說(shuō),例如從其他設(shè)備接收到一個(gè)報(bào)文。
[0151] 接下來(lái)執(zhí)行步驟202,具體來(lái)說(shuō),確定外部數(shù)據(jù)對(duì)應(yīng)的虛擬功能VF,可以是通過(guò)L2 交換,即外部數(shù)據(jù)的媒體接入控制(Media Access Control ;MAC)地址到VF之間的映射,確 定該外部數(shù)據(jù)對(duì)應(yīng)的VF。
[0152] 確定PRI,具體可以是將外部數(shù)據(jù)中的特定字段,例如VLAN(虛擬局域網(wǎng))字段中 優(yōu)先級(jí)的比特值,經(jīng)過(guò)一個(gè)映射規(guī)則映射成符合本實(shí)施例中的優(yōu)先級(jí)的值。
[0153] 為方便描述,假設(shè)確定出的該外部數(shù)據(jù)對(duì)應(yīng)的VF和PRI,記為{VFx,PRIy}。
[0154] 確定隊(duì)列序號(hào),具體例如是利用哈希算法計(jì)算MAC地址得到一個(gè)索引,該索引對(duì) 應(yīng)到{VFx,PRIy}的多個(gè)物理隊(duì)列中的某一個(gè)。該索引表征將要存儲(chǔ)該外部數(shù)據(jù)的隊(duì)列在 {VFx,PRIy}對(duì)應(yīng)的隊(duì)列中的排序。例如:該索引對(duì)應(yīng)到{VFx,PRIy}的第2個(gè)隊(duì)列,也即表 征將要存儲(chǔ)該外部數(shù)據(jù)的隊(duì)列序號(hào)為2。
[0155] 接下來(lái)執(zhí)行步驟203,即在表Y中確定出與{VFx,PRIy}對(duì)應(yīng)的隊(duì)列的首隊(duì)列在表 X中的第一地址。
[0156] 舉例來(lái)說(shuō),假設(shè){VFx,PRIy}為{VFO, PRI1},那么根據(jù)圖8b中的表Y,可以確定第 一地址為3。
[0157] 接下來(lái)執(zhí)行步驟204,根據(jù)第一地址和隊(duì)列序號(hào),獲得將要存儲(chǔ)該數(shù)據(jù)的隊(duì)列在表 X中的第二地址。
[0158] 具體來(lái)說(shuō),將第一地址加上隊(duì)列序號(hào)再減去1,得到第二地址。繼續(xù)沿用前述例子, 第一地址為3,隊(duì)列序號(hào)為2,那么第二地址為4。
[0159] 接下來(lái)執(zhí)行步驟205,即根據(jù)第二地址在表X中確定出將要存儲(chǔ)該外部數(shù)據(jù)的隊(duì) 列的隊(duì)列號(hào)。例如:在圖8a中所示的表X中,查詢到第二地址4對(duì)應(yīng)的隊(duì)列號(hào)為20。
[0160] 當(dāng)確定隊(duì)列號(hào)后,執(zhí)行步驟206,將該數(shù)據(jù)存儲(chǔ)在該隊(duì)列中。具體來(lái)說(shuō),可以將數(shù)據(jù) 的首地址和長(zhǎng)度存儲(chǔ)在隊(duì)列中。也可以將數(shù)據(jù)本身存儲(chǔ)在隊(duì)列中。
[0161] 通過(guò)本實(shí)施例中的方法,只需要通過(guò)表X和表Y就可以快速查詢到存儲(chǔ)數(shù)據(jù)的隊(duì) 列號(hào),所以不需要每次都掃描隊(duì)列配置表,所以可以提高查詢的效率。
[0162] 可選的,存儲(chǔ)的方式可以是按照存儲(chǔ)時(shí)間的先后存儲(chǔ),也可以是按照鏈表的形式 進(jìn)行存儲(chǔ)。
[0163] 可選的,當(dāng)將數(shù)據(jù)存儲(chǔ)在該隊(duì)列中后,將該隊(duì)列的數(shù)據(jù)計(jì)數(shù)器加1。例如:將前述 所述"cnt"項(xiàng)的值加1。如果"cnt"的值是由0變成1,那么還要將"en"項(xiàng)的值置為1,表 示有數(shù)據(jù)使能。
[0164] 進(jìn)一步,還需要將{VFx,PRIy}有數(shù)據(jù)的標(biāo)志置位,表示有數(shù)據(jù)使能。在RR調(diào)度的 時(shí)候,只有有數(shù)據(jù)使能的{VF,PRI}才會(huì)被調(diào)度。
[0165] 基于同一發(fā)明構(gòu)思,本申請(qǐng)實(shí)施例還提供一種基于SR-I0V的計(jì)算系統(tǒng)。請(qǐng)參考圖 11所示,為本實(shí)施例中計(jì)算系統(tǒng)的硬件實(shí)現(xiàn)的系統(tǒng)框圖。該計(jì)算系統(tǒng)包括:通用處理器301 以及專用硬件芯片302,通用處理器301用于運(yùn)行一個(gè)或多個(gè)虛擬機(jī),專用硬件芯片302用 于基于SR-I0V協(xié)議實(shí)現(xiàn)物理功能PF以及一個(gè)或多個(gè)虛擬功能VF,每個(gè)虛擬機(jī)與一個(gè)或多 個(gè)VF對(duì)應(yīng)。
[0166] 可選的,通用處理器301具體例如是CPU。通用處理器301還用于運(yùn)行通用的操作 系統(tǒng)。
[0167] 可選的,專用硬件芯片302具體例如是ASIC、FPGA、CPLD。
[0168] 專用硬件芯片302包括第一隊(duì)列空閑鏈表,第一隊(duì)列空閑鏈表包括多個(gè)按鏈表結(jié) 構(gòu)進(jìn)行連接的空閑的第一隊(duì)列,其中,第一隊(duì)列為位于專用硬件芯片302中的隊(duì)列。
[0169] 專用硬件芯片302還用于從第一隊(duì)列空閑鏈表中分配一個(gè)或多個(gè)第一隊(duì)列分別 給與虛擬機(jī)對(duì)應(yīng)的一個(gè)或多個(gè)VF,其中,分配給每個(gè)VF的第一隊(duì)列的數(shù)量與每個(gè)VF對(duì)應(yīng)的 虛擬機(jī)中的程序需要用到的第二隊(duì)列的數(shù)量一致;以及還用于獲取虛擬機(jī)中的第二隊(duì)列中 的數(shù)據(jù),將第二隊(duì)列中的數(shù)據(jù)存放到第一隊(duì)列中進(jìn)行處理。
[0170] 可選的,當(dāng)分配給每個(gè)VF的第一隊(duì)列的數(shù)量為多個(gè)時(shí),每個(gè)VF的多個(gè)第一隊(duì)列按 鏈表結(jié)構(gòu)進(jìn)行連接。
[0171] 可選的,分配給每個(gè)VF的第一隊(duì)列的數(shù)量隨著第二隊(duì)列的數(shù)量的變化而進(jìn)行同 樣的變化。如此可以保證所述第二隊(duì)列的數(shù)量和所述第一隊(duì)列的數(shù)量始終一致。
[0172] 結(jié)合以上各實(shí)施例,當(dāng)單個(gè)VF支持一個(gè)或多個(gè)優(yōu)先級(jí)PRI,處理為調(diào)度處理時(shí),專 用硬件芯片302具體用于:獲得需要調(diào)度的第一 VF和第一 PRI的組合;
[0173] 在表Y中確定出與第一 VF和第一PRI的組合對(duì)應(yīng)的隊(duì)列鏈的首隊(duì)列在表X中的第 一地址;其中,表X存儲(chǔ)有個(gè)數(shù)為所有隊(duì)列數(shù)的第一表項(xiàng),第一表項(xiàng)包括每個(gè)VF和每個(gè)PRI 的組合對(duì)應(yīng)的隊(duì)列的隊(duì)列號(hào);表Y存儲(chǔ)有多個(gè)第二表項(xiàng),每個(gè)第二表項(xiàng)包括每個(gè)VF和每個(gè) PRI的組合,以及每個(gè)VF和每個(gè)PRI的組合對(duì)應(yīng)的隊(duì)列的首隊(duì)列在表X中的地址;第二表 項(xiàng)的個(gè)數(shù)為VF的個(gè)數(shù)乘以單個(gè)VF支持的最大PRI個(gè)數(shù)的值;
[0174] 獲取上次調(diào)度的終止隊(duì)列的隊(duì)列序號(hào);隊(duì)列序號(hào)表征終止隊(duì)列在第一 VF和第一 PRI的組合對(duì)應(yīng)的隊(duì)列中的排序;
[0175] 根據(jù)第一地址和隊(duì)列序號(hào)在表X中確定出針對(duì)第一 VF和第一 PRI的組合的本次 調(diào)度的起始隊(duì)列。
[0176] 進(jìn)一步,專用硬件芯片302具體用于:將第一地址和隊(duì)列序號(hào)相加,獲得第二地 址;當(dāng)?shù)诙刂沸∮诘谝?VF和第一 PRI的組合的下一 VF和PRI的組合的隊(duì)列的首地址時(shí), 在表X中確定出第二地址對(duì)應(yīng)的隊(duì)列號(hào),隊(duì)列號(hào)對(duì)應(yīng)的隊(duì)列即為起始隊(duì)列。
[0177] 進(jìn)一步,專用硬件芯片302具體用于:當(dāng)?shù)诙刂返扔谙乱?VF和PRI的組合的隊(duì) 列的首地址時(shí),在表X中確定出第一地址對(duì)應(yīng)的隊(duì)列號(hào),隊(duì)列號(hào)對(duì)應(yīng)的隊(duì)列即為起始隊(duì)列。
[0178] 結(jié)合以上各實(shí)施例,專用硬件芯片302還用于:確定起始隊(duì)列中是否有數(shù)據(jù);當(dāng)起 始隊(duì)列中有數(shù)據(jù)時(shí),生成第一調(diào)度結(jié)果以及保存起始隊(duì)列的隊(duì)列序號(hào),第一調(diào)度結(jié)果包括 第一 VF、第一 PRI以及起始隊(duì)列的隊(duì)列號(hào)。
[0179] 進(jìn)一步,專用硬件芯片302還用于:當(dāng)起始隊(duì)列中沒(méi)有數(shù)據(jù)時(shí),通過(guò)查詢起始隊(duì)列 的數(shù)據(jù)結(jié)構(gòu)表,確定下一隊(duì)列;其中,數(shù)據(jù)結(jié)構(gòu)表包括用于指示起始隊(duì)列是否有數(shù)據(jù)的指示 信息、數(shù)據(jù)的數(shù)量信息以及起始隊(duì)列的下一隊(duì)列的隊(duì)列號(hào);確定下一隊(duì)列中是否有數(shù)據(jù); 當(dāng)下一隊(duì)列中有數(shù)據(jù)時(shí),生成第二調(diào)度結(jié)果,第二調(diào)度結(jié)果包括第一 VF、第一 PRI以及下一 隊(duì)列的隊(duì)列號(hào);保存下一隊(duì)列的隊(duì)列序號(hào)。
[0180] 結(jié)合以上各實(shí)施例,專用硬件芯片302還用于:在分配一個(gè)或多個(gè)第一隊(duì)列分別 給一個(gè)或多個(gè)VF之后,從每個(gè)VF的一個(gè)或多個(gè)第一隊(duì)列中刪除隊(duì)列;并將刪除的隊(duì)列加入 第一隊(duì)列空閑鏈表中。
[0181] 結(jié)合以上各實(shí)施例,專用硬件芯片302還用于:接收一外部數(shù)據(jù);確定外部數(shù)據(jù)對(duì) 應(yīng)的VF、PRI和隊(duì)列序號(hào);其中,隊(duì)列序號(hào)表征將要存儲(chǔ)外部數(shù)據(jù)的隊(duì)列在VF和PRI的組合 對(duì)應(yīng)的隊(duì)列中的排序;在表Y中確定出與VF和PRI的組合對(duì)應(yīng)的隊(duì)列的首隊(duì)列在表X中的 第一地址;根據(jù)第一地址和隊(duì)列序號(hào),獲得將要存儲(chǔ)外部數(shù)據(jù)的隊(duì)列在表X中的第二地址; 根據(jù)第二地址在表X中確定出將要存儲(chǔ)外部數(shù)據(jù)的隊(duì)列的隊(duì)列號(hào);將外部數(shù)據(jù)存儲(chǔ)在隊(duì)列 號(hào)對(duì)應(yīng)的隊(duì)列中。
[0182] 進(jìn)一步,在圖11中,總線架構(gòu)(用總線300來(lái)代表),總線300可以包括任意數(shù)量 的互聯(lián)的總線和橋,總線300將包括由通用處理器301代表和專用硬件芯片302的一個(gè)或 多個(gè)處理器和存儲(chǔ)器304代表的存儲(chǔ)器的各種電路鏈接在一起。總線300還可以將諸如外 圍設(shè)備、穩(wěn)壓器和功率管理電路等之類的各種其他電路鏈接在一起,這些都是本領(lǐng)域所公 知的,因此,本文不再對(duì)其進(jìn)行進(jìn)一步描述??偩€接口 303在總線300和接收器305和發(fā)送 器306之間提供接口。接收器305和發(fā)送器306可以是同一個(gè)元件,即收發(fā)機(jī),提供用于在 傳輸介質(zhì)上與各種其他裝置通信的單元。例如:接收器305從其他設(shè)備接收外部數(shù)據(jù)。發(fā) 送器306用于將專用硬件芯片302處理后的數(shù)據(jù)發(fā)送給其他設(shè)備。取決于計(jì)算系統(tǒng)的性質(zhì), 還可以提供用戶接口 307,例如小鍵盤、顯示器、揚(yáng)聲器、麥克風(fēng)、操縱桿。
[0183] 通用處理器301負(fù)責(zé)管理總線300和通常的處理,如前述所述運(yùn)行通用操作系統(tǒng)。 而存儲(chǔ)器304可以被用于存儲(chǔ)通用處理器301在執(zhí)行操作時(shí)所使用的數(shù)據(jù)。
[0184] 前述圖4-圖10實(shí)施例中的隊(duì)列調(diào)度方法中的各種變化方式和具體實(shí)例同樣適用 于本實(shí)施例的計(jì)算系統(tǒng),通過(guò)前述對(duì)隊(duì)列調(diào)度方法的詳細(xì)描述,本領(lǐng)域技術(shù)人員可以清楚 的知道本實(shí)施例中計(jì)算系統(tǒng)的實(shí)施方法,所以為了說(shuō)明書(shū)的簡(jiǎn)潔,在此不再詳述。
[0185] 申請(qǐng)實(shí)施例中提供的一個(gè)或多個(gè)技術(shù)方案,至少具有如下技術(shù)效果或優(yōu)點(diǎn):
[0186] 在本申請(qǐng)實(shí)施例中,專用硬件芯片上的第一隊(duì)列按照鏈表結(jié)構(gòu)進(jìn)行連接,形成第 一隊(duì)列空閑鏈表。然后專用硬件芯片從第一隊(duì)列空閑鏈表中分配一個(gè)或多個(gè)第一隊(duì)列分別 給與虛擬機(jī)對(duì)應(yīng)的一個(gè)或多個(gè)VF,所以每個(gè)VF的隊(duì)列是獨(dú)立的,而不受另一個(gè)VF的影響。 例如:刪除一個(gè)VF,也不需要因此為其他VF重新分配隊(duì)列。進(jìn)一步,分配給每個(gè)VF的第 一隊(duì)列的數(shù)量與每個(gè)VF對(duì)應(yīng)的虛擬機(jī)中的程序需要用到的第二隊(duì)列的數(shù)量一致,所以分 配給每個(gè)VF的隊(duì)列數(shù)可能不同,所以在本實(shí)施例中是按需進(jìn)行分配,能夠提高隊(duì)列的利用 率。因此,綜合以上兩方面,可以較大的提高隊(duì)列配置的靈活性。另外,因?yàn)榈谝魂?duì)列和第 二隊(duì)列的數(shù)量一致,所以在將第二隊(duì)列中的數(shù)據(jù)存放到第一隊(duì)列中時(shí),不需要復(fù)雜的映射 計(jì)算,所以能夠提高調(diào)度的便捷性。
[0187] 本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請(qǐng)的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序 產(chǎn)品。因此,本申請(qǐng)可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí) 施例的形式。而且,本申請(qǐng)可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī) 可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器和光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形 式。
[0188] 本申請(qǐng)是參照根據(jù)本申請(qǐng)實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程 圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一 流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算 機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理 器以產(chǎn)生一個(gè)機(jī)器,使得通過(guò)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生 用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能 的裝置。
[0189] 這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特 定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指 令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或 多個(gè)方框中指定的功能。
[0190] 這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì) 算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或 其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖 一個(gè)方框或多個(gè)方框中指定的功能的步驟。
[0191] 顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本申請(qǐng)進(jìn)行各種改動(dòng)和變型而不脫離本申請(qǐng)的精 神和范圍。這樣,倘若本申請(qǐng)的這些修改和變型屬于本申請(qǐng)權(quán)利要求及其等同技術(shù)的范圍 之內(nèi),則本申請(qǐng)也意圖包含這些改動(dòng)和變型在內(nèi)。
【權(quán)利要求】
1. 一種隊(duì)列調(diào)度方法,應(yīng)用于基于單根輸入輸出虛擬化SR-IOV的計(jì)算系統(tǒng),所述計(jì)算 系統(tǒng)包括通用處理器以及專用硬件芯片,所述通用處理器用于運(yùn)行一個(gè)或多個(gè)虛擬機(jī),所 述專用硬件芯片用于基于SR-I0V協(xié)議實(shí)現(xiàn)物理功能PF以及一個(gè)或多個(gè)虛擬功能VF,每個(gè) 所述虛擬機(jī)與一個(gè)或多個(gè)VF對(duì)應(yīng),其特征在于 : 所述專用硬件芯片包括第一隊(duì)列空閑鏈表,所述第一隊(duì)列空閑鏈表包括多個(gè)按鏈表結(jié) 構(gòu)進(jìn)行連接的空閑的第一隊(duì)列,其中,所述第一隊(duì)列為位于所述專用硬件芯片中的隊(duì)列; 所述方法由所述專用硬件芯片內(nèi)的一個(gè)或多個(gè)功能模塊執(zhí)行,包括: 從所述第一隊(duì)列空閑鏈表中分配一個(gè)或多個(gè)第一隊(duì)列分別給與虛擬機(jī)對(duì)應(yīng)的一個(gè)或 多個(gè)VF,其中,分配給每個(gè)VF的所述第一隊(duì)列的數(shù)量與每個(gè)VF對(duì)應(yīng)的虛擬機(jī)中的程序需要 用到的第二隊(duì)列的數(shù)量一致; 獲取所述虛擬機(jī)中的所述第二隊(duì)列中的數(shù)據(jù),將所述第二隊(duì)列中的數(shù)據(jù)存放到所述第 一隊(duì)列中進(jìn)行處理。
2. 如權(quán)利要求1所述的方法,其特征在于,當(dāng)分配給所述每個(gè)VF的第一隊(duì)列的數(shù)量為 多個(gè)時(shí),所述每個(gè)VF的多個(gè)第一隊(duì)列按鏈表結(jié)構(gòu)進(jìn)行連接。
3. 如權(quán)利要求1或2所述的方法,其特征在于,分配給每個(gè)VF的所述第一隊(duì)列的數(shù)量 隨著所述第二隊(duì)列的數(shù)量的變化而進(jìn)行同樣的變化。
4. 如權(quán)利要求1-3任一項(xiàng)所述的方法,其特征在于,單個(gè)VF支持一個(gè)或多個(gè)優(yōu)先級(jí) PRI,所述處理為調(diào)度處理,所述調(diào)度處理包括: 獲得需要調(diào)度的第一 VF和第一 PRI的組合; 在表Y中確定出與所述第一 VF和所述第一 PRI的組合對(duì)應(yīng)的隊(duì)列鏈的首隊(duì)列在表X 中的第一地址;其中,所述表X存儲(chǔ)有個(gè)數(shù)為所有隊(duì)列數(shù)的第一表項(xiàng),所述第一表項(xiàng)包括每 個(gè)VF和每個(gè)PRI的組合對(duì)應(yīng)的隊(duì)列的隊(duì)列號(hào);所述表Y存儲(chǔ)有多個(gè)第二表項(xiàng),每個(gè)所述第 二表項(xiàng)包括所述每個(gè)VF和所述每個(gè)PRI的組合,以及所述每個(gè)VF和所述每個(gè)PRI的組合 對(duì)應(yīng)的隊(duì)列的首隊(duì)列在表X中的地址;所述第二表項(xiàng)的個(gè)數(shù)為VF的個(gè)數(shù)乘以單個(gè)VF支持 的最大PRI個(gè)數(shù)的值; 獲取上次調(diào)度的終止隊(duì)列的隊(duì)列序號(hào);所述隊(duì)列序號(hào)表征所述終止隊(duì)列在所述第一 VF和所述第一 PRI的組合對(duì)應(yīng)的隊(duì)列中的排序; 根據(jù)所述第一地址和所述隊(duì)列序號(hào)在所述表X中確定出針對(duì)所述第一 VF和所述第一 PRI的組合的本次調(diào)度的起始隊(duì)列。
5. 如權(quán)利要求4所述的方法,其特征在于,根據(jù)所述第一地址和所述隊(duì)列序號(hào)在所述 表X中確定出針對(duì)所述第一 VF和所述第一 PRI的組合的本次調(diào)度的起始隊(duì)列,包括: 將所述第一地址和所述隊(duì)列序號(hào)相加,獲得第二地址; 當(dāng)所述第二地址小于所述第一 VF和所述第一 PRI的組合的下一 VF和PRI的組合的隊(duì) 列的首地址時(shí),在所述表X中確定出所述第二地址對(duì)應(yīng)的隊(duì)列號(hào),所述隊(duì)列號(hào)對(duì)應(yīng)的隊(duì)列 即為所述起始隊(duì)列。
6. 如權(quán)利要求5所述的方法,其特征在于,所述方法還包括:當(dāng)所述第二地址等于所述 下一 VF和PRI的組合的隊(duì)列的首地址時(shí),在所述表X中確定出所述第一地址對(duì)應(yīng)的隊(duì)列 號(hào),所述隊(duì)列號(hào)對(duì)應(yīng)的隊(duì)列即為所述起始隊(duì)列。
7. 如權(quán)利要求4-6任一項(xiàng)所述的方法,其特征在于,所述方法還包括: 確定所述起始隊(duì)列中是否有數(shù)據(jù); 當(dāng)所述起始隊(duì)列中有數(shù)據(jù)時(shí),生成第一調(diào)度結(jié)果以及保存所述起始隊(duì)列的隊(duì)列序號(hào), 所述第一調(diào)度結(jié)果包括所述第一 VF、所述第一 PRI以及所述起始隊(duì)列的隊(duì)列號(hào)。
8. 如權(quán)利要求7所述的方法,其特征在于,所述方法還包括: 當(dāng)所述起始隊(duì)列中沒(méi)有數(shù)據(jù)時(shí),通過(guò)查詢所述起始隊(duì)列的數(shù)據(jù)結(jié)構(gòu)表,確定所述下一 隊(duì)列;其中,所述數(shù)據(jù)結(jié)構(gòu)表包括用于指示所述起始隊(duì)列是否有數(shù)據(jù)的指示信息、數(shù)據(jù)的數(shù) 量信息以及所述起始隊(duì)列的下一隊(duì)列的隊(duì)列號(hào); 確定所述下一隊(duì)列中是否有數(shù)據(jù); 當(dāng)所述下一隊(duì)列中有數(shù)據(jù)時(shí),生成第二調(diào)度結(jié)果,所述第二調(diào)度結(jié)果包括所述第一 VF、 所述第一 PRI以及所述下一隊(duì)列的隊(duì)列號(hào); 保存所述下一隊(duì)列的隊(duì)列序號(hào)。
9. 如權(quán)利要求1-8任一項(xiàng)所述的方法,其特征在于,在分配一個(gè)或多個(gè)第一隊(duì)列分別 給一個(gè)或多個(gè)VF之后,所述方法還包括: 從所述每個(gè)VF的一個(gè)或多個(gè)第一隊(duì)列中刪除隊(duì)列; 將刪除的隊(duì)列加入所述第一隊(duì)列空閑鏈表中。
10. 如權(quán)利要求1-9任一項(xiàng)所述的方法,其特征在于,所述方法還包括: 接收一外部數(shù)據(jù); 確定所述外部數(shù)據(jù)對(duì)應(yīng)的VF、PRI和隊(duì)列序號(hào);其中,所述隊(duì)列序號(hào)表征將要存儲(chǔ)所述 外部數(shù)據(jù)的隊(duì)列在所述VF和所述PRI的組合對(duì)應(yīng)的隊(duì)列中的排序; 在表Y中確定出與所述VF和所述PRI的組合對(duì)應(yīng)的隊(duì)列的首隊(duì)列在表X中的第一地 址;其中,所述表X存儲(chǔ)有個(gè)數(shù)為所有隊(duì)列數(shù)的第一表項(xiàng),所述第一表項(xiàng)包括每個(gè)VF和每個(gè) PRI的組合對(duì)應(yīng)的隊(duì)列的隊(duì)列號(hào);所述表Y存儲(chǔ)有多個(gè)第二表項(xiàng),每個(gè)所述第二表項(xiàng)包括所 述每個(gè)VF和所述每個(gè)PRI的組合,以及所述每個(gè)VF和所述每個(gè)PRI的組合對(duì)應(yīng)的隊(duì)列的 首隊(duì)列在表X中的地址;所述第二表項(xiàng)的個(gè)數(shù)為VF的個(gè)數(shù)乘以單個(gè)VF支持的最大PRI個(gè) 數(shù)的值; 根據(jù)所述第一地址和所述隊(duì)列序號(hào),獲得將要存儲(chǔ)所述外部數(shù)據(jù)的隊(duì)列在所述表X中 的第二地址; 根據(jù)所述第二地址在所述表X中確定出將要存儲(chǔ)所述外部數(shù)據(jù)的隊(duì)列的隊(duì)列號(hào); 將所述外部數(shù)據(jù)存儲(chǔ)在所述隊(duì)列號(hào)對(duì)應(yīng)的隊(duì)列中。
11. 一種基于單根輸入輸出虛擬化SR-IOV的計(jì)算系統(tǒng),包括通用處理器以及專用硬件 芯片,所述通用處理器用于運(yùn)行一個(gè)或多個(gè)虛擬機(jī),所述專用硬件芯片用于基于SR-IOV協(xié) 議實(shí)現(xiàn)物理功能PF以及一個(gè)或多個(gè)虛擬功能VF,每個(gè)所述虛擬機(jī)與一個(gè)或多個(gè)VF對(duì)應(yīng),其 特征在于: 所述專用硬件芯片包括第一隊(duì)列空閑鏈表,所述第一隊(duì)列空閑鏈表包括多個(gè)按鏈表結(jié) 構(gòu)進(jìn)行連接的空閑的第一隊(duì)列,其中,所述第一隊(duì)列為位于所述專用硬件芯片中的隊(duì)列; 所述專用硬件芯片還用于從所述第一隊(duì)列空閑鏈表中分配一個(gè)或多個(gè)第一隊(duì)列分別 給與虛擬機(jī)對(duì)應(yīng)的一個(gè)或多個(gè)VF,其中,分配給每個(gè)VF的所述第一隊(duì)列的數(shù)量與每個(gè)VF對(duì) 應(yīng)的虛擬機(jī)中的程序需要用到的第二隊(duì)列的數(shù)量一致;以及還用于獲取所述虛擬機(jī)中的所 述第二隊(duì)列中的數(shù)據(jù),將所述第二隊(duì)列中的數(shù)據(jù)存放到所述第一隊(duì)列中進(jìn)行處理。
12. 如權(quán)利要求11所述的計(jì)算系統(tǒng),其特征在于,當(dāng)分配給所述每個(gè)VF的第一隊(duì)列的 數(shù)量為多個(gè)時(shí),所述每個(gè)VF的多個(gè)第一隊(duì)列按鏈表結(jié)構(gòu)進(jìn)行連接。
13. 如權(quán)利要求11或12所述的計(jì)算系統(tǒng),其特征在于,分配給每個(gè)VF的所述第一隊(duì)列 的數(shù)量隨著所述第二隊(duì)列的數(shù)量的變化而進(jìn)行同樣的變化。
14. 如權(quán)利要求11-13任一項(xiàng)所述的計(jì)算系統(tǒng),其特征在于,單個(gè)VF支持一個(gè)或多個(gè)優(yōu) 先級(jí)PRI,所述處理為調(diào)度處理,所述專用硬件芯片具體用于: 獲得需要調(diào)度的第一 VF和第一 PRI的組合; 在表Y中確定出與所述第一 VF和所述第一 PRI的組合對(duì)應(yīng)的隊(duì)列鏈的首隊(duì)列在表X 中的第一地址;其中,所述表X存儲(chǔ)有個(gè)數(shù)為所有隊(duì)列數(shù)的第一表項(xiàng),所述第一表項(xiàng)包括每 個(gè)VF和每個(gè)PRI的組合對(duì)應(yīng)的隊(duì)列的隊(duì)列號(hào);所述表Y存儲(chǔ)有多個(gè)第二表項(xiàng),每個(gè)所述第 二表項(xiàng)包括所述每個(gè)VF和所述每個(gè)PRI的組合,以及所述每個(gè)VF和所述每個(gè)PRI的組合 對(duì)應(yīng)的隊(duì)列的首隊(duì)列在表X中的地址;所述第二表項(xiàng)的個(gè)數(shù)為VF的個(gè)數(shù)乘以單個(gè)VF支持 的最大PRI個(gè)數(shù)的值; 獲取上次調(diào)度的終止隊(duì)列的隊(duì)列序號(hào);所述隊(duì)列序號(hào)表征所述終止隊(duì)列在所述第一 VF和所述第一 PRI的組合對(duì)應(yīng)的隊(duì)列中的排序; 根據(jù)所述第一地址和所述隊(duì)列序號(hào)在所述表X中確定出針對(duì)所述第一 VF和所述第一 PRI的組合的本次調(diào)度的起始隊(duì)列。
15. 如權(quán)利要求14所述的計(jì)算系統(tǒng),其特征在于,所述專用硬件芯片具體用于:將所述 第一地址和所述隊(duì)列序號(hào)相加,獲得第二地址;當(dāng)所述第二地址小于所述第一 VF和所述第 一 PRI的組合的下一 VF和PRI的組合的隊(duì)列的首地址時(shí),在所述表X中確定出所述第二地 址對(duì)應(yīng)的隊(duì)列號(hào),所述隊(duì)列號(hào)對(duì)應(yīng)的隊(duì)列即為所述起始隊(duì)列。
16. 如權(quán)利要求15所述的計(jì)算系統(tǒng),其特征在于,所述專用硬件芯片具體用于:當(dāng)所述 第二地址等于所述下一 VF和PRI的組合的隊(duì)列的首地址時(shí),在所述表X中確定出所述第一 地址對(duì)應(yīng)的隊(duì)列號(hào),所述隊(duì)列號(hào)對(duì)應(yīng)的隊(duì)列即為所述起始隊(duì)列。
17. 如權(quán)利要求14-16任一項(xiàng)所述的計(jì)算系統(tǒng),其特征在于,所述專用硬件芯片還用 于:確定所述起始隊(duì)列中是否有數(shù)據(jù);當(dāng)所述起始隊(duì)列中有數(shù)據(jù)時(shí),生成第一調(diào)度結(jié)果以 及保存所述起始隊(duì)列的隊(duì)列序號(hào),所述第一調(diào)度結(jié)果包括所述第一 VF、所述第一 PRI以及 所述起始隊(duì)列的隊(duì)列號(hào)。
18. 如權(quán)利要求17所述的計(jì)算系統(tǒng),其特征在于,所述專用硬件芯片還用于:當(dāng)所述起 始隊(duì)列中沒(méi)有數(shù)據(jù)時(shí),通過(guò)查詢所述起始隊(duì)列的數(shù)據(jù)結(jié)構(gòu)表,確定所述下一隊(duì)列;其中,所 述數(shù)據(jù)結(jié)構(gòu)表包括用于指示所述起始隊(duì)列是否有數(shù)據(jù)的指示信息、數(shù)據(jù)的數(shù)量信息以及所 述起始隊(duì)列的下一隊(duì)列的隊(duì)列號(hào);確定所述下一隊(duì)列中是否有數(shù)據(jù);當(dāng)所述下一隊(duì)列中有 數(shù)據(jù)時(shí),生成第二調(diào)度結(jié)果,所述第二調(diào)度結(jié)果包括所述第一 VF、所述第一 PRI以及所述下 一隊(duì)列的隊(duì)列號(hào);保存所述下一隊(duì)列的隊(duì)列序號(hào)。
19. 如權(quán)利要求11-18任一項(xiàng)所述的計(jì)算系統(tǒng),其特征在于,所述專用硬件芯片還用 于:在分配一個(gè)或多個(gè)第一隊(duì)列分別給一個(gè)或多個(gè)VF之后,從所述每個(gè)VF的一個(gè)或多個(gè)第 一隊(duì)列中刪除隊(duì)列;并將刪除的隊(duì)列加入所述第一隊(duì)列空閑鏈表中。
20. 如權(quán)利要求11-19任一項(xiàng)所述的計(jì)算系統(tǒng),其特征在于,所述專用硬件芯片還用 于:接收一外部數(shù)據(jù); 確定所述外部數(shù)據(jù)對(duì)應(yīng)的VF、PRI和隊(duì)列序號(hào);其中,所述隊(duì)列序號(hào)表征將要存儲(chǔ)所述 外部數(shù)據(jù)的隊(duì)列在所述VF和所述PRI的組合對(duì)應(yīng)的隊(duì)列中的排序; 在表Y中確定出與所述VF和所述PRI的組合對(duì)應(yīng)的隊(duì)列的首隊(duì)列在表X中的第一地 址;其中,所述表X存儲(chǔ)有個(gè)數(shù)為所有隊(duì)列數(shù)的第一表項(xiàng),所述第一表項(xiàng)包括每個(gè)VF和每個(gè) PRI的組合對(duì)應(yīng)的隊(duì)列的隊(duì)列號(hào);所述表Y存儲(chǔ)有多個(gè)第二表項(xiàng),每個(gè)所述第二表項(xiàng)包括所 述每個(gè)VF和所述每個(gè)PRI的組合,以及所述每個(gè)VF和所述每個(gè)PRI的組合對(duì)應(yīng)的隊(duì)列的 首隊(duì)列在表X中的地址;所述第二表項(xiàng)的個(gè)數(shù)為VF的個(gè)數(shù)乘以單個(gè)VF支持的最大PRI個(gè) 數(shù)的值; 根據(jù)所述第一地址和所述隊(duì)列序號(hào),獲得將要存儲(chǔ)所述外部數(shù)據(jù)的隊(duì)列在所述表X中 的第二地址;根據(jù)所述第二地址在所述表X中確定出將要存儲(chǔ)所述外部數(shù)據(jù)的隊(duì)列的隊(duì)列 號(hào);將所述外部數(shù)據(jù)存儲(chǔ)在所述隊(duì)列號(hào)對(duì)應(yīng)的隊(duì)列中。
【文檔編號(hào)】H04L12/863GK104125166SQ201410375173
【公開(kāi)日】2014年10月29日 申請(qǐng)日期:2014年7月31日 優(yōu)先權(quán)日:2014年7月31日
【發(fā)明者】雷春, 儀長(zhǎng), 黃雪峰 申請(qǐng)人:華為技術(shù)有限公司