將上述待處理任務調(diào)度至多核CPU中與上述待處理隊列存在映射關系的處理單元,由該處理單元對上述待處理任務進行處理。
[0062]本發(fā)明實施例中,由于待處理任務的長度小于待處理報文的長度,因此,當上述待處理隊列中包含多個待處理任務時,可以將該待處理隊列中的全部或者部分待處理任務按照預設規(guī)則拼接為一個第二預設格式的拼接報文;并采用PCIE協(xié)議,通過DMA方式,將上述待處理任務調(diào)度至多核CPU中與上述待處理隊列對應的處理單元。其中,上述第二預設格式的拼接報文為事務層報文(Transact1n Level Packet,簡稱TLP);在上述將多個待處理任務拼接為第二預設格式拼接報文的過程中,由于拼接后的第二預設格式的拼接報文所占用存儲空間的大小為固定值,因此,拼接一個拼接報文所需要的待處理任務數(shù)目由一個待處理任務所占用存儲空間的大小有關,此外,當將待處理隊列中包含的全部待處理任務進行拼接后,仍不能達到一個拼接報文所占用的存儲空間時,將待處理隊列中包含的全部待處理任務拼接為一個拼接報文即可。
[0063]本發(fā)明實施例中,前置預處理器將上述待處理任務調(diào)度至多核CPU中與上述待處理隊列對應的處理單元,具體包括:在多核CPU中,每一個處理單元對應一個處理單元存儲地址;前置預處理器獲取與待處理隊列對應的處理單元存儲地址,將待處理任務發(fā)送至獲取的該處理單元存儲地址;多核處理器中的上述處理單元從對應的處理單元存儲地址中獲取前置預處理器調(diào)度的上述待處理任務,并對該待處理任務進行處理。
[0064]可選的,當前置預處理器將上述待處理任務調(diào)度至多核CPU中與上述待處理隊列對應的處理單元時,將上述待處理任務的調(diào)度標志修改為已經(jīng)調(diào)度標志。
[0065]采用上述技術方案,由于在通過DMA方式傳輸報文的過程中,TLP報文擁有規(guī)定的報文格式,TLP報文中包含的有效數(shù)據(jù)越短,帶寬利用率越低,因此,對多個待處理任務進行拼接處理就可以增加TLP報文的有效數(shù)據(jù)長度,從而減少帶寬浪費,提高了帶寬利用率。
[0066]由于不同的處理單元可能具有相同的功能,因此,為了保證多核CPU內(nèi)各個具有相同功能的處理單元的負載均衡,可選的,前置預處理器采用預設分配算法對各個待處理隊列進行調(diào)度,以為多核CPU內(nèi)的各個具有相同功能的處理單元均衡分配任務;其中,該分配算法可以為哈希算法。
[0067]多核CPU中的處理單元對上述待處理任務進行處理即為對拼接報文中包含的各個待處理任務分別進行處理,并根據(jù)各個待處理任務中包含的待處理報文的存儲地址獲取各個待處理任務對應的待處理報文,根據(jù)各個待處理任務中的報文信息對獲取各個待處理報文進行處理,得到已處理報文;以及將已處理報文存儲在待處理報文的存儲地址對應的內(nèi)存中。其中,對待處理報文的處理包括讀取、修改等處理。
[0068]步驟230:前置預處理器接收多核CPU發(fā)送的已處理任務。
[0069]本發(fā)明實施例中,當多核CPU對前置預處理器發(fā)送的任務處理完畢之后,將已處理任務采用PCIE協(xié)議發(fā)送至前置預處理器。上述已處理任務中包括處理類型、已處理隊列標識以及序列碼;其中,處理類型包括發(fā)送處理處理類型,刪除處理處理類型,以及重新加入隊列處理類型,該處理類型由多核CPU配置。
[0070]步驟240:前置預處理器根據(jù)序列碼對該已處理任務的進行保序處理,并在保序處理后對上述已處理任務完成處理類型對應的處理動作。
[0071]本發(fā)明實施例中,處理類型包括發(fā)送,刪除,以及重新加入隊列等多種不同處理類型。在前置預處理器中,處理類型不同,對已處理任務實施的處理措施不同,因此,前置預處理器根據(jù)上述已處理任務的處理類型,對上述已處理任務進行處理動作也不同,具體地:
[0072]當已處理任務的處理類型為發(fā)送時,前置預處理器根據(jù)已處理任務中的已處理隊列標識,將已處理任務添加至已處理隊列標識隊列對應的已處理隊列中;若已處理任務的序列碼為已處理隊列中的最小序列碼,則獲取已處理任務的存儲地址,并根據(jù)該存儲地址獲取已處理報文,以及將該已處理報文發(fā)送至相應的物理端口,以及刪除已處理任務對應的任務所在待處理隊列中的待處理任務;
[0073]當已處理任務的處理類型為重新加入隊列時,前置預處理器根據(jù)已處理任務中的已處理隊列標識以及序列碼,將已處理任務添加至已處理隊列標識隊列對應的已處理隊列中的相應位置;其中,上述已處理隊列標識可以與待處理任務所在的待處理隊列標識相同,也可以不同;例如,待處理任務I所在待處理隊列為隊列1,由多核CPU對該待處理任務I進行處理后在已處理任務I中寫入已處理隊列標識隊列X,該已處理隊列標識X可以對應于隊列1,即已處理任務I仍存儲至隊列I中,該已處理隊列標識X還可以對應于非隊列I以外的其他隊列(如隊列2),即已處理任務I存儲至隊列2中;
[0074]當已處理任務的處理類型為刪除時,根據(jù)已處理任務的序列碼,從待處理隊列中刪除相應的待處理任務,并指示多核CPU釋放該已處理任務對應的已處理報文的存儲空間。
[0075]當待處理任務所在的待處理隊列標識與已處理隊列標識不同時,前置預處理器將已處理任務添加至已處理隊列中的相應位置,具體為:前置預處理器獲取已處理任務的序列碼;其中,上述已處理任務的序列碼即為待處理任務的序列碼;根據(jù)上述已處理任務的序列碼,獲取該已處理任務在已處理隊列中的位置信息;將該已處理任務添加至已處理隊列中該位置信息對應的位置;當待處理任務所在的待處理隊列標識與已處理隊列標識相同時,前置預處理器將已處理任務存儲至待處理任務所在的待處理隊列中的相應位置(即入隊操作),以及將上述已處理任務的任務標志位標識為重新調(diào)度標識。
[0076]在上述過程中,已處理隊列中的所有已處理任務可以按照序列碼從小到大的順序存儲,或者按照序列碼從大到小的順序存儲。當已處理隊列中的已處理任務按照序列碼從小到大的順序存儲時,上述已處理任務的序列碼大于已處理隊列中已處理任務的前一個已處理任務的序列碼,且小于已處理隊列中已處理任務的后一個已處理任務的序列碼。當已處理隊列中的所有已處理任務按照序列碼從大到小的順序存儲時,已處理任務的序列碼小于已處理隊列中已處理任務的前一個已處理任務的序列碼,且大于已處理隊列中已處理任務的后一個已處理任務的序列碼。
[0077]為了便于對已處理任務進行調(diào)度,可選的,將相同處理類型的已處理任務分配至相同的已處理隊列中;例如,已處理隊列I中包含的已處理任務均為發(fā)送處理類型的已處理任務,已處理隊列2中包含的已處理任務均為接收處理類型的已處理任務。參閱圖5所示,在將已處理任務添加至已處理隊列的過程中,將已處理任務的序列碼依次與已處理隊列中已經(jīng)存儲的已處理任務的序列碼進行比較,從而確定上述已處理任務在已處理隊列中的位置。例如,參閱圖5所示,已處理任務的序列碼(SN)為100,已處理隊列中所存儲的所有已處理任務的序列碼按照由小到大的順序排列,將序列碼100由已處理隊列隊首開始依次與每一個已處理任務的序列碼進行比較,從而確定已處理任務在已處理隊列中的位置為序列碼為96的已處理任務和序列碼為120的已處理任務之間,從而將已處理任務添加至該已處理隊列中。
[0078]采用上述技術方案,通過已處理任務中的處理類型確定已處理任務所在的已處理隊列,并通過序列碼確定已處理任務在已處理隊列中的位置信息,從而使已處理隊列中存儲的所有已處理任務按照序列碼大小順序排列,從而實現(xiàn)報文的保序功能,使多核CPU能夠亂序且并行執(zhí)行任務,減少了多核CPU內(nèi)多核之前的競爭和資源互鎖,有效提升了多核(PU的并行處理能力,避免了處理器資源浪費的問題。
[0079]參閱圖6所示,前置預處理器對上述已處理任務進行發(fā)送處理等出隊操作時,若已處理隊列中的已處理任務按照序列碼從小到大的順序存儲,則需要比較當前已處理任務的序列碼與已處理隊列隊首的已處理任務的序列碼,當當前已處理任務的序列碼等于已處理隊列隊首的已處理任務的序列碼時,前置預處理器對當前已處理任務進行處理。例如,參閱圖6所示,當前已處理任務的序列碼(SN)為2,已處理隊列中所存儲的已處理任務的序列碼按照由小到大的順序排列,將序列碼2與已處理隊列隊首已處理任務的序列碼進行比較,由于已處理隊列隊首的已處理任務的序列碼也為2,因此,前置預處理器對該當前已處理任務進行處理;再如,當前已處理任務的序列碼(SN)為120,已處理隊列中所存儲的已處理任務的序列碼按照由小到大的順序排列,將序列碼120與已處理隊列隊首已處理任務的序列碼進行比較,由于已處理隊列隊首的已處理任務的序列碼為2,因此,前置預處理器對該當前已處理任務進行緩存處理。
[0080]采用上述技術方案,前置預處理器和多核CPU之間采用異步通訊模式,可以有效減少鏈路延遲等待時間,硬件上屏蔽不同廠商多核CPU之間的差異,具有靈活性好和可擴展性強的特點;并且,由前置預處理器實現(xiàn)報文的收發(fā)等調(diào)度功能,從而降低了多核CPU的數(shù)據(jù)處理負擔。
[0081]基于上述技術方案,參閱圖7所示,下面結(jié)合具體應用場景,詳細描述報文處理過程:
[0082]步驟700:前置預處理器從物理端口接收待處理報文。
[0083]步驟710:前置預處理器采用PCIE DMA方式,將接收到的待處理報文寫入多核CPU中的內(nèi)存中,并獲取該待處理報文在多核CPU內(nèi)存中的存儲地址。
[0084]步驟720:前置預處理器對上述待處理報文進行解析,提取待處理報文中的報文信息,并根據(jù)提取的報文信息生成第一預設格式的待處理任務。
[0