Introdução
Este documento descreve como determinar se o KNI do StarOS: Registros de memória insuficiente são causados por problemas no aplicativo StarOS ou por drivers de hardware.
Background
O módulo Kernel Network Interface (KNI), dentro do processo de Encaminhador Interno DPDK (IFTASK), é um mecanismo que permite que programas de espaço de usuário recebam pacotes diretamente de uma interface de rede, ignorando a rede Linux e a pilha IP Linux completamente.

KNI: Os avisos de limitação de taxa de logs de Memória Insuficiente são produzidos quando há um problema de contenção de recursos afetando o Módulo KNI.
- Os buffers de memória não são limpos no nível bare-metal (hardware), causando uma saturação do buffer.
- Os pools do KNI, a partir dos quais o iftask aloca o buffer de mensagens para esses pacotes, ficam sem espaço.
- A função virtual consulta mais pacotes, mas a função física responde que não tem nada.
- Uma vez que o KNI: A condição de Memória Insuficiente ocorre, a iftask vai para o pool de memória de backup para alocar e processar o pacote posteriormente. Se o pool de backup também ficar sem memória, o sistema descartará os pacotes.
- Como o iftask não pode ler a intermitência de pacotes vindos do kernel, o KNI: Out of Memory log (Log de memória insuficiente) é produzido no StarOS.
Disparadores para KNI: Condição de Memória Insuficiente:
Os possíveis acionadores para a condição de estouro de buffer podem variar, como executar aplicativos SFTP ou SCP ou uma transferência de arquivos muito grande entre cartões CF e SF.
Etapas para investigar
Etapa 1. Observar os sintomas
Etapa 2. Verificar a degradação da integridade da rede DI
Etapa 3. Verificar Quedas KNI no Espaço do Usuário
Etapa 4. Verificar os drivers de hardware
Etapa 1. Observar os sintomas
Correlacione o tempo de KNI: Erros de Memória Insuficiente com outros sintomas, como perdas de pacotes ou degradações da camada de aplicação (falhas no caminho do egtpc).
KNI: Logs de Memória Insuficiente
- Nos Syslogs StarOS, você pode ver logs indicando que a interface de rede kernal está sem memória.
2023-Nov-16+09:18:03.205 [iftask 214701 error] [1/0/9602 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
- Se a memória de backup estiver esgotada, você poderá ver mensagens de erro indicando que a memória do pool de backup também está esgotada.
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)
Nos logs IFTask, encontrados no diretório tmp no shell de depuração, você pode observar o KNI: Erros de memória insuficiente:
Wed Nov 15 17:20:30 2023 PID:7387 KNI: Out of memory, kni port cpbond0, socket_id=0, total=-759247296, iter=25
Falhas de caminho EGTPC
- Picos em falhas de caminho de gtpc para vários peers podem ocorrer com a causa Nenhuma resposta do peer pode ocorrer durante o tempo das perdas de pacotes.
2023-10-23T00:14:33.813+00:00 Nodename evlogd: [local-60sec33.780] [egtpmgr 143137 info] [6/0/12364 egtpmgr_pm.c:905] [context: mme_ctx, contextID: 3] [software internal system critical-info syslog] context: mme_ctx, service : mme_svc_egtp, self addr: , GTP-C path failure for peer , peer session count marked: 0, egtpmgr state SRP_SESS_STATE_ACTIVE
Etapa 2. Verificar a degradação da integridade da rede DI
Localize quais conexões estão sofrendo degradação. Quando vistos continuamente, os percentuais mais altos de queda ou perda nas saídas de integridade da rede DI podem indicar problemas operacionais ou de configuração da rede DI, sobrecarga de tráfego ou problemas de VM ou Host.
show session recovery status verbose
- Use show session recover status verbose para identificar qual placa de função virtual está servindo como placa 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
- Use as saídas "show cloud monitor di-network detail" para identificar quais conexões de rede DI entre placas de função virtuais possuem quedas nos heartbeats.
- Quedas nas pulsações de cartões CF e SF para SF Card 6 são mostradas. As saídas para cartões CF e SF para outros cartões CF e SF não mostram quedas de pulsação.
******** 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
- Use as saídas do show cloud monitor controller para identificar quais conexões de rede DI sofreram degradação.
******** 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
- Use show cloud monitor dataplane para identificar quais conexões de rede DI têm degradação e para identificar qualquer degradação unidirecional entre placas de função virtuais.
******** 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%
Etapa 3. Verificar Quedas KNI no Espaço do Usuário
show iftask stats
- Colete as saídas de show iftask stats várias vezes para verificar se as quedas de KNI não estão aumentando no nível do aplicativo de espaço de usuário (StarOS) de IFTASK.
******** 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
-----------------------------------------------------------------------------------------------
Etapa 4. Verificar os drivers de hardware
Com a camada de aplicação livre de culpabilidade, concentre-se nos drivers subjacentes no nível de hardware para lidar com o KNI: Erros de memória insuficiente.
Como o driver de hardware bare-metal aloca uma certa quantidade de buffer para cada função virtual, os problemas de contenção de recursos são geralmente o resultado de uma incompatibilidade de driver ou drivers defeituosos no nível de hardware. O driver de hardware defeituoso que alocou os buffers necessários para um aplicativo não liberou a memória.
Se um software e/ou hardware de virtualização de terceiros (que não sejam da Cisco) estiver em uso, investigue as versões e os drivers em busca de possíveis incompatibilidades ou defeitos de compatibilidade.
Summary
Para determinar se o KNI: Erros de Memória Insuficiente, causados por processos em nível de aplicativo ou por drivers de hardware subjacentes, verificam evidências de degradação da rede DI e quedas KNI do espaço do usuário. Se a degradação da rede DI existir sem uma degradação KNI de espaço de usuário correspondente, a causa pode ser concluída para ser no nível de hardware. KNI: Erros de Memória Insuficiente com degradação de nível de hardware indicam drivers de hardware com falha.
Um descarregamento do nó e o recarregamento dos computadores host nos quais reside a função virtual StarOS afetada no nível do aplicativo pode limpar temporariamente os buffers de memória no computador subjacente, resultando em uma redução temporária nos erros e nas perdas de pacotes. No entanto, esta não é uma solução permanente! Perdas de pacotes e KNI: Os erros de Memória Insuficiente ocorrem novamente quando a condição de estouro de buffer ocorre no driver de hardware com falha.