소개
이 문서에서는 Catalyst 9000 Series 플랫폼의 출력 삭제 문제를 해결하는 방법에 대해 설명합니다.
사전 요구 사항
요구 사항
Catalyst 9000 Series 플랫폼의 QoS(Quality of Service) 문제를 해결하려면 다음을 이해해야 합니다.
- 표준 QoS 개념
- 모듈형 QoS CLI(Command Line Interface)
사용되는 구성 요소
이 문서의 정보는 이 하드웨어 및 소프트웨어 버전을 기반으로 하지만 방법론과 대부분의 명령은 다른 코드의 다른 Catalyst 9000 Series 스위치에 적용할 수 있습니다.
- Cisco Catalyst 9300
- Cisco IOS® XE 16.12.3
이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다. 이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다. 현재 네트워크가 작동 중인 경우 모든 명령의 잠재적인 영향을 미리 숙지하시기 바랍니다.
참고: 다른 Cisco 플랫폼에서 이러한 기능을 활성화하는 데 사용되는 명령은 해당 설정 가이드를 참조하십시오.
배경 정보
기본 QoS 컨피그레이션, 대기열 구조 및 버퍼 설명이 포함된 Catalyst 9000 Series 플랫폼의 QoS에 대한 자세한 설명은 Catalyst 9000 QoS 및 Queueing 백서 권장 릴리스 가이드를 검토하여 플랫폼에 권장되는 최신 소프트웨어를 사용하는지 확인하십시오. 이러한 권장 사항은 소프트웨어가 지원되는지 확인하고 이전 코드에서 알려진 버그를 방지하는 데 도움이 됩니다. 촉매용 권장 릴리스
출력 삭제란?
버퍼 할당에 대한 지식은 버퍼 혼잡으로 인해 출력 드랍이 발생하는 방식을 이해하는 데 도움이 됩니다. 목적지 인터페이스에 출력 속도를 초과하는 패킷 수가 있을 경우 혼잡이 발생합니다. 이러한 패킷은 전송할 수 있을 때까지 버퍼에 저장해야 합니다. 이러한 스위치에는 ASIC당 최대 36MB의 버퍼가 있으며, 이 버퍼는 ASIC의 모든 포트에 공유됩니다. 이그레스 인터페이스는 라인 레이트로 해당 버퍼를 비울 수 있지만 패킷이 더 빠른 속도로 버퍼링되도록 하는 시나리오에서는 혼잡이 발생할 수 있습니다. 트래픽 버스트가 1초의 일부만 지속되는 경우에도 혼잡이 발생할 수 있으며, 해당 버퍼가 완전히 채워지면 트래픽에 레이턴시가 발생하거나 출력이 감소할 수 있습니다.
참고: show interface에 표시되는 출력 삭제 카운터는 기본적으로 바이트 단위로 표시됩니다. 릴리스 16.9.3 이상에서는 이러한 카운터가 기본적으로 패킷입니다.
혼잡 유형
Image 1에서 보는 바와 같이 혼잡에는 두 가지 유형이 있다.
이미지 1. 혼잡 유형
이미지 1에 표시된 두 가지 혼잡 유형은 다음과 같습니다.
- 다대일: 여러 소스 포트에서 동시에 단일 대상으로 트래픽을 전송할 경우 여러 소스에서 수신한 트래픽의 양에 따라 대상 포트가 혼잡해질 수 있습니다.
- 속도 불일치: 속도가 더 높은 포트가 속도가 더 낮은 포트(예: 10Gbps~1Gbps)로 전송되는 경우 패킷이 이그레스 포트에서 빠져나가는 데 시간이 걸려야 하며, 이로 인해 지연 및/또는 패킷 손실이 발생할 수 있습니다.
낮은 처리량으로 인한 혼잡
인터페이스 출력 속도가 최대 인터페이스 용량보다 상당히 낮은 경우에도 트래픽 버스트로 인해 출력이 감소할 수 있습니다. 기본적으로 show interface 명령의 출력 속도는 5분 동안 평균화되어 짧은 버스트를 캡처하는 데 적합하지 않습니다. 이 시나리오에서도 밀리초 동안의 트래픽 버스트로 인해 30초 평균 속도가 증가하지 않는 출력 저하가 발생할 수 있지만, 30초 동안의 평균 속도는 30초 동안 평균하는 것이 가장 좋습니다. 이 문서는 Catalyst 9000 Series 스위치에 표시되는 기타 혼잡 문제를 해결하는 데 사용할 수 있습니다.
버퍼 혼잡 유효성 검사
버퍼 혼잡의 유효성을 검사하는 데 사용되는 두 가지 명령이 있습니다. 첫 번째 명령은 show platform hardware fed switch active qos queue config interface <interface>입니다. 이 명령을 사용하면 이미지 2에 표시된 것처럼 포트의 현재 버퍼 할당을 볼 수 있습니다.
9300#show platform hardware fed switch active qos queue config interface gigabitEthernet 1/0/48
Asic:0 Core:0 DATA Port:47 GPN:48 LinkSpeed:0x1
AFD:Disabled FlatAFD:Disabled QoSMap:0 HW Queues: 376 - 383
DrainFast:Disabled PortSoftStart:2 - 1800
DTS Hardmax Softmax PortSMin GlblSMin PortStEnd
----- -------- -------- -------- -------- ---------
0 1 6 200 7 800 19 475 0 0 3 2400
1 1 5 0 8 1200 19 712 8 300 3 2400
2 1 5 0 6 0 0 0 0 0 3 2400
3 1 5 0 6 0 0 0 0 0 3 2400
4 1 5 0 6 0 0 0 0 0 3 2400
5 1 5 0 6 0 0 0 0 0 3 2400
6 1 5 0 6 0 0 0 0 0 3 2400
7 1 5 0 6 0 0 0 0 0 3 2400
이미지 2. 대기열 버퍼 할당
특히 Hardmax 및 Softmax 열을 보면 대기열에 사용 가능한 버퍼 수가 표시됩니다. 이러한 버퍼가 무엇이며 기본적으로 할당되는 방법에 대한 자세한 내용은 Catalyst 9000 QoS 및 대기열 관리 백서를 참조하십시오.
두 번째 명령은 show platform hardware fed switch active qos queue stats interface <interface>입니다. 이 명령을 사용하면 인터페이스에 대한 대기열별 통계를 볼 수 있습니다. 여기에는 버퍼에 삽입된 바이트 수, 사용 가능한 버퍼 부족으로 인해 삭제된 바이트 수가 포함됩니다.
9300#show platform hardware fed switch active qos queue stats interface Gig 1/0/1
DATA Port:0 Enqueue Counters
---------------------------------------------------------------------------------------------
Q Buffers Enqueue-TH0 Enqueue-TH1 Enqueue-TH2 Qpolicer
(Count) (Bytes) (Bytes) (Bytes) (Bytes)
- ------- -------------------- -------------------- -------------------- --------------------
0 0 0 0 384251797 0
1 0 0 0 488393930284 0
2 0 0 0 0 0
3 0 0 0 0 0
4 0 0 0 0 0
5 0 0 0 0 0
6 0 0 0 0 0
7 0 0 0 0 0
DATA Port:0 Drop Counters
-------------------------------------------------------------------------------------------------------------------------------
Q Drop-TH0 Drop-TH1 Drop-TH2 SBufDrop QebDrop QpolicerDrop
(Bytes) (Bytes) (Bytes) (Bytes) (Bytes) (Bytes)
- -------------------- -------------------- -------------------- -------------------- -------------------- --------------------
0 0 0 0 0 0 0
1 0 0 192308101 0 0 0
2 0 0 0 0 0 0
3 0 0 0 0 0 0
4 0 0 0 0 0 0
5 0 0 0 0 0 0
6 0 0 0 0 0 0
7 0 0 0 0 0 0
이미지 3. 삭제 대기열 버퍼 통계
이미지 3에서 볼 수 있듯이, 대기열 0과 대기열 1은 모두 바이트를 큐에 넣었지만, Drop-TH2 열에서 삭제를 경험하는 것은 대기열 1입니다. 이 정보는 대기열 0 트래픽이 이 혼잡의 영향을 받지 않았음을 나타내며, 혼잡의 원인은 특히 대기열 1 트래픽입니다.
출력 삭제를 확인하기 위한 버퍼 수정
SoftMax 승수
각 대기열이 공유 풀에서 요청할 수 있는 버퍼 수를 늘리려면 구성 qos 대기열-softmax-multiplier <100 - 1200>을 사용하여 SoftMax 임계값을 늘립니다. 최대값은 1200이고 단일 포트 대기열이 마이크로 버스트를 흡수하는 능력을 12의 배수로 증가시킵니다. 이 명령은 포트 대기열이 공유 풀에서 추가 버퍼 단위를 사용할 수 있도록 포트 대기열 임계값을 늘립니다. 이미지 4에서 보여주는 것처럼, 컨피그레이션 및 증가된 버퍼 할당.
9300(config)#qos queue-softmax-multiplier 1200
9300#show platform hardware fed switch active qos queue config interface gigabitEthernet 1/0/48
Asic:0 Core:0 DATA Port:47 GPN:48 LinkSpeed:0x1
AFD:Disabled FlatAFD:Disabled QoSMap:0 HW Queues: 376 - 383
DrainFast:Disabled PortSoftStart:3 - 14400
DTS Hardmax Softmax PortSMin GlblSMin PortStEnd
----- -------- -------- -------- -------- ---------
0 1 6 200 9 9600 2 600 0 0 1 15000
1 1 5 0 10 14400 2 900 1 450 1 15000
2 1 5 0 6 0 0 0 0 0 1 15000
3 1 5 0 6 0 0 0 0 0 1 15000
4 1 5 0 6 0 0 0 0 0 1 15000
5 1 5 0 6 0 0 0 0 0 1 15000
6 1 5 0 6 0 0 0 0 0 1 15000
7 1 5 0 6 0 0 0 0 0 1 15000
이미지 4. SoftMax 승수가 1200인 대기열 구성
이는 출력 삭제를 해결하는 빠른 방법으로 사용되는 일반적인 구성입니다. 이미지 4에서 이 컨피그레이션은 모든 인터페이스에서 우선순위가 없는 모든 대기열에 적용됩니다. 버퍼 할당 자체에서는 모든 포트에서 동시에 마이크로 버스트가 발생하지 않는다고 가정합니다. 마이크로-버스트가 임의의 순간에 발생하는 경우, 공유 버퍼는 이들을 흡수하기 위해 추가적인 버퍼 유닛을 전용할 수 있다.
큐별 버퍼 수정
대기열별 버퍼 수정은 SoftMax 승수를 사용할 수 없는 경우 또는 트래픽 프로필에 맞게 버퍼를 미세 조정하려는 경우에 활용할 수 있습니다. 인터페이스별로 스위치인 대기열 버퍼 할당을 수정하려면 정책 맵을 사용해야 합니다. 대부분의 경우 인터페이스의 현재 정책 맵을 수정하고 클래스별로 버퍼를 변경합니다.
이 예에서 인터페이스 GigabitEthernet1/0/48은 출력 삭제를 경험했습니다. 이미지 5와 같이 이 인터페이스에 적용되는 이그레스 정책 맵입니다.
policy-map MYPOL
class Voice
priority level 1 percent 20
class Video
priority level 2 percent 10
class Control
bandwidth percent 10
class Data
bandwidth percent 5
class class-default
이미지 5. 정책 맵 예
이 정책 맵에는 5개의 클래스 맵이 있으며, 이로 인해 인터페이스에 총 5개의 이그레스 큐가 생성됩니다. 각 클래스에는 우선 순위 수준에 따라 할당되는 기본 버퍼 수가 있습니다.
이미지 6은 현재 버퍼 할당을 표시합니다.
9300#show platform hardware fed switch active qos queue config interface gigabitEthernet 1/0/48
Asic:0 Core:0 DATA Port:47 GPN:48 LinkSpeed:0x1
AFD:Disabled FlatAFD:Disabled QoSMap:0 HW Queues: 376 - 383
DrainFast:Disabled PortSoftStart:3 - 600
DTS Hardmax Softmax PortSMin GlblSMin PortStEnd
----- -------- -------- -------- -------- ---------
0 1 7 100 9 100 0 0 0 0 3 800
1 1 7 100 10 400 19 237 0 0 3 800
2 1 5 0 10 400 19 237 8 100 3 800
3 1 5 0 10 400 19 237 8 100 3 800
4 1 5 0 10 400 19 237 8 100 3 800
5 1 5 0 6 0 0 0 0 0 3 800
6 1 5 0 6 0 0 0 0 0 3 800
7 1 5 0 6 0 0 0 0 0 3 800
이미지 6. 예제 정책을 사용한 대기열 버퍼 구성
이 인터페이스에 출력 중단이 발생했으므로 인터페이스의 대기열 통계를 확인하여 혼잡이 발생한 위치를 확인합니다.
9300#show platform hardware fed switch active qos queue stats interface gigabitEthernet 1/0/48
DATA Port:0 Enqueue Counters
---------------------------------------------------------------------------------------------
Q Buffers Enqueue-TH0 Enqueue-TH1 Enqueue-TH2 Qpolicer
(Count) (Bytes) (Bytes) (Bytes) (Bytes)
- ------- -------------------- -------------------- -------------------- --------------------
0 0 0 0 489094 0
1 0 0 0 4846845 0
2 0 0 0 89498498 0
3 0 0 0 21297827045 0
4 0 0 0 74983184 0
5 0 0 0 0 0
6 0 0 0 0 0
7 0 0 0 0 0
DATA Port:0 Drop Counters
-------------------------------------------------------------------------------------------------------------------------------
Q Drop-TH0 Drop-TH1 Drop-TH2 SBufDrop QebDrop QpolicerDrop
(Bytes) (Bytes) (Bytes) (Bytes) (Bytes) (Bytes)
- -------------------- -------------------- -------------------- -------------------- -------------------- --------------------
0 0 0 0 0 0 0
1 0 0 0 0 0 0
2 0 0 0 0 0 0
3 0 0 3854484 0 0 0
4 0 0 0 0 0 0
5 0 0 0 0 0 0
6 0 0 0 0 0 0
7 0 0 0 0 0 0
이미지 7. 정책 예제와 함께 삭제 대기열 버퍼 통계
이미지 7은 대기열 3에 다른 대기열보다 많은 트래픽이 대기열에 추가되어 있으며, 이 대기열 3에서만 출력 삭제를 경험했음을 보여줍니다. 대기열 번호가 0에서 시작하므로 대기열 3은 네 번째 클래스 맵인 클래스 데이터에 매핑됩니다.
이 대기열의 삭제를 줄이려면 대기열 3에 더 많은 버퍼를 할당합니다. 이 버퍼 할당을 변경하려면 정책 맵에서 queue-buffers ratio <0-100> 컨피그레이션을 사용합니다. 정책의 각 클래스에 구성된 경우 최대 100개를 추가해야 합니다. 이 명령으로 단일 클래스만 구성하는 경우 시스템은 다른 대기열에서 버퍼를 균등하게 빼려고 시도합니다.
이미지 8에서 Data 클래스는 대기열-버퍼 비율 40으로 구성되었습니다.
policy-map MYPOL
class Voice
priority level 1 percent 20
class Video
priority level 2 percent 10
class Control
bandwidth percent 10
class Data
bandwidth percent 5
queue-buffers ratio 40
이미지 8. 수정된 대기열 버퍼가 있는 정책 맵 예
이미지 9에서 Data 클래스에 인터페이스 버퍼의 40%, 총 800개의 버퍼가 있음을 확인할 수 있습니다.
9300#show platform hardware fed switch active qos queue config interface gigabitEthernet 1/0/48
Asic:0 Core:0 DATA Port:47 GPN:48 LinkSpeed:0x1
AFD:Disabled FlatAFD:Disabled QoSMap:0 HW Queues: 376 - 383
DrainFast:Disabled PortSoftStart:3 - 1200
DTS Hardmax Softmax PortSMin GlblSMin PortStEnd
----- -------- -------- -------- -------- ---------
0 1 7 75 9 75 0 0 0 0 3 1600
1 1 7 75 10 300 19 178 0 0 3 1600
2 1 5 0 10 300 19 178 8 75 3 1600
3 1 5 0 7 800 19 475 8 200 3 1600
4 1 5 0 10 300 19 178 8 75 3 1600
5 1 5 0 6 0 0 0 0 0 3 1600
6 1 5 0 6 0 0 0 0 0 3 1600
7 1 5 0 6 0 0 0 0 0 3 1600
이미지 9. 업데이트된 예제 정책이 있는 대기열 버퍼 컨피그레이션
이렇게 하면 다른 대기열의 Softmax 버퍼도 줄어듭니다. 변경 사항이 다른 대기열의 출력 삭제를 초래하지 않도록 하려면 이러한 버퍼를 작은 단위로 변경하는 것이 중요합니다.
변경된 경우 대기열 상태를 확인하고 이 대기열이나 다른 대기열에서 삭제는 계속 증가하는지 확인합니다. 삭제를 계속하는 경우 출력 삭제를 확인할 때까지 대기열 버퍼 컨피그레이션을 추가로 수정합니다.
혼잡 관리를 위한 대체 방법
QoS는 기본적으로 트래픽의 우선 순위를 지정하는 방법이며, 모든 출력 삭제 시나리오에 대한 솔루션은 아닙니다. 대기열 버퍼를 수정해도 모든 출력 삭제를 해결하는 데 충분하지 않은 경우가 있습니다. 이러한 시나리오에서는 여러 가지 다른 방법으로 혼잡을 관리할 수 있습니다.
여기에는 포트 채널 또는 ECMP(Equal Cost Multipath)와 같은 이그레스(egress) 대역폭을 늘리는 방법이 포함되지만, 트래픽 엔지니어링과 같은 더 많은 관련 컨피그레이션이 필요할 수도 있습니다.
- 큐잉 스케줄러를 사용하여 트래픽의 우선 순위를 지정합니다.
대기열 스케줄러는 혼잡을 중지하지 않지만, 혼잡으로 인한 영향으로부터 중요한 트래픽을 보호합니다
- WRED(Weighted Random Early Discard) 또는 WTD(Weighted Tail Drop)와 같은 혼잡 관리 알고리즘을 사용하여 일부 트래픽을 더 일찍 삭제합니다.
- 인그레스의 트래픽을 폴리싱하여 이그레스의 트래픽을 줄입니다.
Wireshark로 출력 삭제 분석
Wireshark는 버퍼 혼잡 및 삭제를 유발하는 트래픽 버스트를 식별하는 데 유용한 툴입니다. 드랍이 발생하는 동안 이그레스 방향으로 인터페이스를 SPAN할 경우 Wireshark는 출력 속도를 그래프로 표시하여 드랍을 트리거한 시점과 트래픽을 확인할 수 있습니다. 이 기능은 낮은 처리량 시나리오에서 출력 삭제를 식별할 때 특히 유용합니다.
I/O 비율 보기
Wireshark를 사용하여 SPAN 캡처를 연 다음 이미지 10에서 설명한 것처럼 Statistics, I/O Graph 순으로 선택합니다.
이미지 10. I/O 그래프 선택
이 옵션을 선택하면 Wireshark는 초당 비트 단위의 트래픽 그래프를 생성합니다. 이미지 11은 출력 삭제를 경험한 인터페이스에 대한 그래프 예를 보여줍니다.
이미지 11. I/O 그래프 비트/밀리초
Image 11 그래프는 인터페이스의 최대 처리량이 80Mbps를 거의 초과하지 않음을 나타냅니다. 기본 그래프 보기는 패킷 삭제를 유발하는 작은 트래픽 버스트를 식별할 수 있을 만큼 세분화되지 않았습니다. 초당 트래픽 속도의 평균입니다. 이 속도가 버퍼 혼잡의 원인이 될 수 있는 방법을 알아보려면 밀리초 단위의 처리량을 고려해 보십시오.
기가비트 인터페이스는 초당 1,000,000,000비트를 전달할 수 있습니다. 밀리초로 변환하면 밀리초당 1,000,000비트(또는 10^6비트)가 됩니다.
인터페이스 속도가 인터페이스의 포워딩 속도를 초과할 경우 스위치에서 이러한 패킷을 버퍼링해야 하므로 혼잡이 발생하고 출력이 중단됩니다.
입출력 속도(밀리초) 보기
Wireshark를 사용하면 입출력 속도를 밀리초 당 비트로 그래프화할 수 있습니다. 이렇게 하려면 Interval(간격)을 1초에서 1ms로 줄인 다음 Reset(재설정)을 클릭하여 그래프를 올바르게 표시합니다. 이 단계는 이미지 12에 나와 있습니다.
이미지 12. 간격을 1ms로 줄이고 그래프 재설정
업데이트된 그래프는 인터페이스의 실제 I/O 속도를 더 정확하게 표시합니다. 속도가 10^6비트/밀리초를 충족하거나 초과할 경우 스위치에서 정체 또는 출력 드랍이 발생합니다. 이미지 13은 출력 삭제를 경험한 인터페이스에 대한 업데이트된 I/O 그래프를 보여줍니다.
이미지 13. I/O 그래프 비트/밀리초
이미지 13은 10^6 임계값을 충족하거나 초과하는 여러 트래픽 피크가 있음을 보여줍니다. 트래픽은 버퍼링 대상이며 이그레스 버퍼 크기를 초과할 경우 삭제됩니다.
참고: SPAN 대상이 1Gbps 인터페이스로 연결된 경우, Wireshark의 I/O 속도는 소스 인터페이스 속도에 관계없이 밀리초 당 10^6비트를 초과할 수 없습니다. 대신 SPAN 대상 인터페이스에서 해당 패킷을 버퍼링하거나 삭제합니다. 최대 처리량에서 I/O 그래프가 고착되거나 평균 트래픽 속도가 더 높은 것으로 나타나는 것이 일반적입니다.