이 문서에서는 RP(Routing Processor)의 버퍼 누락 및 오류에 대해 설명합니다.
이 문서에 대한 특정 요건이 없습니다.
이 문서는 특정 소프트웨어 및 하드웨어 버전으로 한정되지 않습니다.
이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다.이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다.현재 네트워크가 작동 중인 경우, 모든 명령어의 잠재적인 영향을 미리 숙지하시기 바랍니다.
문서 규칙에 대한 자세한 내용은 Cisco 기술 팁 표기 규칙을 참고하십시오.
RP는 프로세서 메모리를 풀로 나눕니다.각 풀에는 동일한 크기의 메모리 블록 수가 포함됩니다.이러한 메모리 블록을 버퍼라고 합니다.
6개의 버퍼 풀이 있습니다.
Small - 104바이트 버퍼
중간 - 600바이트 버퍼
빅—1524바이트 버퍼
VeryBig—4,520바이트 버퍼
Large(대형) - 5024바이트 버퍼
대용량 - 18024바이트 버퍼
예를 들어, 인터페이스 프로세서가 20바이트 패킷을 RP에 전달해야 하는 경우 Small 버퍼에 대해 "묻습니다."인터페이스 프로세서가 500바이트 패킷을 RP에 전달해야 하는 경우 중간 버퍼를 요청하는 등
참고: 인터페이스 프로세서는 특정 크기의 버퍼를 요청해야 합니다.
인터페이스 프로세서가 버퍼를 요청하면 다음과 같이 발생합니다.
요청된 풀 내에 사용 가능한 버퍼가 있으면 버퍼가 허용됩니다.그렇지 않으면 요청이 "miss"를 생성하고 버퍼 알고리즘이 해당 풀에 대해 더 많은 버퍼를 "생성"하려고 시도합니다.
IOS에서 Small 버퍼를 가져오지 못하면 패킷을 삭제하지 않습니다.실패한 카운터를 증가시키고 중간 버퍼인 다음 수준 버퍼로 넘어가서 버퍼를 요청합니다.중간 버퍼를 가져오지 못하면 Big 버퍼인 다음 레벨 버퍼를 요청합니다.이 프로세스는 Huge 버퍼 풀에 도달할 때까지 계속됩니다.Huge 버퍼를 가져오지 못하면 패킷을 삭제합니다.
IBM 기능 세트를 사용할 때 누락은 거의 항상 실패를 생성합니다.
IBM 기능이 프로세스 스위칭될 수 있지만 인터페이스에서 RP로 패킷을 전달하는 버퍼를 가져오는 코드는 인터럽트 레벨에서 실행됩니다.
인터럽트 수준에서 버퍼를 만들 수 없습니다.따라서 miss는 RP에 더 많은 버퍼에 대한 요청을 대기열에 넣습니다.
추가 버퍼를 현장에서 생성할 수 없으므로 버퍼 요청이 실패하고 패킷이 삭제됩니다.
버퍼 실패는 패킷 삭제의 가장 일반적인 이유 중 하나입니다.버퍼 오류로 인해 패킷이 삭제되면 다음과 같이 발생합니다.
버퍼 실패 후 RP에는 특정 풀에 대해 적절한 크기의 버퍼를 더 생성하기 위한 미해결 요청이 있습니다.
RP가 버퍼 만들기 요청을 서비스하는 동안 풀에 추가 오류가 있을 수 있습니다.
추가 버퍼가 필요한 경우 시스템의 메모리 제약 때문에 RP에서 더 많은 버퍼를 생성하지 못할 수도 있습니다.
기본적으로 버퍼 생성 작업은 몇 마이크로초 정도 걸릴 수 있으며, 이 경우 버퍼 부족으로 인해 패킷이 계속 삭제됩니다.
또한 버퍼가 생성되는 대로 빠르게 사용될 경우 RP는 패킷 처리보다 버퍼 생성에 더 많은 시간을 소비할 수 있습니다.
이로 인해 RP가 패킷을 너무 빨리 삭제하여 성능이 저하되고 세션이 손실될 수 있습니다.
다행히 이 문서에 설명되어 있듯이 버퍼 오류 문제는 쉽게 식별하여 해결할 수 있습니다.이 show buffers 명령 출력은 라우터의 버퍼 풀의 현재 상태를 표시합니다.
dspu-7k#show buffers Buffer elements: 500 in free list (500 max allowed) 2370 hits, 0 misses, 0 created Public buffer pools: Small buffers, 104 bytes (total 16, permanent 10): 11 in free list (0 min, 10 max allowed) 1770 hits, 33 misses, 22 trims, 28 created 9 failures (0 no memory) Middle buffers, 600 bytes (total 90, permanent 90): 89 in free list (10 min, 200 max allowed) 590 hits, 0 misses, 0 trims, 0 created 0 failures (0 no memory) Big buffers, 1524 bytes (total 90, permanent 90): 90 in free list (5 min, 300 max allowed) 126 hits, 0 misses, 0 trims, 0 created 0 failures (0 no memory) VeryBig buffers, 4520 bytes (total 10, permanent 10): 10 in free list (0 min, 300 max allowed) 50 hits, 0 misses, 0 trims, 0 created 0 failures (0 no memory) Large buffers, 5024 bytes (total 10, permanent 10): 10 in free list (0 min, 30 max allowed) 0 hits, 0 misses, 0 trims, 0 created 0 failures (0 no memory) Huge buffers, 18024 bytes (total 2, permanent 0): 0 in free list (0 min, 13 max allowed) 2 hits, 2 misses, 0 trims, 2 created 0 failures (0 no memory)
show buffers 출력에서 다음을 수행합니다.
총은 풀에 있는 총 버퍼 수를 식별합니다. 여기에는 사용 및 사용되지 않은 버퍼가 포함됩니다.
영구는 풀에 할당된 영구 버퍼 수를 식별합니다.이러한 버퍼는 항상 풀에 있으며 잘라낼 수 없습니다.
사용 가능한 목록에서 현재 풀에 사용 가능한 버퍼 수를 식별합니다.
Min은 RP가 사용 가능한 목록에 유지하려고 시도할 최소 버퍼 수를 식별합니다.
min 매개 변수는 지정된 시간에 풀의 버퍼 수요를 예측하는 데 사용됩니다.
사용 가능한 목록의 버퍼 수가 최소 값보다 낮으면 RP는 해당 풀에 대해 더 많은 버퍼를 생성하려고 시도합니다.
Max-allowed는 사용 가능한 목록에서 허용되는 최대 버퍼 수를 식별합니다.
max-allowed 매개 변수는 풀이 더 이상 필요하지 않은 버퍼를 독점하지 못하도록 합니다.또한 추가 사용을 위해 이 메모리를 시스템에 다시 사용합니다.
사용 가능한 목록의 버퍼 수가 max-allowed 값보다 큰 경우 RP는 풀에서 버퍼를 트리밍하려고 시도해야 합니다.
적중은 풀에서 요청된 버퍼 수를 식별합니다.적중 카운터는 버퍼에 대한 최대 수요를 충족해야 하는 풀을 결정하는 메커니즘을 제공합니다.
Misses는 버퍼가 요청된 횟수 및 풀 추가 버퍼가 필요한 RP가 탐지된 횟수를 식별합니다.즉, 사용 가능한 목록의 버퍼 수가 최소 수준 아래로 떨어졌습니다.Misses 카운터는 RP가 추가 버퍼를 생성하도록 강제 된 횟수를 나타냅니다.
Trim은 사용 가능한 목록의 버퍼 수가 최대 허용 버퍼 수를 초과할 때 RP가 풀에서 잘린 버퍼 수를 식별합니다.
생성됨은 풀에서 생성된 버퍼 수를 식별합니다.RP는 다음과 같은 상황에서 버퍼를 생성합니다.
사용 가능한 목록의 버퍼 수가 최소 버퍼보다 적을 때까지 버퍼에 대한 수요가 증가한 경우
사용 가능한 목록에 버퍼가 없으므로 누락이 발생합니다.
이전 상황 모두
실패는 IOS에서 Small 버퍼를 가져오지 못한 경우 패킷을 삭제하지 않습니다.실패한 카운터를 증가시키고 중간 버퍼인 다음 수준 버퍼로 넘어가서 버퍼를 요청합니다.중간 버퍼를 가져오지 못하면 Big 버퍼인 다음 레벨 버퍼를 요청합니다.이 프로세스는 Huge 버퍼 풀에 도달할 때까지 계속됩니다.Huge 버퍼를 가져오지 못하면 패킷을 삭제합니다.
메모리 없음은 메모리가 부족하여 추가 버퍼를 생성할 수 없어 발생한 오류 수를 식별합니다.
각 풀의 특성을 검사하여 문제가 발생한 풀(있는 경우)을 확인할 수 있습니다.풀에 다음과 같은 특징이 있는 경우 라우터가 로드를 처리할 준비를 더 잘 할 수 있도록 풀에 대한 매개변수를 조정할 수 있습니다.
실패 수와 증가분을 높은 속도로 생성합니다(적중 비율).
사용 가능한 목록에 버퍼 수가 지속적으로 부족합니다.
실패 수 또는 메모리 증가가 없습니다.
buffers configuration 명령을 사용하면 각 버퍼 풀에 대해 다음 매개변수를 조정할 수 있습니다.
initial - 시스템 다시 로드에서 할당된 임시 버퍼입니다.
max-free—사용 가능한 최대 버퍼 수입니다.
min-free—사용 가능한 최소 버퍼 수입니다.
permanent—영구 버퍼 수입니다.
라우터 다시 로드 후 세션 설정 트래픽의 버스트를 수용하도록 초기 버퍼를 조정합니다.
buffers small initial 250
이러한 버퍼는 결국 "트리밍"되어 시스템으로 반환됩니다.
초기 버퍼는 항상 프로세스 스위칭인 세션 설정을 처리하도록 설계되었습니다.
세션 설정 중에 다른 경로 프로토콜에서 사용하는 고속 스위칭 캐시가 채워집니다.process-switched 버퍼는 더 이상 필요하지 않으며 시스템에 반환될 수 있습니다.
초기 버퍼를 튜닝하는 것이 IBM 기능 집합에 대한 올바른 솔루션이 아닐 수 있습니다. 세션 설정 후 거의 모든 패킷이 프로세스 스위치이며 추가 버퍼링이 필요하기 때문입니다.
참고: IBM 프로세스 전환 기능의 경우 임시 초기 버퍼를 조정하지 않고 영구 버퍼를 조정해야 합니다.
최대 여유 버퍼를 조정하여 값이 영구 버퍼와 같거나 더 큽니다.모든 영구 버퍼가 사용 가능 목록에 있는 경우 RP는 영구 버퍼를 트리밍하지 않아야 합니다.비정규 버스트 중에 생성된 사용되지 않는 버퍼가 시스템 메모리로 반환되도록 하는 데 최대 여유 시간을 사용할 수 있습니다.
buffers small max-free 175 buffers small permanent 125
최소 여유 버퍼를 조정하여 값이 언제든지 필요한 예상 최소 버퍼 수를 나타냅니다.최소 여유 공간을 사용하여 버퍼 부족 조건을 예측하고 최소 버퍼 수를 항상 사용할 수 있도록 할 수 있습니다.
buffers small min-free 50
영구 버퍼를 조정하여 값이 정상 처리에 필요한 예상 버퍼 수를 나타냅니다.
buffers small permanent 125
영구 버퍼는 라우터의 일반적인 버퍼 요구 사항(잦은 버스트 포함)을 수용하는 데 사용됩니다.일반 버퍼 요구 사항을 결정하는 것은 대화형 프로세스로, show buffer 출력에서 지정된 시간에 풀에 사용된 총 버퍼를 표시해야 합니다.영구 버퍼는 필요한 일관된 "총" 버퍼와 관련하여 조정되어야 합니다.영구 버퍼를 조정할 때 생성 감소 및 실패/실패 제거를 중점적으로 고려해야 합니다.
버퍼 할당 문제를 식별하는 데 사용할 수 있는 다른 두 가지 show 명령이 있습니다.
show interface interface-identifier
show source bridge
이 show interfaces interface-identifier 샘플 명령 출력에는 버퍼가 없는 카운터가 포함됩니다.
dspu-7k#show interfaces channel 4/2 Channel4/2 is up, line protocol is up Hardware is cxBus IBM Channel MTU 4472 bytes, BW 98304 Kbit, DLY 100 usec, rely 255/255, load 1/255 Encapsulation CHANNEL, loopback not set, keepalive not set Virtual interface Last input 0:00:04, output 0:00:04, output hang never Last clearing of "show interface" counters never Output queue 0/40, 0 drops; input queue 0/75, 8 drops 5 minute input rate 0 bits/sec, 0 packets/sec 5 minute output rate 0 bits/sec, 0 packets/sec 646 packets input, 27760 bytes, 8 no buffer Received 0 broadcasts, 0 runts, 0 giants 0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort 328 packets output, 16959 bytes, 0 underruns 0 output errors, 0 collisions, 0 interface resets, 0 restarts 0 output buffer failures, 0 output buffers swapped out
show interfaces interface-identifier 명령 출력에서 다음을 수행합니다.
인터페이스가 인바운드 패킷에 대한 버퍼를 가져오지 못하면 no buffer 카운터가 증가합니다.
인터페이스가 인바운드 패킷에 대한 버퍼를 가져오지 못할 경우 no buffer 및 drops(input queue) 카운터가 모두 증가합니다.
show interfaces 출력에서 증가되는 no buffer 카운터는 show buffers 출력에서 증가되는 miss 카운터와 관련이 있습니다.적절한 버퍼 풀을 조정할 수 있습니다.
이 show source-bridge 샘플 명령 출력은 인터페이스에 대해 SRB(source-route bridging)가 구성된 경우 스로틀에 대한 인터페이스 카운터를 포함합니다.
dspu-7k#show source-bridge Local Interfaces: receive transmit srn bn trn r p s n max hops cnt:bytes cnt:bytes drops Ch4/2 666 1 99 * f 7 7 7 652:26020 6:266 0 Global RSRB Parameters: TCP Queue Length maximum: 100 Ring Group 99: This TCP peer: 150.10.20.2 Maximum output TCP queue length, per peer: 100 Peers: state bg lv pkts_rx pkts_tx expl_gn drops TCP TCP 150.10.20.1 open *3 261 266 0 0 0 TCP 150.10.20.2 - *3 0 0 0 0 0 Rings: bn: 1 rn: 888 locvrt ma: 4000.7000.fff1 Buff Ring888 fwd: 0 bn: 1 RN: 666 local ma: 4000.0c48.2e80 Channel4/2 fwd: 261 bn: 1 RN: 88 remote ma: 4000.4000.fff1 TCP 150.10.20.1 fwd: 322 bn: 1 RN: 250 remote ma: 4000.300f.7c09 TCP 150.10.20.1 fwd: 0 Explorers: ------- input ------- ------- output ------- spanning all-rings total spanning all-rings total Ch4/2 0 0 0 0 1 1 Local: fastswitched 0 flushed 0 max Bps 256000 rings inputs bursts throttles output drops Ch4/2 0 0 8 0
show source-bridge 명령 출력에서 다음을 수행합니다.
인터페이스가 인바운드 패킷에 대한 버퍼를 가져오지 못할 경우 는 카운터 증가를 제한합니다.
show interfaces 명령 출력에서 증가되는 throttles 카운터는 show buffers 명령 출력에서 증가되는 miss 카운터와 상호 연관됩니다.적절한 버퍼 풀을 조정할 수 있습니다.