本產品的文件集力求使用無偏見用語。針對本文件集的目的,無偏見係定義為未根據年齡、身心障礙、性別、種族身分、民族身分、性別傾向、社會經濟地位及交織性表示歧視的用語。由於本產品軟體使用者介面中硬式編碼的語言、根據 RFP 文件使用的語言,或引用第三方產品的語言,因此本文件中可能會出現例外狀況。深入瞭解思科如何使用包容性用語。
思科已使用電腦和人工技術翻譯本文件,讓全世界的使用者能夠以自己的語言理解支援內容。請注意,即使是最佳機器翻譯,也不如專業譯者翻譯的內容準確。Cisco Systems, Inc. 對這些翻譯的準確度概不負責,並建議一律查看原始英文文件(提供連結)。
本文檔介紹如何在QvPC-DI上監控iftask / NPU的效能。
它還提供了有關iftask的一些關鍵概念的詳細資訊。
本文檔中的資訊基於QvPC-DI。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
iftask是QvPC-DI中的一個進程。它為DI網路埠和服務埠在服務功能虛擬卡(SF)和控制功能虛擬卡(CF)上啟用資料平面開發套件(DPDK)功能。DPDK是處理虛擬化環境中輸入/輸出的更有效方式。
高效能網路介面控制器(NIC)的裝置驅動程式現在被移至userspace,以避免昂貴的情景交換機(userspace/kernelspace)。
驅動程式在使用者空間中以不可中斷模式運行,執行緒可以直接訪問這些NIC驅動程式中的HW隊列/環緩衝區。
有關架構的文檔可從以下網址獲得:
Ultra Gateway Platform System Administration Guide中的Ultra Services Platform(USP)簡介。
深入的iftask體系結構(用於SF)如下圖所示:

存在各種元件:
輪詢模式驅動程式(PMD):這是連續輪詢來自NIC的HW隊列(對於SR-IOV)或SW環緩衝區(對於虛擬/vmxnet型別的介面)的功能。 因此,與這些PMD關聯的CPU始終固定為100%。
在部署期間,可以通過param.cfg檔案靜態分配分配分配給iftask和iftask內各種功能的CPU的nr。
Boxertap:根據資料包的來源(例如:Di port/service port),以及應傳送的位置(例如:本地vNPU)
IOMUX:具有包含所有目標(sessmgr/ports/vNPU/..)的BIA庫。 此功能主要是根據封包的BIA對其進行路由
vNPU:-flow分類/查詢。這可與基於硬體的系統(ASR5000/ASR5500)中的NPU相媲美。
vNPU中的流仍由NPUmgr(其資訊來自demuxmgr/sessmgr等)在vNPU可訪問的共用記憶體中程式設計。
— 此外,還建立了一個API,以便npumgr/sessmgr可以輪詢vNPU以獲取統計資訊/配置
MCDMA:目的地為sessmgr的資料包被寫入MCDMA介面(通過可用的各種MCDMA核心/執行緒)。 然後通過DMA將這些資料包提供給sessmgr。由於核心僅以有限的方式參與,因此這提供了真正的效能提升。這將在本文中進一步說明。
MCDMA還提供批處理功能(在一個系統呼叫中處理多個資料包)。
KNI:需要進入linux核心的資料包的介面(DI control/ARP/icmp/routing/...)
下圖說明控制平面資料包的資料包流。範例:GTPv2建立會話請求

步驟 1:GTPv2 CSR資料包將通過任何可用SF上的服務埠進入。它將被置於服務介面NIC的Rx隊列中,並由iftask進程的PMD核心之一接收。Boxertap將放入MEH報頭,資料包將通過IOMux轉發到本地vNPU以進行流查詢。
由於這是新會話,因此vNPU沒有為此設定的特定流,它必須將資料包路由到demux卡上的demux管理器。
步驟 2:vNPU更改MEH報頭(為相關解複用進程使用新的BIA)。IOMUX知道它必須通過DI網路將此資訊傳送到demux卡。如果Demux卡上的任務進程將處理傳入資料包,IOMux會將其路由到KNI模組(指向核心的介面)。 通過核心,它最終將進入demuxmgr進程(在本例中為egtpinmgr)。
步驟 3:Demuxmgr將執行其任務。選擇一個sessmgr,並使用後續GTPv2資料包的流來程式設計npumgr
所有卡的vNPU將能夠訪問npumgr用於對這些流進行程式設計的共用記憶體。
步驟 4:GTPv2 CSR現在轉發到所選sessmgr。它是MEH,在DI網路上再次更改,然後從Demux卡轉發到Sessmgr SF卡。該卡上的IOMUX進程將通過MCDMA介面將資料包轉發到所選sessmgr。從現在起,sessmgr將處理此會話的所有GTPv2流量。一旦協商GTPU TEID,它將通過NPUmgr對流進行程式設計,以便後續的GTPU資料包也可以直接從傳入的SF卡傳輸到sessmgr SF卡。
在部署期間,將一定數量的虛擬中央處理器(vCPU)靜態分配給iftask進程。這減少了用於使用者空間應用程式(sessmgr等)的核心數量,但大大提高了I/O的效能。
通過在部署期間與每個SF/CF關聯的param.cfg模板中的以下引數完成此分配:
show cloud hardware iftask命令提供有關您的QVPC-DI部署的詳細資訊:
[local]UGP# show cloud hardware iftask Card 1: Total number of cores on VM: 8 Number of cores for PMD only: 0 Number of cores for VNPU only: 0 Number of cores for PMD and VNPU: 2 <-- CF: 2 out of 8 cores are assigned to iftask PMD/VNPU Number of cores for MCDMA: 0 <-- CF: no cores allocated to MCDMA as there is no sessmgr process on CF Number of cores for Crypto: 0 Hugepage size: 2048 kB Total hugepages: 3670016 kB NPUSHM hugepages: 0 kB CPU flags: avx sse sse2 ssse3 sse4_1 sse4_2 Poll CPU's: 1 2 KNI reschedule interval: 5 us ... Card 3: Total number of cores on VM: 8 Number of cores for PMD only: 0 Number of cores for VNPU only: 0 Number of cores for PMD and VNPU: 2 <-- SF: 2 out of 8 core are assigned to iftask PMD/VNPU
Number of cores for MCDMA: 1 <-- SF: 1 out of 8 cores is assigned to iftak MCDMA
Number of cores for Crypto: 0
Hugepage size: 2048 kB
Total hugepages: 4718592 kB
NPUSHM hugepages: 0 kB
CPU flags: avx sse sse2 ssse3 sse4_1 sse4_2
Poll CPU's: 1 2 3
KNI reschedule interval: 5 us
命令「show cloud configuration」將提供有關所用引數的更多詳細資訊:
[local]UGP# show cloud configuration Card 1: Config Disk Params: ------------------------- CARDSLOT=1 CPUID=0 CARDTYPE=0x40010100 DI_INTERFACE=BOND:TYPE:ixgbevf-1,TYPE:ixgbevf-2 DI_INTERFACE_VLANID=2111 VNFM_INTERFACE=MAC:fa:16:3e:23:aa:e9 VNFM_PROXY_ADDRS=172.16.180.3,172.16.180.5,172.16.180.6 MGMT_INTERFACE=MAC:fa:16:3e:87:23:9b VNFM_IPV4_ENABLE=true VNFM_IPV4_DHCP_ENABLE=true Local Params: ------------------------- CARDSLOT=1 CARDTYPE=0x40010100 CPUID=0 ... Card 3: Config Disk Params: ------------------------- CARDSLOT=3 CPUID=0 CARDTYPE=0x42030100 DI_INTERFACE=BOND:TYPE:ixgbevf-1,TYPE:ixgbevf-2 SERVICE1_INTERFACE=BOND:TYPE:ixgbevf-3,TYPE:ixgbevf-4 SERVICE2_INTERFACE=BOND:TYPE:ixgbevf-5,TYPE:ixgbevf-6 DI_INTERFACE_VLANID=2111 VNFM_INTERFACE=MAC:fa:16:3e:29:c6:b7 IFTASK_CORES=30 VNFM_IPV4_ENABLE=true VNFM_IPV4_DHCP_ENABLE=true Local Params: ------------------------- CARDSLOT=3 CARDTYPE=0x42010100 CPUID=0
將vCPU分配給iftask時,必須考慮許多因素。
-SF可用的vCPU總數與iftask vCPU的總數:預設配置指定通過param.cfg檔案中的IFTASK_CORES引數與iftask關聯的vCPU的30%。但這可能因應用而異(MME與SPGW與ePDG) — >諮詢工程部。
-分配給PMD的iftask vCPU與分配給MCDMA的iftask vCPU的比較。若要驗證此值是否平衡,請參閱下面的「iftask performance」部分。
-iftask MCDMA vCPU與所有應用程式的剩餘vCPU對比。通常iftask MCDMA vCPU的1/x分佈對於應用程式的其餘vCPU(sessmgr/aaamgr/...)是比較好的。
範例:
SF可用的核心總數38個:
分配給iftask的–14(6 PMD,8 MCDMA)
— 剩餘24個分配給其他進程
這意味著每3個應用程式vCPU有1個MCDMA vCPU。
這有助於確保每個MCDMA vCPU的負載相等。
iftask過程可以通過多種方式監控。
整合show命令清單:
show subscribers data-rate show npumgr dinet utilization pps show npumgr dinet utilization pps show cloud monitor di-network summary show cloud hardware iftask show cloud configuration show iftask stats summary show port utilization table show npu utilization table show npumgr utilization information show processes cpu
命令 #show cpu info verbose不會提供有關iftask核心的資訊。它們將始終以100%的利用率列出。
在下面的示例中,核心1、2、3與iftask關聯,並且列出的利用率是100%,這是預期的。
Card 3, CPU 0:
Status : Standby, Kernel Running, Tasks Running
Load Average : 3.12, 3.12, 3.13 (3.95 max)
Total Memory : 16384M
Kernel Uptime : 4D 21H 56M
Last Reading:
CPU Usage All : 1.9% user, 0.3% sys, 0.0% io, 0.0% irq, 97.8% idle
Core 0 : 5.8% user, 0.2% sys, 0.0% io, 0.0% irq, 94.0% idle
Core 1 : Not Averaged (Poll CPU)
Core 2 : Not Averaged (Poll CPU)
Core 3 : Not Averaged (Poll CPU)
Core 4 : 2.2% user, 0.2% sys, 0.0% io, 0.0% irq, 97.6% idle
Core 5 : 0.8% user, 0.5% sys, 0.0% io, 0.0% irq, 98.7% idle
Core 6 : 0.4% user, 0.5% sys, 0.0% io, 0.0% irq, 99.1% idle
Core 7 : 0.1% user, 0.3% sys, 0.0% io, 0.0% irq, 99.6% idle
Poll CPUs : 3 (1, 2, 3)
Core 1 : 100.0% user, 0.0% sys, 0.0% io, 0.0% irq, 0.0% idle
Core 2 : 100.0% user, 0.0% sys, 0.0% io, 0.0% irq, 0.0% idle
Core 3 : 100.0% user, 0.0% sys, 0.0% io, 0.0% irq, 0.0% idle
Processes / Tasks : 143 processes / 16 tasks
Network mcdmaN : 0.002 kpps rx, 0.001 mbps rx, 0.002 kpps tx, 0.001 mbps tx
File Usage : 1504 open files, 1627405 available
Memory Usage : 7687M 46.9% used
Memory Details:
Static : 330M kernel, 144M image
System : 10M tmp, 0M buffers, 54M kcache, 79M cache
Process/Task : 6963M (120M small, 684M huge, 6158M other)
Other : 104M shared data
Free : 8696M free
Usable : 5810M usable (8696M free, 0M reclaimable, 2885M reserved by tasks)命令#show npu使用率表將很好地總結與iftask過程(在每個卡上)關聯的每個核心的利用率。
附註:這裡的重要一點是,確定某些核心的利用率是否始終高於其他核心。
[local]UGP# show npu utilization table
-------iftask-------
lcore now 5min 15min
-------- ------ ------ ------
01/0/1 0% 0% 0%
01/0/2 0% 0% 0%
02/0/1 0% 0% 0%
02/0/2 2% 1% 0%
03/0/1 0% 0% 0%
03/0/2 0% 0% 0%
03/0/3 0% 0% 0%
04/0/1 0% 0% 0%
04/0/2 0% 0% 0%
04/0/3 0% 0% 0%
05/0/1 0% 0% 0%
05/0/2 0% 0% 0%
05/0/3 0% 0% 0%命令#show npumgr utilization information(隱藏命令)
此命令可提供有關每個完整核心的詳細資訊,以及這些核心上佔用CPU的資源的詳細資訊。
附註:PMD核心的CPU消耗在PortRX、PortTX、KNI、密碼上。MCDMA核心的CPU正在被MCDMA消耗。
PMD和MCDMA核心的負載應該相當均勻。
如果不是這樣,則可能需要進行一些調整(例如,分配更多/更少的MDMA核心)。
******** show npumgr utilization information 3/0/0 *******
5-Sec Avg: lcore01| lcore02| lcore03| lcore04| lcore05| lcore06| lcore07| lcore08| lcore09| lcore10| lcore11| lcore12| lcore13| lcore14| lcore15| lcore16|
Idle: 31%| 37%| 32%| 35%| 41%| 48%| 47%| 38%| 57%| 56%| 55%| 56%| 46%| 56%| 54%| 52%|
PortRX: 28%| 26%| 27%| 26%| 0%| 0%| 0%| 0%| 12%| 14%| 11%| 11%| 0%| 0%| 0%| 0%|
PortTX: 5%| 5%| 6%| 5%| 8%| 8%| 8%| 14%| 0%| 0%| 0%| 0%| 0%| 0%| 0%| 0%|
KniRX: 6%| 0%| 0%| 0%| 0%| 0%| 0%| 0%| 0%| 0%| 0%| 0%| 0%| 0%| 0%| 0%|
Kni: 1%| 0%| 0%| 0%| 0%| 0%| 0%| 0%| 0%| 0%| 0%| 0%| 0%| 0%| 0%| 0%|
McdmaRX: 0%| 0%| 0%| 0%| 34%| 29%| 29%| 32%| 0%| 0%| 0%| 0%| 35%| 28%| 28%| 28%|
Mcdma: 0%| 0%| 0%| 0%| 11%| 7%| 4%| 6%| 0%| 0%| 0%| 0%| 14%| 7%| 7%| 7%|
Vnpu: 28%| 29%| 28%| 32%| 0%| 0%| 0%| 0%| 30%| 28%| 33%| 28%| 0%| 0%| 0%| 0%|
McdmaFlush: 0%| 0%| 0%| 0%| 6%| 8%| 12%| 10%| 0%| 0%| 0%| 0%| 6%| 10%| 11%| 14%|
Cipher: 1%| 2%| 6%| 2%| 0%| 0%| 0%| 0%| 1%| 2%| 1%| 5%| 0%| 0%| 0%| 0%|
rx kbits/sec: 728563| 736103| 647535| 626595| 811362| 698724| 717147| 799281| 617199| 595268| 623670| 633132| 819270| 672732| 790849| 719498|
rx frames/sec: 94409| 95586| 91107| 84997| 109526| 97466| 98557| 107690| 81122| 82076| 86959| 87960| 114114| 96198| 108108| 100259|
tx kbits/sec: 715038| 722181| 634227| 614221| 827124| 712740| 731329| 814782| 605373| 583318| 611001| 620328| 835692| 686575| 806395| 733924|
tx frames/sec: 94310| 95491| 90969| 84896| 109526| 97466| 98557| 107690| 81002| 81986| 86858| 87859| 114114| 96198| 108108| 100259|
5-Min Avg: ...
15-Min Avg: ...更多解釋:
對於通過服務埠或DI埠傳入的iftask進程的資料包,CPU按如下方式計算。
Vnpu查詢是CPU最密集的一部分。
如果Vnpu查詢之後:
— 將資料包傳送到MCDMA核心,CPU時間將記在相關MCDMA核心的McdmaRx上。
— 資料包傳送到另一個iftask核心,CPU時間將記入Vnpu
— 資料包在同一核心上傳送,CPU時間將記入PortRx
— 資料包在同一個iftask核心上傳送,CPU時間將記入KniRx
PortRx還包括大量一般開銷,用於將資料包從接收隊列中拉出,並將它們排程/排隊到需要到達的位置
命令#show npumgr dinet utilization pps、#show npumgr dinet utilization bps和#show port utilization table
它們提供有關DI埠和服務埠上的負載的資訊。
實際效能取決於NIC/CPU和CPU分配給iftask。
[local]UGP# show npumgr dinet utilization pps
------ Average DINet Port Utilization (in kpps) ------
Port Type Current 5min 15min
Rx Tx Rx Tx Rx Tx
----- ------------------------ ------- ------- ------- ------- ------- -------
1/0 Virtual Ethernet 0 0 0 0 0 0
2/0 Virtual Ethernet 0 0 0 0 0 0
3/0 Virtual Ethernet 0 0 0 0 0 0
4/0 Virtual Ethernet 0 0 0 0 0 0
5/0 Virtual Ethernet 0 0 0 0 0 0
[local]UGP# show npumgr dinet utilization bps
------ Average DINet Port Utilization (in mbps) ------
Port Type Current 5min 15min
Rx Tx Rx Tx Rx Tx
----- ------------------------ ------- ------- ------- ------- ------- -------
1/0 Virtual Ethernet 1 1 1 1 1 1
2/0 Virtual Ethernet 1 0 1 0 1 0
3/0 Virtual Ethernet 0 0 0 0 0 0
4/0 Virtual Ethernet 0 0 0 0 0 0
5/0 Virtual Ethernet 0 0 0 0 0 0
[local]UGP# show port utilization table
------ Average Port Utilization (in mbps) ------
Port Type Current 5min 15min
Rx Tx Rx Tx Rx Tx
----- ------------------------ ------- ------- ------- ------- ------- -------
1/1 Virtual Ethernet 0 0 0 0 0 0
2/1 Virtual Ethernet 0 0 0 0 0 0
3/10 Virtual Ethernet 0 0 0 0 0 0
3/11 Virtual Ethernet 0 0 0 0 0 0
4/10 Virtual Ethernet 0 0 0 0 0 0
4/11 Virtual Ethernet 0 0 0 0 0 0
5/10 Virtual Ethernet 0 0 0 0 0 0
5/11 Virtual Ethernet 0 0 0 0 0 0命令#show cloud monitor di-network summary
此命令可監控DI網路的運行狀況。賀卡正在互相傳送心跳,和損失情況。在正常的系統中,不會報告任何損失。
[local]UGP# show cloud monitor di-network summary Card 3 Heartbeat Results: ToCard Health 5MinLoss 60MinLoss 1 Good 0.00% 0.00% 2 Good 0.00% 0.00% 4 Good 0.00% 0.00% 5 Good 0.00% 0.00% Card 4 Heartbeat Results: ToCard Health 5MinLoss 60MinLoss 1 Good 0.00% 0.00% 2 Good 0.00% 0.00% 3 Good 0.00% 0.00% 5 Good 0.00% 0.00% Card 5 Heartbeat Results: ToCard Health 5MinLoss 60MinLoss 1 Good 0.00% 0.00% 2 Good 0.00% 0.00% 3 Good 0.00% 0.00% 4 Good 0.00% 0.00%
命令#show iftask stats summary
在NPU負載較高的情況下,流量可能會被丟棄。
要對此進行評估,可以採取命令#show iftask stats summary輸出。
附註:DISCARDS可以是非零值,理想情況下,所有其他計數器應保持為0。
[local]VPC# show iftask stats summary Thursday January 18 16:01:29 IST 2018 ----------------------------------------------------------------------------------------------- Counter SF3 SF4 SF5 SF6 SF7 SF8 SF9 SF10 SF11 SF12 ___TOTAL___ ------------------------------------------------------------------------------------------------ svc_rx 32491861127 16545600654 37041906441 37466889835 32762859630 34931554543 38861410897 16025531220 33566817747 32823851780 312518283874 svc_tx 46024774071 14811663244 40316226774 39926898585 40803541378 48718868048 35252698559 1738016438 4249156512 40356388348 312198231957 di_rx 42307187425 14637310721 40072487209 39584697117 41150445596 44534022642 31867253533 1731310419 4401095653 40711142205 300996952520 di_tx 28420090751 16267050562 36423298668 36758561246 32731606974 30366650898 35201117980 16009902791 33536789041 32815316570 298530385481 __ALL_DROPS__ 1932492 252 17742 790473 11228 627018 844812 60402 0 460830 4745249 svc_tx_drops 0 0 0 0 0 0 0 0 0 0 0 di_rx_drops 0 1 0 0 49 113 579 30200 0 4888 35830 di_tx_drops 0 0 0 0 0 0 0 0 0 0 0 sw_rss_enq_drops 0 0 0 0 0 0 0 0 0 0 0 kni_thread_drops 0 0 0 0 0 0 0 0 0 0 0 kni_drops 0 1 0 0 0 0 124 30200 0 0 30325 mcdma_drops 0 0 0 168 80 194535 758500 0 0 11628 964911 mux_deliver_hop_drops 0 0 0 0 0 0 0 0 0 1019 1019 mux_deliver_drops 0 0 0 0 0 0 0 0 0 0 0 mux_xmit_failure_drops 0 3 0 0 0 0 7 2 0 0 12 mc_dma_thread_enq_drops 0 0 0 0 49 113 580 0 0 3457 4199 sw_tx_egress_enq_drops 1904329 0 0 787971 9004 429214 85022 0 0 429810 3645350 cpeth0_drops 0 0 0 0 0 0 0 0 0 0 0 mcdma_summary_drops 28163 247 17742 2334 2046 3043 0 0 0 10028 63603 fragmentation_err 0 0 0 0 0 0 0 0 0 0 0 reassembly_err 0 0 0 0 0 0 0 0 0 0 0 reassembly_ring_enq_err 0 0 0 0 0 0 0 0 0 0 0 __DISCARDS__ 20331090 9051092 23736055 23882896 23807520 24231716 24116576 8944291 22309474 20135799 20135799
RSS是一種功能,能夠將來自NIC的傳入流量分佈到多個DPDK處理器上。通常NIC在硬體中支援RSS,使其能夠在多個任務核心之間分配流量。
Staros中的iftask進程已實施了rss的軟體版本,在以下情況下可以啟用該版本:
-nic不支援硬體rss(因此所有tx/rx流量將停留在單個iftask CPU)。
-nic沒有足夠的tx/rx隊列(隊列少於分配給iftask的可用tx/rx CPU的隊列)。 在這種情況下,SW-RSS(全面)可以在分配給rx/tx的所有可用的iftask核心之間正確分配。
此功能僅適用於透過服務連線埠傳入的流量。不考慮DI流量。
存在3種配置模式:
-no iftask sw-rss - sw-rss disabled。系統依靠硬體RSS。
-iftask sw-rss全面 — 對所有流量使用sw rss。SW RSS可以與HW RSS一起運行。無需禁用硬體RSS。但是,SW RSS將負責將服務流量實際負載均衡到iftask核心。
-iftask sw-rss補充 — 僅對hw-rss不支援的流量使用sw rss(示例:MPLS流量)
在硬體和軟體RSS中,瞭解流量如何雜湊到各種iftask/dpdk處理器非常重要。
硬體RSS:雜湊取決於硬體。以下是範例:
[root@host]# ethtool -n enp10s0f1
4 RX rings available
Total 0 rules
[root@host] # ethtool -n enp10s0f0 rx-flow-hash udp4
UDP over IPV4 flows use these fields for computing Hash flow key:
IP SA
IP DA
軟體RSS:從Staros 21.6開始,SW RSS版本的雜湊行為如下:
1. In case of IPV6
we only support L3( IP src/dst ) based hashing (same as the old behaviour).
2. In case of IPV4
a. For TCP we support IP src/dst + tcp ports src/dst
b. For UDP fragmented - only IP src/dst
c. For UDP non-fragmented not gtpu ( I.e. Port !=2152) ? IP src/dst + udp port src/dst
d. For UDP non-fragmented and gtpu ( I.e. Port ==2152) - IP src/dst + udp port src/dst + gtp tunnel id
e. Any other protocol ? we default back to IP src/dst
重要事項:加密DI流量的RSS:
如果沒有SW-RSS(補充/綜合),則可能所有加密的DI流量都會在iftask中雜湊到一個核心。
這將導致此核心始終比其他核心具有較高的利用率。
自CSCvi06080
,現在可通過以下配置命令緩解此問題:
iftask di-net-encrypt-rss
整合CSCvm41257之後
,此選項將設定為預設值。
有關SW RSS的更多詳細資訊:
sw-rss的目的是對PMD核心進行負載平衡,並避免一個PMD核心在其它核心具有大量可用容量時達到最大吞吐量限制的情況。
所有服務埠入口資料包都從NIC中拉出,並由為其到達的Rx隊列提供服務的PMD核心進行MEH封裝。
此時,iftask不知道要將資料包傳送到何處。資料包必須由VNPU處理才能確定內部目標。在傳遞給VNPU時,幾乎所有資料包都會通過IOC/流查詢。例外情況與因未設定/停用VLAN或目的地MAC無效等原因而捨棄有關(還有L3轉送案例,但這種情況不常見)。
如果未配置sw-rss,則VNPU IOC/流查詢處理會緊隨MEH封裝後在同一核心上進行。如果配置了sw-rss,資料包將排隊到核心以根據雜湊進行VNPU處理。VNPU的IOC/Flow查詢操作是最昂貴的iftask函式;sw-rss可讓我們跨所有PMD核心平衡工作負載。
在VNPU IOC/流查詢之後,該資料包通過DINet傳輸傳輸到另一個SF,或通過MCDMA傳輸排隊到本地應用(同樣也有例外,但我認為它們與此討論無關)。
傳送到另一個SF的資料包將直接排隊到目的地卡上的相應MCDMA通道中,該通道位於DINet Rx之後。它們不需要(第二個)VNPU通道。
在iftask日誌中,我們可以看到以下日誌:
Tue May 7 15:26:48 2019 PID:8188 APP: max rx queues supported 16 ...
Tue May 7 15:26:48 2019 PID:8188 APP: max tx queues supported 8 ...
Tue May 7 15:26:48 2019 PID:8188 APP: hw rx requested 2 ...
Tue May 7 15:26:48 2019 PID:8188 APP: hw tx requested tx 5
這與實際硬體支援的受支援的rx和tx隊列數與處理任務請求的tx/rx隊列數相關。
iftask的要求與分配給iftask的處理器數量密切相關。
附註:每個司機都不一樣。一些查詢主機,一些具有硬編碼。
hw tx requested count是dpdk正在使用的核心數。這通常比分配給iftask的總核心多一個,因為dpdk包括運行控制/ipc執行緒的核心。此核心與boxer共用並計畫為通用cpu(dpdk control/ipc執行緒未使用大量cpu)。
請求的hw rx計數通常是PMD核心的數量。
Iftask為每個埠分配最小(請求,最大)並在核心間分配它們。分佈演算法有點複雜。目標是儘可能均勻地分配所有核心的工作負載。
自21.9版起,staros具有以下對於批處理(聚合流量)非常重要的預設任務配置選項。 當節點正在測試單個(或幾個)使用者時,這會對效能產生一些負面影響。
# iftask mcdmatxbatch burst size 32 # iftask mcdmatxbatch latency 200 # iftask txbatch burst size 32 # iftask txbatch latency 200
有關這個問題的更多解釋見另一篇文章:
為與iftask/dinet相關的QPVC-DI效能開發了bulkstat方案。這對於從效能/負載角度監控DINET、服務埠和NPU利用率非常有用:
card schema iftask-dinet format EMS,IFTASKDINET,%date%,%time%,%dinet-rxpkts-curr%,%dinet-txpkts-curr%,%dinet-rxpkts-5minave%,%dinet-txpkts-5minave%,%dinet-rxpkts-15minave%,%dinet-txpkts-15minave%,%dinet-txdrops-curr%,%dinet-txdrops-5minave%,%dinet-txdrops-15minave%,%npuutil-now% file 2 port schema iftask-port format EMS,IFTASKPORT,%date%,%time%,%util-rxpkts-curr%,%util-txpkts-curr%,%util-rxpkts-5min%,%util-txpkts-5min%,%util-rxpkts-15min%,%util-txpkts-15min%,%util-txdrops-curr%,%util-txdrops-5min%,%util-txdrops-15min% file 3 card schema npu-util format EMS,NPUUTIL,%date%,%time%,%npuutil-now%,%npuutil-5minave%,%npuutil-15minave%,%npuutil-rxbytes-5secave%,%npuutil-txbytes-5secave%,%npuutil-rxbytes-5minave%,%npuutil-txbytes-5minave%,%npuutil-rxbytes-15minave%,%npuutil-txbytes-15minave%,%npuutil-rxpkts-5secave%,%npuutil-txpkts-5secave%,%npuutil-rxpkts-5minave%,%npuutil-txpkts-5minave%,%npuutil-rxpkts-15minave%,%npuutil-txpkts-15minave%
| 修訂 | 發佈日期 | 意見 |
|---|---|---|
1.0 |
09-Jun-2018
|
初始版本 |
意見