Contents

Introduction

Prerequisites

Requirements

Componentes Utilizados

Visão geral do layout da memória ASR

Alocação de memória no pool lsmpi_io

Utilização de memória

Verificar o uso da memória no IOS-XE

Verificar o uso da memória no IOSd

Verificar a utilização do TCAM em um ASR1K

Verificar a utilização de memória no QFP

Introduction

Este documento descreve como verificar a memória do sistema e solucionar problemas relacionados à memória nos Cisco ASR 1000 Series Aggregation Services Routers (ASR1K).

Prerequisites

Requirements

A Cisco recomenda que você tenha conhecimento básico sobre estes tópicos:

- Software Cisco IOS-XE

- CLI ASR

Note: Você pode precisar de uma licença especial para fazer login no shell do Linux no roteador ASR 1001 Series.

Componentes Utilizados

As informações neste documento são baseadas nestas versões de software e hardware:

- Todas as plataformas ASR1K

- Todas as versões do software Cisco IOS-XE que oferecem suporte à plataforma ASR1K

The information in this document was created from the devices in a specific lab environment. All of the devices used in this document started with a cleared (default) configuration. If your network is live, make sure that you understand the potential impact of any command.

Visão geral do layout da memória ASR

Com a maioria das plataformas de roteadores baseadas em software, a maioria dos processos de software internos é executada na memória do Cisco IOS®. A plataforma ASR1K introduz uma arquitetura de software distribuído que move muitas responsabilidades do sistema operacional (SO) do processo do IOS. O IOS nessa arquitetura, anteriormente responsável por quase todas as operações internas, agora é executado como um dos muitos processos Linux. Isso permite que outros processos Linux compartilhem a responsabilidade pela operação do roteador.

O ASR1K executa o IOS-XE, não o IOS tradicional. No IOS-XE, um componente Linux executa o kernel e o IOS é executado como um daemon, que em seguida é conhecido como IOSd (IOS-Daemon). Isso cria um requisito para que a memória seja dividida entre o kernel do Linux e a instância do IOSd.

A memória dividida entre IOSd e o resto do sistema é fixa na inicialização e não pode ser modificada. Para um sistema de 4 GB, o IOSd é alocado em aproximadamente 2 GB e, para um sistema de 8 GB, o IOSd é alocado em aproximadamente 4 GB (com redundância de software desabilitada).

Como o ASR1K tem uma arquitetura de 64 bits, qualquer ponteiro que esteja em cada estrutura de dados no sistema consome o dobro da quantidade de memória quando comparado às plataformas tradicionais de CPU única (8 bytes em vez de 4 bytes). O endereçamento de 64 bits permite que o IOS supere a limitação de memória endereçável de 2 GB do IOS, o que permite que ele escale para milhões de rotas.

Note: Verifique se há memória suficiente disponível antes de ativar qualquer recurso novo. A Cisco recomenda que você tenha pelo menos 8 GB de DRAM se receber toda a tabela de roteamento do Border Gateway Protocol (BGP) quando a redundância de software estiver habilitada para evitar o esgotamento da memória.

Alocação de memória no pool lsmpi_io

O pool de memória LSMPI (Shared Memory Punt Interface) do Linux é usado para transferir pacotes do processador de encaminhamento para o processador de roteamento. Esse pool de memória é gravado na inicialização do roteador em buffers pré-alocados, ao contrário do pool de processadores, onde o IOS-XE aloca blocos de memória dinamicamente. Na plataforma ASR1K, o pool lsmpi_io tem pouca memória livre   geralmente menos de 1000 bytes â  , o que é normal. A Cisco recomenda que você desative o monitoramento do pool de LSMPI pelos aplicativos de gerenciamento de redes para evitar alarmes falsos.

ASR1000# show memory statistics

Head      Total(b)    Used(b)    Free(b)     Lowest(b)   Largest(b)

Processor  2C073008  1820510884  173985240  1646525644  1614827804  1646234064

lsmpi_io   996481D0  6295088     6294120    968         968         968

Se houver algum problema no caminho LSMPI, o contador de falha de saída de dispositivo parece incrementar nesta saída de comando (alguma saída omitida):

ASR1000-1# show platform software infrastructure lsmpi driver

LSMPI Driver stat ver: 3

Packets:

In: 674572

Out: 259861

Rings:

RX: 2047 free    0    in-use    2048 total

TX: 2047 free    0    in-use    2048 total

RXDONE: 2047 free    0    in-use    2048 total

TXDONE: 2047 free    0    in-use    2048 total

Buffers:

RX: 7721 free    473  in-use    8194 total

Reason for RX drops (sticky):

Ring full        : 0

Ring put failed  : 0

No free buffer   : 0

Receive failed   : 0

Packet too large : 0

Other inst buf   : 0

Consecutive SOPs : 0

No SOP or EOP    : 0

EOP but no SOP   : 0

Particle overrun : 0

Bad particle ins : 0

Bad buf cond     : 0

DS rd req failed : 0

HT rd req failed : 0

Reason for TX drops (sticky):

Bad packet len   : 0

Bad buf len      : 0

Bad ifindex      : 0

No device        : 0

No skbuff        : 0

Device xmit fail : 0

Device xmit rtry : 0

Tx Done ringfull : 0

Bad u->k xlation : 0

No extra skbuff  : 0

<snip>

Utilização de memória

O ASR1K inclui estes elementos funcionais em seu sistema:

- ASR 1000 Series Route Processor (RP)

- Processador de Serviços integrados ASR 1000 Series (ESP)

- ASR 1000 Series 40Gbps SPA Interface Processor (SIP)

Como tal, é necessário monitorar a utilização da memória por cada um desses processadores em um ambiente de produção.

Os processadores de controle executam o software Cisco IOS-XE que consiste em um kernel baseado em Linux e um conjunto comum de programas utilitários no nível do SO, que inclui o Cisco IOS executado como um processo do usuário na placa RP.

Verificar o uso da memória no IOS-XE

Insira o comando show platform software status control-processor brief para monitorar o uso da memória no RP, no ESP e no SIP. O estado do sistema deve ser idêntico, em relação a aspectos como a configuração e o tráfego do recurso, enquanto você compara o uso da memória.

ASR1K# show platform software status control-processor brief

<snip>

Memory (kB)

Slot  Status   Total    Used (Pct)     Free (Pct)     Committed (Pct)

RP0   Healthy  3907744  1835628 (47%)  2072116 (53%)  2614788 (67%)

ESP0  Healthy  2042668  789764 (39%)   1252904 (61%)  3108376 (152%)

SIP0  Healthy  482544   341004 (71%)   141540 (29%)   367956 (76%)

SIP1  Healthy  482544   315484 (65%)   167060 (35%)   312216 (65%)

Note: A memória comprometida é uma estimativa de quanto de RAM você precisa para garantir que o sistema nunca está sem memória (OOM) para esta carga de trabalho. Normalmente, o kernel sobrecarrega a memória. Por exemplo, quando você executa uma malloc de 1 GB, nada realmente acontece. Você só recebe memória real sob demanda quando começa a usar essa memória alocada, e somente o quanto você usa.

Cada processador listado na saída anterior pode relatar o status como Saudável, Aviso ou Crítico, que depende da quantidade de memória livre. Se algum dos processadores exibir o status de Aviso ou Crítico, insira o comando monitor platform software process<slot> para identificar o contribuinte principal.

ASR1K# monitor platform software process ?

0   SPA-Inter-Processor slot 0

1   SPA-Inter-Processor slot 1

F0  Embedded-Service-Processor slot 0

F1  Embedded-Service-Processor slot 1

FP  Embedded-Service-Processor

R0  Route-Processor slot 0

R1  Route-Processor slot 1

RP  Route-Processor

<cr>

Você pode ser solicitado a definir o tipo de terminal antes de executar o comando monitor platform software process:

ASR1K# monitor platform software process r0

Terminal type 'network' unsupported for command

Change the terminal type with the 'terminal terminal-type' command.

O tipo de terminal é definido como rede por padrão. Para definir o tipo de terminal apropriado, insira o comando terminal terminal-type:

ASR1K#terminal-type vt100

Depois que o tipo de terminal correto for configurado, você poderá inserir o comando monitor platform software process (alguma saída omitida):

ASR1000# monitor platform software process r0

top - 00:34:59 up  5:02,  0 users,  load average: 2.43, 1.52, 0.73

Tasks: 136 total,   4 running, 132 sleeping,   0 stopped,   0 zombie

Cpu(s):  0.8%us,  2.3%sy,  0.0%ni, 96.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:   2009852k total,  1811024k used,   198828k free,   135976k buffers

Swap:        0k total,        0k used,        0k free,  1133544k cached

PID   USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

25956 root      20   0  928m 441m 152m R  1.2 22.5   4:21.32 linux_iosd-imag

29074 root      20   0  106m  95m 6388 S  0.0  4.9   0:14.86 smand

24027 root      20   0  114m  61m  55m S  0.0  3.1   0:05.07 fman_rp

25227 root      20   0 27096  13m  12m S  0.0  0.7   0:04.35 imand

23174 root      20   0 33760  11m 9152 S  1.0  0.6   1:58.00 cmand

23489 root      20   0 23988 7372 4952 S  0.2  0.4   0:05.28 emd

24755 root      20   0 19708 6820 4472 S  1.0  0.3   3:39.33 hman

28475 root      20   0 20460 6448 4792 S  0.0  0.3   0:00.26 psd

27957 root      20   0 16688 5668 3300 S  0.0  0.3   0:00.18 plogd

14572 root      20   0  4576 2932 1308 S  0.0  0.1   0:02.37 reflector.sh

<snip>

Note: Para classificar a saída em ordem decrescente de uso da memória, pressione Shift + M.

Verificar o uso da memória no IOSd

Se você observar que o processo linux_iosd-imag contém uma quantidade invulgarmente grande de memória na saída do comando rp ative do software da plataforma de monitor, concentre seus esforços de solução de problemas na instância do IOSd. É provável que um processo específico no thread IOSd não liberte a memória. Solucione problemas relacionados à memória na instância do IOSd da mesma forma que você soluciona problemas em qualquer plataforma de encaminhamento baseada em software, como a série Cisco 2800, 3800 ou 3900.

ASR1K# monitor platform software process rp active

PID   USER   PR  NI VIRT  RES  SHR  S  %CPU  %MEM TIME+    COMMAND

25794 root   20  0  2929m 1.9g 155m R  99.9  38.9 1415:11  linux_iosd-imag

23038 root   20  0  33848 13m  10m  S  5.9   0.4  30:53.87 cmand

9599  root   20  0  2648  1152 884  R  2.0   0.0  0:00.01  top

<snip>

Insira o comando show process memory sorted para identificar o processo do problema:

ASR1000# show process memory sorted

Processor Pool Total: 1733568032  Used: 1261854564  Free: 471713468

lsmpi_io  Pool Total: 6295088     Used: 6294116     Free: 972

PID  TTY  Allocated   Freed       Holding    Getbufs    Retbufs  Process

522  0    1587708188  803356800   724777608  54432      0        BGP Router

234  0    3834576340  2644349464  232401568  286163388  15876    IP RIB Update

0    0    263244344   36307492    215384208  0          0        *Init

Note: Abra um caso do TAC se precisar de assistência para solucionar problemas ou identificar se o uso da memória é legítimo.

Verificar a utilização do TCAM em um ASR1K

A classificação de tráfego é uma das funções mais básicas encontradas em roteadores e switches. Muitos aplicativos e recursos exigem que os dispositivos de infraestrutura ofereçam esses serviços diferenciados para diferentes usuários com base em requisitos de qualidade. O processo de classificação de tráfego deve ser rápido, para que o throughput do dispositivo não seja muito degradado. A plataforma ASR1K usa a 4ª geração de memória endereçável de conteúdo ternário (TCAM4) para essa finalidade.

Para determinar o número total de células TCAM disponíveis na plataforma e o número de entradas livres restantes, insira este comando:

ASR1000# show platform hardware qfp active tcam resource-manager usage

Total TCAM Cell Usage Information

----------------------------------

Name                         : TCAM #0 on CPP #0

Total number of regions      : 3

Total tcam used cell entries : 65528

Total tcam free cell entries : 30422

Threshold status             : below critical limit

Note: A Cisco recomenda que você sempre verifique o status do limite antes de fazer alterações nas listas de acesso ou nas políticas de Qualidade de Serviço (QoS), para que o TCAM tenha células livres suficientes disponíveis para programar as entradas.

Se o processador de encaminhamento for executado com um valor criticamente baixo em células TCAM livres, o ESP poderá gerar registros semelhantes aos mostrados abaixo e poderá travar. Se não houver redundância, isso resulta em interrupção de tráfego.

%CPPTCAMRM-6-TCAM_RSRC_ERR: SIP0: cpp_sp: Allocation failed because of insufficient

TCAM resources in the system.

%CPPOSLIB-3-ERROR_NOTIFY: SIP0: cpp_sp:cpp_sp encountered an error -

Traceback=1#s7f63914d8ef12b8456826243f3b60d7 errmsg:7EFFC525C000+1175

Verificar a utilização de memória no QFP

Além da memória física, também há memória anexada ao ASIC do Quantum Flow Processor (QFP) que é usado para encaminhar estruturas de dados, que inclui dados como FIB (Forwarding Information Base) e políticas de QoS. A quantidade de DRAM disponível para o QFP ASIC é fixa, com intervalos de 256 MB, 512 MB e 1 GB, dependendo do módulo ESP.

Insira o comando show platform hardware qfp ative infrastructure exmem statistics para determinar o uso da memória exmem. A soma da memória para IRAM e DRAM usada dá a memória QFP total que está em uso.

BGL.I.05-ASR1000-1# show platform hardware qfp active infra exmem statistics user

Type: Name: IRAM, CPP: 0

Allocations  Bytes-Alloc  Bytes-Total  User-Name

------------------------------------------------------

1            115200       115712       CPP_FIA

Type: Name: DRAM, CPP: 0

Allocations  Bytes-Alloc  Bytes-Total  User-Name

-----------------------------------------------------

4            1344          4096         P/I

9            270600        276480       CEF

1            1138256       1138688      QM RM

1            4194304       4194304      TCAM

1            65536         65536        Qm 16

O IRAM é a memória de instrução do software QFP. Caso a DRAM seja esgotada, a IRAM disponível pode ser usada. Se o IRAM estiver com memória muito baixa, você poderá ver esta mensagem de erro:

%QFPOOR-4-LOWRSRC_PERCENT: F1: cpp_ha: QFP 0 IRAM resource low - 97 percent depleted

%QFPOOR-4-LOWRSRC_PERCENT: F1: cpp_ha: QFP 0 IRAM resource low - 98 percent depleted

Para determinar o processo que consome a maior parte da memória, insira o comando show platform hardware qfp ative infra exmem statistics user:

ASR1000# show platform hardware qfp active infra exmem statistics user

Type: Name: IRAM, CPP: 0

Allocations  Bytes-Alloc  Bytes-Total  User-Name

----------------------------------------------------

1            115200       115712       CPP_FIA

Type: Name: DRAM, CPP: 0

Allocations  Bytes-Alloc  Bytes-Total  User-Name

----------------------------------------------------

4          1344         4096         P/I

9          270600       276480       CEF

1          1138256      1138688      QM RM

1          4194304      4194304      TCAM

1          65536        65536        Qm 16