[0072] 由于可以通過第一標(biāo)識確定是存儲在匹配全表項(xiàng)還是存儲在匹配半表項(xiàng)中,所以,當(dāng)通過第一標(biāo)識確定是存儲在匹配全表項(xiàng)時,可以從N個連續(xù)的匹配部分表項(xiàng)的最后一個匹配部分表項(xiàng)中讀取第一動作部分表項(xiàng)的動作索引號,從而查找到第一動作部分表項(xiàng)中的第一動作項(xiàng);當(dāng)通過第一標(biāo)識確定是存儲在匹配部分表項(xiàng)時,可以從該匹配部分表項(xiàng)中讀取第一動作半表項(xiàng)的動作索引號,從而查找到第一動作部分表項(xiàng)中的第一動作項(xiàng)。
[0073] S105:處理器根據(jù)第一動作項(xiàng)的長度確定將第一動作項(xiàng)存儲在第一動作流表的動作部分表項(xiàng)還是動作全表項(xiàng)。
[0074] 第一動作流表可以是數(shù)據(jù)鏈路層的動作流表、隧道層的動作流表、網(wǎng)絡(luò)層的動作流表以及傳輸層的動作流表中的任意一種。如圖4所示,第一動作流表被劃分為多個動作部分表項(xiàng),動作全表項(xiàng)包括N個連續(xù)的動作部分表項(xiàng),N為大于1的整數(shù)。在一具體的實(shí)施例中,第一動作流表被劃分為多個動作半表項(xiàng),動作全表項(xiàng)包括2個連續(xù)的動作半表項(xiàng)。
[0075] 處理器根據(jù)第一動作項(xiàng)的長度確定將第一動作項(xiàng)存儲在第一動作流表的動作部分表項(xiàng)還是動作全表項(xiàng)。在一具體的實(shí)施例中,動作全表項(xiàng)的長度為176比特,動作半表項(xiàng)的長度為88比特。所以,當(dāng)?shù)谝粍幼黜?xiàng)的長度小于88比特時,將第一動作項(xiàng)存儲在動作半表項(xiàng),當(dāng)?shù)谝粍幼黜?xiàng)的長度大于等于88比特,小于176比特時,將第一動作項(xiàng)存儲在動作全表項(xiàng)。
[0076] 在確定存儲在動作部分表項(xiàng)的情況下,進(jìn)入步驟S106;在確定存儲在動作全表項(xiàng)的情況下,進(jìn)入步驟S107。
[0077] S106:處理器從第一動作流表中選擇其中一個動作部分表項(xiàng)作為第一動作部分表項(xiàng)并將第一動作項(xiàng)卸載到卸載硬件的第一動作部分表項(xiàng)中。
[0078] 從動作流表中選擇其中一個動作部分表項(xiàng)作為第一動作部分表項(xiàng):從動作流表中選擇動作索引號為奇數(shù)或者動作索引號為偶數(shù)的其中一個動作部分表項(xiàng)作為第一動作部分表項(xiàng)。繼續(xù)以圖4所示的動作流表為例,只要動作半表項(xiàng)沒有被占用,那么,可以將選擇索引號為0 7中的任意一個動作半表項(xiàng)。
~
[0079] S107:處理器從第一動作流表中選擇N個連續(xù)的動作部分表項(xiàng)作為第一動作全表項(xiàng)并將第一動作項(xiàng)卸載到處理器的第一動作全表項(xiàng)中。
[0080] 從第一動作流表中選擇N個連續(xù)的動作部分表項(xiàng)作為第一動作全表項(xiàng)可以包括:
從動作流表中選擇第一個動作半表項(xiàng)的動作索引號為偶數(shù)的2個連續(xù)的動作半表項(xiàng)。繼續(xù)以圖4所示的動作流表為例,只要動作全表項(xiàng)沒有被占用,那么,可以將選擇第一個動作半表項(xiàng)的動作索引號為偶數(shù)的2個連續(xù)的動作半表項(xiàng)作為第一動作全表項(xiàng),例如,可以選擇索引號為0的動作半表項(xiàng)以及索引號為1的動作半表項(xiàng)組成第一動作全表項(xiàng),可以選擇索引號為2的動作半表項(xiàng)以及索引號為3的動作半表項(xiàng)組成第一動作全表項(xiàng),可以選擇索引號為4的動作半表項(xiàng)以及索引號為5的動作半表項(xiàng)組成第一動作全表項(xiàng),可以選擇索引號為6的動作半表項(xiàng)以及索引號為7的動作半表項(xiàng)組成第一動作全表項(xiàng)。
[0081] 上述方案中,數(shù)量相反的不同類型的匹配流表分到1個共享存儲空間中。例如L2(半表多),tunnel(全表多)劃分到1個共享存儲空間,L3(半表多),L4(全表多)劃分到1個共享存儲空間。由于共享存儲空間中的匹配流表是共用規(guī)格的,這樣可以增大某類型匹配流表的規(guī)格。
[0082] 例如,匹配流表分為4個類型L2,L3,L4,tunnel4。每個類型分配5K的存儲資源。以L3和L4的共享存儲空間為例,該共享存儲空間共用了10K的存儲資源。
[0083] (1)半表多的場景。如果全部是L3類型的匹配流表,普通的流表卸載共卸載5K的L3類型的匹配流表;引入全表半表后共卸載8K?10K的L3類型的匹配流表,是普通流表卸載的
1.6?2倍;使用共享存儲空間之后共卸載16K?20K的L3類型的匹配流表,是普通流表卸載的
3.2?4倍。
[0084] (2)全表多的場景。如果全部是L4類型的匹配流表,普通的流表卸載共卸載5K的L4類型的匹配流表;引入全表半表后共卸載5K?7K的L4類型的匹配流表(由于有些L4流表中字段不多,也可以是半表),是普通流表卸載1?1.4倍;使用共享存儲空間之后共卸載10K?14K的tunnel4類型的匹配流表,是普通流表卸載的2?2.8倍。
[0085] 由此可見半表多的場景可以提高3.2?4倍的流表規(guī)格,全表多的場景可以提高2?
2.8倍的流表規(guī)格。
[0086] 參見圖6,圖6是本申請?zhí)峁┑囊环N計(jì)算設(shè)備的結(jié)構(gòu)示意圖。該計(jì)算設(shè)備400包括:
一個或者多個處理單元410、通信接口420以及存儲單元430。