簡介
本文檔介紹如何確定StarOS應用程式中的問題或硬體驅動程式是否導致StarOS KNI:記憶體不足日誌。
背景
在DPDK內部轉發器(IFTASK)流程中的核心網路介面(KNI)模組是一種機制,它允許使用者空間程式直接從網路介面接收資料包,完全繞過Linux網路和Linux IP堆疊。
KNI:當存在影響KNI模組的資源爭用問題時,會產生記憶體不足日誌速率限制警告。
- 未清除裸機(硬體)級別的記憶體緩衝區,從而導致緩衝區溢位。
- iftask從中為這些資料包分配消息緩衝區的KNI池空間不足。
- 虛擬功能會查詢更多資料包,但物理功能會響應它沒有任何內容。
- 一旦KNI:記憶體不足情況發生,iftask將進入備份記憶體池進一步配置和處理資料包。如果備份池也耗盡記憶體,系統將丟棄資料包。
- 由於iftask無法讀取來自核心的資料包突發,因此將在StarOS中生成KNI:記憶體不足日誌。
觸發KNI:記憶體不足情況:
緩衝區溢位情況的潛在觸發因素可能有所不同,例如運行SFTP或SCP應用程式,或者在CF和SF卡之間傳輸非常大的檔案。
調查步驟
步驟 1.觀察症狀
步驟 2.檢查DI網路運行狀況是否下降
步驟 3.檢查Userspace KNI丟棄
步驟 4.檢查硬體驅動程式
步驟 1.觀察症狀
將KNI:記憶體不足錯誤的時間與資料包丟失或應用層降級(egtpc路徑故障)等其他症狀關聯。
KNI:記憶體不足日誌
- 在StarOS系統日誌中,您可以看到指示核心網路介面記憶體不足的日誌。
2023-Nov-16+09:18:03.205 [iftask 214701 error] [1/0/9602 <evlogd:0> evlgd_syslogd.c:236] [software internal system syslog] CPU[3/0]: Nov 16 14:18:03 iftask[7387]: KNI: Out of memory, kni port cpbond0, socket_id=0, total=-130952296, iter=27
- 如果備份記憶體耗盡,您會看到指示備份池記憶體也耗盡的錯誤消息。
RTE_LOG(ERR, KNI, "Out of memory from Backup pool, kni port %s, socket_id=%d, total=%d, iter=%d\n", kni->name, rte_socket_id(), kni->oom_backup_warn, i)
- 在debug shell的tmp目錄中發現的IFTask日誌中,您可以看到KNI: Out of Memory錯誤:
Wed Nov 15 17:20:30 2023 PID:7387 KNI: Out of memory, kni port cpbond0, socket_id=0, total=-759247296, iter=25
EGTPC路徑故障
- 到達不同對等體的gtpc路徑失敗中可能會出現峰值,原因在資料包丟失期間對等體沒有響應。
2023-10-23T00:14:33.813+00:00 Nodename evlogd: [local-60sec33.780] [egtpmgr 143137 info] [6/0/12364 <egtpegmgr:3> egtpmgr_pm.c:905] [context: mme_ctx, contextID: 3] [software internal system critical-info syslog] context: mme_ctx, service : mme_svc_egtp, self addr: <X.X.X.X>, GTP-C path failure for peer <Y.Y.Y.Y>, peer session count marked: 0, egtpmgr state SRP_SESS_STATE_ACTIVE
步驟 2.檢查DI網路運行狀況是否下降
找出哪些連線效能下降。如果持續觀察,DI網路運行狀況輸出中較高的丟包或丟失百分比可能表示DI網路配置或運行問題、流量超載,或VM或主機問題。
show session recovery status verbose
- 使用show session recover status verbose輸出確定哪個虛擬功能卡用作Demux卡。
******** show session recovery status verbose *******
Tuesday October 24 11:23:45 EDT 2023
Session Recovery Status:
Overall Status : Ready For Recovery
Last Status Update : 1 second ago
----sessmgr--- ----aaamgr---- demux
cpu state active standby active standby active status
---- ------- ------ ------- ------ ------- ------ -------------------------
3/0 Active 24 1 24 1 0 Good
4/0 Active 24 1 24 1 0 Good
5/0 Active 24 1 24 1 0 Good
6/0 Active 0 0 0 0 10 Good (Demux)
7/0 Active 24 1 24 1 0 Good
8/0 Active 24 1 24 1 0 Good
9/0 Active 24 1 24 1 0 Good
10/0 Active 24 1 24 1 0 Good
11/0 Active 24 1 24 1 0 Good
12/0 Standby 0 24 0 24 0 Good
show cloud monitor di-network detail
- 使用「show cloud monitor di-network detail」輸出確定虛擬功能卡之間的哪些DI網路連線在心跳中丟棄。
- 顯示從CF卡和SF卡到SF卡6的檢測訊號丟失。CF和SF卡到其他CF和SF卡的輸出顯示無心跳丟棄。
******** show cloud monitor di-network detail *******
Tuesday October 24 11:23:51 EDT 2023
Card 1 Heartbeat Results:
ToCard Health 5Min-Loss 60Min-Loss
------ ------- --------- ----------
…
6 Good 0.00% 0.66%
…
Card 2 Heartbeat Results:
…
6 Bad 14.67% 3.50%
…
Card 3 Heartbeat Results:
…
6 Bad 5.35% 2.69%
…
Card 4 Heartbeat Results:
…
6 Good 0.00% 0.00%
…
Card 5 Heartbeat Results:
…
6 Bad 18.57% 3.90%
…
Card 6 Heartbeat Results:
…
1 Good 0.00% 0.90%
2 Bad 12.63% 3.31%
3 Bad 2.90% 2.14%
4 Good 0.00% 0.00%
5 Bad 13.09% 3.30%
7 Good 0.00% 0.00%
8 Bad 2.91% 2.20%
9 Good 0.00% 0.93%
10 Bad 14.28% 3.38%
11 Bad 3.67% 2.09%
12 Good 0.00% 0.00%
…
Card 7 Heartbeat Results:
…
6 Good 0.00% 0.00%
…
Card 8 Heartbeat Results:
…
6 Bad 7.47% 2.85%
…
Card 9 Heartbeat Results:
…
6 Bad 0.00% 1.07%
…
Card 10 Heartbeat Results:
…
6 Bad 16.01% 3.73%
…
Card 11 Heartbeat Results:
…
6 Bad 7.47% 2.71%
…
Card 12 Heartbeat Results:
…
6 Good 0.00% 0.00%
show cloud monitor controlplane
- 使用show cloud monitor contoplane輸出確定哪些DI網路連線存在降級。
******** show cloud monitor controlplane *******
Tuesday October 24 11:24:22 EDT 2023
Cards 15 Second Interval 5 Minute Interval 60 Minute Interval
Src Dst Xmit Recv Miss% Xmit Recv Miss% Xmit Recv Miss%
--- --- ------ ------ ------ ------ ------ ------ ------ ------ ------
…
01 06 75 75 0.0% 1500 1500 0.0% 18000 17842 0.9%
…
02 06 75 75 0.0% 1500 1265 15.7% 18000 17546 2.5%
…
03 06 75 75 0.0% 1500 1396 6.9% 18000 17491 2.8%
…
04 06 75 75 0.0% 1500 1500 0.0% 18000 18000 0.0%
…
05 06 75 75 0.0% 1500 1267 15.5% 18000 17325 3.8%
…
06 01 75 75 0.0% 1500 1500 0.0% 18000 17823 1.0%
06 02 75 75 0.0% 1500 1301 13.3% 18000 17567 2.4%
06 03 75 75 0.0% 1500 1419 5.4% 18000 17561 2.4%
06 04 75 75 0.0% 1500 1500 0.0% 18000 18000 0.0%
06 05 75 75 0.0% 1500 1294 13.7% 18000 17579 2.3%
06 07 75 75 0.0% 1500 1500 0.0% 18000 18000 0.0%
06 08 75 75 0.0% 1500 1417 5.5% 18000 17565 2.4%
06 09 75 75 0.0% 1500 1500 0.0% 18000 17824 1.0%
06 10 75 75 0.0% 1500 1296 13.6% 18000 17573 2.4%
06 11 75 75 0.0% 1500 1422 5.2% 18000 17570 2.4%
06 12 75 75 0.0% 1500 1500 0.0% 18000 18000 0.0%
…
07 06 75 75 0.0% 1500 1500 0.0% 18000 18000 0.0%
…
08 06 75 75 0.0% 1500 1426 4.9% 18000 17545 2.5%
…
09 06 75 75 0.0% 1500 1500 0.0% 18000 17833 0.9%
…
10 06 75 75 0.0% 1500 1278 14.8% 18000 17369 3.5%
…
11 06 75 75 0.0% 1500 1408 6.1% 18000 17481 2.9%
…
12 06 75 75 0.0% 1500 1500 0.0% 18000 18000 0.0%
show cloud monitor dataplane
- 使用show cloud monitor dataplane輸出確定哪些DI網路連線具有降級,並確定虛擬功能卡之間的任何單向降級。
******** show cloud monitor dataplane *******
Tuesday October 24 11:21:46 EDT 2023
Cards 15 Second Interval 5 Minute Interval 60 Minute Interval
Src Dst Miss Hit Pct Miss Hit Pct Miss Hit Pct
--- --- ------ ------ ------ ------ ------ ------ ------ ------ ------
…
06 01 0 150 0.0% 0 3000 0.0% 0 36000 0.0%
…
06 02 0 150 0.0% 0 3000 0.0% 0 36000 0.0%
…
06 03 0 150 0.0% 0 3000 0.0% 0 36000 0.0%
…
06 04 0 150 0.0% 0 3000 0.0% 0 36000 0.0%
…
06 05 1 149 0.7% 0 3001 0.0% 0 36000 0.0%
…
01 06 0 150 0.0% 0 3000 0.0% 0 36000 0.0%
02 06 0 150 0.0% 210 2790 7.0% 1015 34985 2.8%
03 06 31 119 20.7% 540 2460 18.0% 995 35005 2.8%
04 06 34 116 22.7% 554 2446 18.5% 1017 34983 2.8%
05 06 0 150 0.0% 213 2787 7.1% 991 35009 2.8%
07 06 0 150 0.0% 0 3000 0.0% 359 35641 1.0%
08 06 29 121 19.3% 546 2454 18.2% 1009 34991 2.8%
09 06 0 150 0.0% 0 3000 0.0% 0 36000 0.0%
10 06 0 150 0.0% 208 2792 6.9% 992 35008 2.8%
11 06 31 119 20.7% 548 2452 18.3% 993 35007 2.8%
12 06 34 116 22.7% 547 2453 18.2% 1001 34999 2.8%
…
06 07 0 150 0.0% 0 3000 0.0% 0 36000 0.0%
…
06 08 0 150 0.0% 0 3000 0.0% 0 36000 0.0%
…
06 09 0 150 0.0% 0 3000 0.0% 1 35999 0.0%
…
06 10 0 150 0.0% 0 3000 0.0% 0 36000 0.0%
…
06 11 0 150 0.0% 0 3000 0.0% 0 36000 0.0%
…
06 12 0 150 0.0% 0 3000 0.0% 0 36000 0.0%
步驟 3.檢查Userspace KNI丟棄
show iftask stats
- 多次收集show iftask stats輸出,以驗證KNI丟棄在IFTASK userspace應用程式級別(StarOS)中是否沒有增加。
******** show iftask stats *******
Tuesday October 24 11:22:06 EDT 2023
…
CARD 6 STATS
---------------------------------------------------------------------------
Counters SF6 SF6_PPS
---------------------------------------------------------------------------
svc_rx 2587301598 2203
svc_tx 548969428 295
di_rx 2260147059 2258
di_tx 4072038717 3966
__ALL_DROPS__ 0 0
svc_tx_drops 0 0
di_rx_drops 0 0
di_tx_drops 0 0
sw_rss_enq_drops 0 0
kni_thread_drops 0 0
kni_drops 0 0
mcdma_drops 0 0
mux_deliver_hop_drops 0 0
mux_deliver_drops 0 0
mux_xmit_failure_drops 0 0
mc_dma_thread_enq_drops 0 0
sw_tx_egress_enq_drops 0 0
cpeth0_drops 0 0
mcdma_summary_drops 0 0
fragmentation_err 0 0
reassembly_err 0 0
reassembly_ring_enq_err 0 0
__DISCARDS__ 241984 0
__BOND_DISCARDS__ 55282718 142
…
TOTAL STATS
---------------------------------------------------------------------------
Counters TOTAL TOTAL_PPS
---------------------------------------------------------------------------
svc_rx 27964563261 24791
svc_tx 36109966153 30168
di_rx 74133486629 51929
di_tx 73958155063 50897
__ALL_DROPS__ 0 0
svc_tx_drops 0 0
di_rx_drops 0 0
di_tx_drops 0 0
sw_rss_enq_drops 0 0
kni_thread_drops 0 0
kni_drops 0 0
mcdma_drops 0 0
mux_deliver_hop_drops 0 0
mux_deliver_drops 0 0
mux_xmit_failure_drops 0 0
mc_dma_thread_enq_drops 0 0
sw_tx_egress_enq_drops 0 0
cpeth0_drops 0 0
mcdma_summary_drops 0 0
fragmentation_err 0 0
reassembly_err 0 0
reassembly_ring_enq_err 0 0
__DISCARDS__ 2324968 0
__BOND_DISCARDS__ 55635534 149
-----------------------------------------------------------------------------------------------
NDR is 100.0000
CONTINUE_TRAFFIC
-----------------------------------------------------------------------------------------------
步驟 4.檢查硬體驅動程式
在應用層免除責任後,重點關注硬體級別的基礎驅動程式,以解決KNI:記憶體不足錯誤。
由於裸機硬體驅動程式為每個虛擬功能分配一定量的緩衝區,資源爭用問題通常是由硬體級別的驅動程式不匹配或驅動程式缺陷導致的。配置應用程式所需緩衝區的有缺陷的硬體驅動程式並未釋放記憶體。
如果使用的是第三方(非思科)虛擬化軟體和/或硬體,請調查版本和驅動程式是否存在潛在的相容性不匹配或缺陷。
摘要
要確定KNI:記憶體不足錯誤是由應用程式級進程還是由底層硬體驅動程式引起的,請檢查是否存在DI網路降級和userspace KNI丟棄證據。如果存在DI網路降級,而沒有相應的使用者空間KNI降級,則可確定原因是在硬體級別。KNI:硬體層級降級的記憶體不足錯誤表示硬體驅動程式故障。
解除安裝節點並重新載入受影響的應用程式級StarOS虛擬功能所在的主機計算,可以臨時清除基礎計算上的記憶體緩衝區,從而暫時減少錯誤和資料包丟失。但是,這不是一個永久的解決方案! 當故障的硬體驅動程式上再次發生緩衝區溢位狀況時,封包遺失和KNI:記憶體不足錯誤就會再次發生。