1.一種方法,包括:
將經(jīng)編程的輸入/輸出(PIO)發(fā)送存儲器中的存儲器空間分區(qū)為多個發(fā)送上下文,每一個發(fā)送上下文都包括存儲器緩沖器,所述存儲器緩沖器包括配置成用于存儲分組數(shù)據(jù)的多個發(fā)送塊;
使用先入先出(FIFO)語義為每一個發(fā)送上下文實現(xiàn)存儲方案,在所述存儲方案下,每一個發(fā)送上下文占據(jù)具有FIFO順序的FIFO緩沖器中的相應FIFO槽,并且給定分組的數(shù)據(jù)以FIFO順序被存儲在占據(jù)一個或多個相應的順序的FIFO槽的一個或多個發(fā)送塊中;
接收被亂序地寫入發(fā)送塊的分組數(shù)據(jù),使得按照與FIFO順序不同的順序以分組數(shù)據(jù)填充分組發(fā)送塊的至少部分;
使包含所填充的分組數(shù)據(jù)的發(fā)送塊流出;
響應于檢測到一個或多個發(fā)送塊已從發(fā)送上下文流出,
檢測已被釋放的一個或多個FIFO槽;
檢測已被釋放的一個或多個FIFO槽中的任一者是否占據(jù)還未為其返回信用返回標記的發(fā)送上下文的按FIFO順序的最低槽;并且如果是,
返回信用返回標記,通過所述信用返回標記,可標識按FIFO順序的被釋放的槽的序列的最高FIFO槽,所述被釋放的槽的序列包括還未為其返回信用信息的最低槽。
2.如權利要求1所述的方法,其中,所述信用返回標記包括絕對信用返回計數(shù),所述絕對信用返回計數(shù)包括所述發(fā)送上下文的、按FIFO順序的、從所述發(fā)送上下文的所述絕對信用返回計數(shù)被初始化起就已被釋放的發(fā)送塊的聚合數(shù)目。
3.如權利要求2所述的方法,其中,每一個信用對應于發(fā)送塊,所述方法包括:
為每一個發(fā)送上下文維持絕對信用發(fā)送計數(shù),所述絕對信用發(fā)送計數(shù)標識已經(jīng)或將要經(jīng)由PIO寫入指令填充的發(fā)送塊的聚合數(shù)目,所述PIO寫入指令從所述絕對信用發(fā)送計數(shù)被初始化起就已經(jīng)被分派以供執(zhí)行;
接收發(fā)送上下文的絕對信用返回計數(shù);以及
將所述發(fā)送上下文的絕對信用發(fā)送計數(shù)與所述發(fā)送上下文的絕對信用返回計數(shù)進行比較以判定附加的分組數(shù)據(jù)是否可寫入所述發(fā)送上下文。
4.如權利要求3所述的方法,進一步包括:
實現(xiàn)物理循環(huán)FIFO以將發(fā)送塊存儲在發(fā)送上下文中;
實現(xiàn)邏輯循環(huán)FIFO以跟蹤所述發(fā)送上下文的絕對信用返回計數(shù)和絕對信用發(fā)送計數(shù),其中所述邏輯循環(huán)FIFO的尺寸大于所述物理循環(huán)FIFO的尺寸。
5.如權利要求3所述的方法,進一步包括:
以循環(huán)FIFO順序將用于將數(shù)據(jù)寫入所述PIO發(fā)送存儲器中的發(fā)送上下文的PIO寫入指令分派至處理器,其中,所述循環(huán)FIFO具有的FIFO槽的數(shù)目匹配所述發(fā)送上下文的發(fā)送塊的數(shù)目,并且其中,每一個PIO寫入指令都定義對應于相應發(fā)送塊的PIO發(fā)送存儲器地址;以及
如果所述絕對信用發(fā)送計數(shù)與所述絕對信用返回計數(shù)的差達到FIFO槽的數(shù)目,則暫停將PIO寫入指令分派至所述處理器。
6.如權利要求2所述的方法,進一步包括:
定義最小信用返回閾值;以及
如果用于發(fā)送上下文的絕對信用返回計數(shù)與最近返回的絕對信用返回計數(shù)之間的差將符合或超出所述最小信用返回閾值,則返回所述發(fā)送上下文的絕對信用返回計數(shù);否則
等待返回絕對信用返回計數(shù),直到用于所述發(fā)送上下文的絕對信用返回計數(shù)與最近返回的絕對信用返回計數(shù)之間的差將符合或超出所述最小信用返回閾值為止。
7.如權利要求2所述的方法,進一步包括:
經(jīng)由單條消息返回用于多個相應發(fā)送上下文的多個絕對信用返回計數(shù)值。
8.如權利要求1所述的方法,進一步包括:防止存儲給定分組的數(shù)據(jù)的任何發(fā)送塊流出,直到所述分組的所有分組數(shù)據(jù)已寫入所述PIO發(fā)送存儲器。
9.一種裝置,包括:
輸入/輸出(IO)接口;
發(fā)射引擎,所述發(fā)射引擎耦合至IO接口且包括:
經(jīng)編程的輸入/輸出(PIO)發(fā)送存儲器;
出口塊,可操作地耦合至所述PIO發(fā)送存儲器;以及
用于以下操作的電路和邏輯:
將所述PIO發(fā)送存儲器分區(qū)為多個發(fā)送上下文,每一個發(fā)送上下文都包括多個順序的發(fā)送塊;
使用先入先出(FIFO)語義為每一個發(fā)送上下文實現(xiàn)存儲方案,在所述存儲方案下,每一個發(fā)送上下文占據(jù)具有FIFO順序的FIFO緩沖器中的相應FIFO槽,并且給定分組的數(shù)據(jù)以FIFO順序被存儲在占據(jù)一個或多個相應的順序的FIFO槽的一個或多個發(fā)送塊中;
接收被亂序地寫入發(fā)送塊的分組數(shù)據(jù),使得按照與FIFO順序不同的順序以分組數(shù)據(jù)填充分組發(fā)送塊的至少部分;
使包含所填充的分組數(shù)據(jù)的發(fā)送塊流出;
響應于檢測到一個或多個發(fā)送塊已從發(fā)送上下文流出,
檢測已被釋放的一個或多個FIFO槽;
檢測已被釋放的一個或多個FIFO槽中的任一者是否占據(jù)還未為其返回絕對信用返回計數(shù)的發(fā)送上下文的按FIFO順序的最低槽;并且如果是,
確定已釋放的FIFO槽序列中的最高FIFO槽,其中以還未為其返回信用返回標記的發(fā)送上下文的按FIFO順序的最低被釋放的槽開始,還未為所述最高FIFO槽返回信用返回標記;以及
基于所確定的所述最高FIFO槽來返回絕對信用返回計數(shù)。
10.如權利要求9所述的裝置,其中,所述絕對信用返回計數(shù)包括所述發(fā)送上下文的、按FIFO順序的、從所述發(fā)送上下文的所述絕對信用返回計數(shù)被初始化起就已被釋放的發(fā)送塊的聚合數(shù)目。
11.如權利要求9所述的裝置,其中,所述發(fā)射引擎進一步包括用于以下操作的邏輯:
實現(xiàn)物理循環(huán)FIFO以將發(fā)送塊存儲在發(fā)送上下文中;以及
實現(xiàn)邏輯循環(huán)FIFO以跟蹤每一個發(fā)送上下文的絕對信用返回計數(shù),其中,對于所有發(fā)送上下文,所述邏輯循環(huán)FIFO的尺寸是相同的,而至少兩個發(fā)送上下文的尺寸與所述至少兩個發(fā)送上下文的相關聯(lián)的物理循環(huán)FIFO是不同的。
12.如權利要求9所述的裝置,其中,所述發(fā)射引擎進一步包括用于以下操作的邏輯:
如果用于發(fā)送上下文的絕對信用返回計數(shù)與最近返回的絕對信用返回計數(shù)之間的差將符合或超出所述最小信用返回閾值,則返回所述發(fā)送上下文的絕對信用返回計數(shù);否則
等待返回絕對信用返回計數(shù),直到用于所述發(fā)送上下文的絕對信用返回計數(shù)與最近返回的絕對信用返回計數(shù)之間的差將符合或超出所述最小信用返回閾值為止。
13.如權利要求9所述的裝置,其中,所述發(fā)射引擎進一步包括用于以下操作的邏輯:
并發(fā)地檢測多個發(fā)送上下文中的FIFO槽的釋放并確定多個絕對信用計數(shù),所述多個絕對信用計數(shù)包括在所述多個發(fā)送上下文之間用于所述多個發(fā)送上下文中的每一個的絕對信用計數(shù);以及
經(jīng)由單條信用返回消息返回所述多個絕對信用返回計數(shù)。
14.如權利要求9所述的裝置,其中,所述IO接口包括第一(PCIe)接口,所述裝置進一步包括:
處理器,所述處理器具有支持亂序執(zhí)行的多個處理器核,并且包括存儲器接口、至少一個存儲緩沖器以及第二PCIe接口,所述第二PCIe接口經(jīng)由PCIe互連而耦合至所述第一PCIe接口;進一步包括用于以下操作的電路和邏輯:
接收PIO寫入指令的序列,所述PIO寫入指令用于當耦合至所述存儲器接口時將存儲在存儲器中的相應分組的分組數(shù)據(jù)寫入所述PIO發(fā)送存儲器;
將所述PIO寫入指令的序列作為處理器核上的指令線程來執(zhí)行,其中PIO寫入指令的執(zhí)行使數(shù)據(jù)被寫入到存儲緩沖器中的存儲單元,所述存儲單元成組為包括存儲單元行的存儲塊,其中,所述PIO寫入指令的部分被亂序地執(zhí)行,從而導致在所述存儲塊被填充之前,數(shù)據(jù)被寫入到不同存儲塊中的存儲單元;
檢測存儲塊何時被填充;以及
響應于檢測到存儲塊被填充,經(jīng)由通過所述PCIe互連發(fā)送的、對所述PIO發(fā)送存儲器中的發(fā)送塊的PCIe投遞的寫入來使所述存儲塊中的數(shù)據(jù)耗盡。
15.如權利要求9所述的裝置,進一步包括發(fā)射端口,所述發(fā)射端口耦合至所述發(fā)射引擎并包括多個發(fā)射機,其中,所述裝置包括單個集成組件。
16.如權利要求15所述的裝置,其中,所述裝置包括主機結構接口,所述主機結構接口進一步包括:
接收引擎,耦合至所述IO接口;以及
接收端口,耦合至所述接收引擎。
17.如權利要求16所述的裝置,其中,所述裝置包括主機結構接口芯片,所述主機結構接口芯片包括具有為權利要求16的主機結構接口定義的配置。
18.一種系統(tǒng),包括:
處理器,所述處理器具有支持亂序執(zhí)行的多個處理器核,并且包括存儲器接口、至少一個存儲緩沖器以及第一PCIe(外圍組件互連快速)接口;
第二PCIe接口,經(jīng)由PCIe互連而耦合至所述處理器的所述第一PCIe接口;以及
發(fā)射引擎,所述發(fā)射引擎可操作地耦合至所述第二PCIe接口且包括經(jīng)編程的輸入/輸出(PIO)發(fā)送存儲器和出口塊,所述出口塊可操作地耦合至所述PIO發(fā)送存儲器,
其中所述處理器包括用于以下操作的電路和邏輯:
接收經(jīng)編程的輸入/輸出(PIO)寫入指令的序列,所述PIO寫入指令用于將存儲在存儲器中的相應分組的分組數(shù)據(jù)寫入PIO發(fā)送存儲器,每一個PIO寫入指令定義包含所述數(shù)據(jù)的存儲器中的高速緩存行的位置以及所述數(shù)據(jù)將被寫入到的所述PIO發(fā)送存儲器中的發(fā)送塊的存儲器映射的地址,其中,用于將多個分組的分組數(shù)據(jù)寫入相同的發(fā)送上下文的PIO寫入指令以原始的先入先出(FIFO)順序而順序地成組;
將所述PIO寫入指令的序列作為處理器核上的指令線程來執(zhí)行,其中,所述PIO寫入指令的部分被亂序地執(zhí)行,從而導致數(shù)據(jù)以與指令被接收的順序不同的順序被寫入所述PIO發(fā)送存儲器中的發(fā)送塊,并且
其中所述發(fā)射引擎包括用于以下操作的電路和邏輯:
將所述PIO發(fā)送存儲器分區(qū)為多個發(fā)送上下文,每一個發(fā)送上下文都包括多個順序的發(fā)送塊;
使用FIFO語義為每一個發(fā)送上下文實現(xiàn)存儲方案,在所述存儲方案下,每一個發(fā)送塊以發(fā)送上下文FIFO順序占據(jù)相應的FIFO槽,并且給定分組的數(shù)據(jù)被存儲在占據(jù)一個或多個相應的順序的FIFO槽的一個或多個發(fā)送塊中;
接收經(jīng)由所述PIO寫入指令的亂序執(zhí)行而寫入發(fā)送塊的分組數(shù)據(jù);
使包含所填充的分組數(shù)據(jù)的發(fā)送塊流出;
響應于檢測到一個或多個發(fā)送塊已從發(fā)送上下文流出,
檢測已被釋放的一個或多個FIFO槽;
檢測已被釋放的一個或多個FIFO槽中的任一者是否占據(jù)還未為其返回絕對信用返回計數(shù)的按發(fā)送上下文FIFO順序的最低槽;并且如果是,
確定已釋放的FIFO槽序列中的最高FIFO槽,并且以還未為其返回信用返回標記的發(fā)送上下文的按FIFO順序的最低被釋放的槽開始,還未為所述最高FIFO槽返回信用返回標記;以及
基于所確定的所述最高FIFO槽來返回絕對信用返回計數(shù)。
19.如權利要求18所述的系統(tǒng),其中,所述絕對信用返回計數(shù)包括所述發(fā)送上下文的、按FIFO順序的、從所述發(fā)送上下文的所述絕對信用返回計數(shù)被初始化起就已被釋放的發(fā)送塊的聚合數(shù)目。
20.如權利要求18所述的系統(tǒng),其中,所述發(fā)射引擎進一步包括用于以下操作的邏輯:
實現(xiàn)物理循環(huán)FIFO以將發(fā)送塊存儲在發(fā)送上下文中;以及
實現(xiàn)邏輯循環(huán)FIFO以跟蹤每一個發(fā)送上下文的絕對信用返回計數(shù),其中,對于所有發(fā)送上下文,所述邏輯循環(huán)FIFO的尺寸是相同的,而至少兩個發(fā)送上下文的尺寸與所述至少兩個發(fā)送上下文的相關聯(lián)的物理循環(huán)FIFO是不同的。
21.如權利要求18所述的系統(tǒng),其中,所述發(fā)射引擎進一步包括用于以下操作的邏輯:
如果用于發(fā)送上下文的絕對信用返回計數(shù)與最近返回的絕對信用返回計數(shù)之間的差將符合或超出所述最小信用返回閾值,則返回所述發(fā)送上下文的絕對信用返回計數(shù);否則
等待返回絕對信用返回計數(shù),直到用于所述發(fā)送上下文的絕對信用返回計數(shù)與最近返回的絕對信用返回計數(shù)之間的差將符合或超出所述最小信用返回閾值為止。
22.如權利要求18所述的系統(tǒng),其中,所述發(fā)射引擎進一步包括用于以下操作的邏輯:
并發(fā)地檢測多個發(fā)送上下文中的FIFO槽的釋放并確定多個絕對信用計數(shù),所述多個絕對信用計數(shù)包括在所述多個發(fā)送上下文之間用于所述多個發(fā)送上下文中的每一個的絕對信用計數(shù);以及
經(jīng)由單條信用返回消息返回所述多個絕對信用返回計數(shù)。
23.如權利要求18所述的系統(tǒng),其中在主機結構接口中實現(xiàn)所述第二PCIe接口和所述發(fā)射引擎,所述主機結構接口進一步包括:
發(fā)射端口,所述發(fā)射端口耦合至所述發(fā)射引擎且包括多個發(fā)射機;
接收引擎,所述接收引擎耦合至所述第二PCIe接口;以及
接收端口,所述接收端口耦合至所述接收引擎且包括多個接收機。
24.如權利要求23所述的系統(tǒng),其中所述系統(tǒng)包括片上系統(tǒng)(SoC),所述片上系統(tǒng)包括所述處理器和所述主機結構接口。
25.如權利要求18所述的系統(tǒng),其特征在于,進一步包括:
存儲器,耦合至所述存儲器接口,包括軟件應用的指令存儲在所述存儲器中,所述指令配置成在由所述處理器執(zhí)行時執(zhí)行包括以下步驟的操作:
為每一個發(fā)送上下文維持絕對信用發(fā)送計數(shù),所述絕對信用發(fā)送計數(shù)標識已經(jīng)或將要經(jīng)由PIO寫入指令填充的發(fā)送塊的聚合數(shù)目,所述PIO寫入指令從所述絕對信用發(fā)送計數(shù)被初始化起就已經(jīng)被分派以供執(zhí)行;
接收發(fā)送上下文的絕對信用返回計數(shù);以及
將所述發(fā)送上下文的絕對信用發(fā)送計數(shù)與所述發(fā)送上下文的絕對信用返回計數(shù)進行比較以判定附加的分組數(shù)據(jù)是否可寫入所述發(fā)送上下文。