소개
이 문서에서는 작업을 수행하기 위해 사용되는 단계에 대해 설명합니다m an ELAM(Embedded Logic AnCisco Nexus 9000 CloudScale ASIC 모듈 시리즈에서 가장 관련성이 높은 출력을 다루고 결과를 해석하는 방법에 대해 설명합니다.
팁: ELAM에 대한 개요는 ELAM 개요 문서를 참조하십시오.
적용 가능한 하드웨어
이 문서에서 다루는 절차는 다음 하드웨어에만 적용됩니다.
N9K-C93180YC-EX |
N9K-C92304QC |
N9K-X9736C-EX |
N9K-C92300YC |
N9K-C93108TC-EX |
N9K-X9788TC-FX |
N9K-X9732C-EX |
N9K-X97284YC-FX |
N9K-X97160YC-EX |
N9K-C93180YC-FX |
N9K-C93180LC-EX |
N9K-C93108TC-FX |
N9K-C92160YC-X |
N9K-C9348GC-FXP |
N9K-C9272Q |
N9K-X9732C-FX |
N9K-C9236C |
N9K-C9336C-FX2 |
N9K-C93240YC-FX2
|
N9K-C93300YC-FX2 |
N9K-C9364C |
N9K-C9332C |
|
|
Nexus Tahoe ASIC ELAM Procedure
토폴로지
1단계 - 포트의 ASIC, 슬라이스 및 SrcId 확인
N9K-C92160YC-X-2# show hardware internal tah interface e1/49
IfIndex: 436232192
DstIndex: 5952
IfType: 26
Asic: 0 <<<<<<<<< Asic: 0
AsicPort: 56
SrcId: 48 <<<<<<<< Slice: 1 <<<<<<<<< PortOnSlice: 24
주의: 각 슬라이스, lu-a2d 등에 대한 글로벌 컨텐트를 유지 관리하려면 ELAM은 하나의 터미널 창에서만 사용해야 합니다.
예를 들어 포트 채널(PO)에는 슬라이스 0에 해당하는 Eth 1/53과 슬라이스 1에 해당하는 Eth 1/54의 두 링크가 있을 수 있습니다. 서로 다른 슬라이스에 대해 두 개의 개별 터미널 창에 ELAM을 동시에 설정하는 것은 후자의 슬라이스(예: 슬라이스 1)가 첫 번째 슬라이스(슬라이스 0)를 덮어쓰므로 도움이 되지 않으며, 결국 두 터미널 창에서 동일한 결과를 얻게 됩니다.
다음을 통해 이 정보를 다시 확인할 수 있습니다.
N9K-C92160YC-X-2# show system internal ethpm info interface e1/49 | i i src
IF_STATIC_INFO: port_name=Ethernet1/49,if_index:0x1a006000,ltl=5952,slot=0, nxos_port=192,dmod=1,dpid=56,
unit=0,queue=65535,xbar_unitbmp=0x0,ns_pid=255,slice_num=1,port_on_slice=24,src_id=48
2단계 - 모듈에 연결
N9K-C92160YC-X-2# attach mod 1
3단계 - ELAM 컨피그레이션 모드로 들어가서 1단계에서 적절한 ASIC를 지정합니다.
module-1# debug platform internal tah elam asic 0
4단계 - ELAM 트리거 구성
참고: 캡처되는 패킷/플로우에 따라 여기에서 지정할 수 있는 여러 옵션이 있습니다
module-1(TAH-elam)# trigger init asic 0 slice 1 lu-a2d 1 in-select 6 out-select 0 use-src-id 48
팁:
- 인그레스 및 이그레스 포트가 동일한 ASIC의 서로 다른 슬라이스에 있는 경우, 패킷이 이그레스 슬라이스의 LUX 블록을 통과하지 않으므로 ELAM을 우회하므로 이그레스 슬라이스의 ELAM이 발신 패킷을 캡처하지 않습니다.
- lu-a2d 0은 트리거가 결과를 기반으로 하는 역방향 ELAM에 사용되고 lu-a2d 1은 트리거가 패킷 특성을 기반으로 하는 ELAM에 사용됩니다
- 인-셀렉트에는 항상 6, 아웃-셀렉트에는 0을 사용합니다
경고: lu-a2d 이후에 0을 사용하지 마십시오. 스위치에 충돌이 발생할 수 있습니다. 자세한 내용은 CSCvd64106을 참조하십시오.
5단계 - SRC 및 DEST IP를 사용하여 ELAM 트리거 설정
이 예에서 소스 IP는 192.0.2.2이고 대상 IP는 192.0.2.1입니다(아래 참조).
module-1(TAH-elam-insel6)# reset
module-1(TAH-elam-insel6)# set outer ipv4 dst_ip 192.0.2.1 src_ip 192.0.2.2
참고: "set" 명령이 ELAM 전체에서 우선하며 예기치 않은 필드에서 트리거되거나 트리거되지 않도록 할 수 있으므로 "reset"을 확인하십시오.
6단계 - ELAM 시작
module-1(TAH-elam-insel6)# start
GBL_C++: [MSG] tahusd_elam_wrapper_init:36:asic type 5 inst 0 slice 1 a_to_d 1 insel 6 outsel 0
GBL_C++: [MSG] Inside tahusd_elam_wrapper_init
GBL_C++: [MSG] tahusd_elam_wrapper_enable:7e:asic type 5 inst 0 slice 1 a_to_d 1
GBL_C++: [MSG] - writing data=0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001FD901C4E2A0000000000000000000002000000000000000000000000000000000000000000000000000000030001
GBL_C++: [MSG] - writing mask=0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001FFFFFFFFFFFE00000000000000000000038000000000000000000000000000000000000000000000000000001FF001
7단계 - ELAM이 트리거되었는지 확인한 후 결과를 검토합니다.
참고: NX-OS 7.0(3)I5(2) 이상부터 ELAM 보고서의 간략한 버전이 아래에 나와 있습니다. 7.0(3)I5(2) 이전 버전을 실행 중인 경우 "ELAM 결과 보기..." 섹션을 계속하십시오.
module-1(TAH-elam-insel6)# report
SUGARBOWL ELAM REPORT SUMMARY
slot - 1, asic - 1, slice - 1
============================
Incoming Interface: Eth1/49
Src Idx : 0xd, Src BD : 10
Outgoing Interface Info: dmod 1, dpid 14
Dst Idx : 0x602, Dst BD : 10
Packet Type: IPv4
Dst MAC address: CC:46:D6:6E:28:DB Src MAC address: 00:FE:C8:0E:27:15
.1q Tag0 VLAN: 10, cos = 0x0
Dst IPv4 address: 192.0.2.1 Src IPv4 address: 192.0.2.2
Ver = 4, DSCP = 0, Don't Fragment = 0
Proto = 1, TTL = 64, More Fragments = 0
Hdr len = 20, Pkt len = 84, Checksum = 0x667f
L4 Protocol : 1
ICMP type : 0
ICMP code : 0
Drop Info:
----------
LUA:
LUB:
LUC:
LUD:
Final Drops:
- "report detail" CLI는 이후 섹션에서 설명하는 보다 자세한 출력을 제공합니다. 이전 릴리스의 기본 출력이기도 합니다.
- Dst Idx는 이그레스 인터페이스의 niv_idx입니다. 이를 확인하거나 "show hardware internal tah interface ex/y(하드웨어 내부 tah 인터페이스 표시)"로 참조할 수 있습니다 | i niv"
- dmod와 dpid는 이그레스(egress) 인터페이스에 해당합니다. 이는 "show system internal ethpm info int ex/y(시스템 내부 ethpm 정보 표시)"로 확인할 수 있습니다. | 나는 dpid"
- 또한 "show interface hardware-mapping"을 사용하여 dmod/dpid를 검증할 수 있습니다.
참고:
1. 패킷이 실제로 삭제되고 있는지를 확인하는 경우에는 "최종 삭제" 필드가 유일한 항목입니다. 즉, LUA/B/C/D와 같은 다른 필드에서 예외가 throw되는 것을 볼 수 있지만, 반드시 패킷이 삭제되는 것을 의미하지는 않습니다. 이 결과를 자세히 검토하십시오(필요에 따라 TAC와 논의).
2. CPU로 전송된 트래픽에는 sup_hit 플래그가 설정됩니다(보고서 세부 정보). | grep sup_hit).
- 'show system internal access-list sup-redirect-stats all'을 사용하고 sup 인덱스와 일치시켜 이유를 디코딩할 수 있습니다
- 올바른 '시스템 라우팅 모드'가 구성되었는지 확인합니다(시스템 라우팅 모드 표시)
- VXLAN 구축 시 고려 사항에 설명된 지침 및 제한 사항에 따라
-
"System Routing Mode: template-vxlan-scale"은 Cisco NX-OS Release 7.0(3)I5(2) 이상에는 적용되지 않습니다.
-
VXLAN BGP EVPN을 Cisco NX-OS Release 7.0(3)I4(x) 또는 NX-OS Release 7.0(3)I5(1)과 함께 사용할 경우 다음 하드웨어 플랫폼에 "System Routing Mode: template-vxlan-scale"이 필요합니다.
-
"System Routing Mode(시스템 라우팅 모드)"를 변경하려면 스위치를 다시 로드해야 합니다.
CPU 펀트를 경험하는 트래픽의 예:
module-1(TAH-elam-insel6)# report
SUGARBOWL ELAM REPORT SUMMARY
=============================
Incoming Interface: Eth1/3
Src Idx : 0x9, Src BD : 23
Outgoing Interface Info: dmod 1, dpid 72
Dst Idx : 0x601, Dst BD : 802
Packet Type: IPv4
Dst MAC address: B0:8B:CF:A3:D0:4B
Src MAC address: 00:10:DB:FF:10:00
.1q Tag0 VLAN: 23, cos = 0x0
Dst IPv4 address: 192.0.2.1
Src IPv4 address: 192.0.2.2
Ver = 4, DSCP = 2, Don't Fragment = 1
Proto = 6, TTL = 49, More Fragments = 0
Hdr len = 20, Pkt len = 60, Checksum = 0x63c3
L4 Protocol : 6
TCP Dst Port : 80
TCP Src Port : 46340
Sup hit: 1, Sup Idx : 2720 <<---- CPU punt, use below CLI to resolve the meaning of Sup Idx
Drop Info:
----------
LUA:
LUB:
LUC:
LUD:
Final Drops:
# show system internal access-list sup-redirect-stats all | grep 2720 2720 copp-system-p-acl-http 63
7.0(3)I5(2) 이전 버전의 NX-OS에 대한 ELAM 결과 보기
+ 여기에 dot1q 헤더가 있습니까?
module-1(TAH-elam-insel6)# report | grep pr_lu_vec_l2v.qtag0 GBL_C++: [MSG] pr_lu_vec_l2v.qtag0_vld: 0x1 << dot1q yes? 0x1 GBL_C++: [MSG] pr_lu_vec_l2v.qtag0_cos: 0x0 GBL_C++: [MSG] pr_lu_vec_l2v.qtag0_de: 0x0 GBL_C++: [MSG] pr_lu_vec_l2v.qtag0_vlan: 0xA << VL 10
+ VLAN 확인:
module-1(TAH-elam-insel6)# report | grep -1 fpx_lookup_vec.lkup.macsakey.key.fid
GBL_C++: [MSG] fpx_lookup_vec.lkup.macsakey.key.vld: 0x1
GBL_C++: [MSG] fpx_lookup_vec.lkup.macsakey.key.fid_type: 0x0
GBL_C++: [MSG] fpx_lookup_vec.lkup.macsakey.key.fid_vld: 0x0
GBL_C++: [MSG] fpx_lookup_vec.lkup.macsakey.key.fid: 0xA << dec 0xa = VL 10
GBL_C++: [MSG] fpx_lookup_vec.lkup.macsakey.key.mac: 0xFEC80E2715
+ SRC MAC 선택(이전 단계에서도 실제로 확인 가능):
module-1(TAH-elam-insel6)# report | grep -i fpx_lookup_vec.lkup.macsakey.key.mac
GBL_C++: [MSG] fpx_lookup_vec.lkup.macsakey.key.mac: 0xFEC80E2715 << 00fe.c80e.2715
GBL_C++: [MSG] fpx_lookup_vec.lkup.macsakey.key.mac: 0xFEC80E2715
GBL_C++: [MSG] fpx_lookup_vec.lkup.macsakey.key.mac: 0xFEC80E2715
GBL_C++: [MSG] fpx_lookup_vec.lkup.macsakey.key.mac: 0xFEC80E2715
GBL_C++: [MSG] fpx_lookup_vec.lkup.macsakey.key.mac: 0xFEC80E2715
+ 새로운 학습 내용입니까?
module-1(TAH-elam-insel6)# report | grep -1 fpx_lookup_vec.sa_notify_info
GBL_C++: [MSG] fpx_lookup_vec.lkup.ptvec.misc1.tcp_flags: 0x0
GBL_C++: [MSG] fpx_lookup_vec.sa_notify_info: 0x5200000C060
GBL_C++: [MSG] fpx_lookup_vec.sa_notify_info.enable: 0x0 << This will be set to 0x1 for learning to happen
GBL_C++: [MSG] fpx_lookup_vec.sa_notify_info.conv_learn_only: 0x0
+ SRC 및 DST IP 확인:
module-1(TAH-elam-insel6)# report | grep vec_l3v.ip.*a
GBL_C++: [MSG] pr_lu_vec_l3v.ip.da: 0x00000000000000000c0000201 << DST IP: 192.0.2.1
GBL_C++: [MSG] pr_lu_vec_l3v.ip.sa: 0x00000000000000000c0000202 << SRC IP: 192.0.2.2
+ 인그레스 SRC_ID 확인:
module-1(TAH-elam-insel6)# report | egrep SRC
GBL_C++: [MSG] SRCID: 0x30
module-1(TAH-elam-insel6)# report | grep vec.ihdr.ieth.hdr.src_idx
GBL_C++: [MSG] lurw_vec.ihdr.ieth.hdr.src_idx: 0xA9 << sh hardware internal tah int e1/49 | i i niv_idx
+ ELAM이 트리거되지 않으면 다음과 같이 표시됩니다.
module-1(TAH-elam-insel6)# report
GBL_C++: [MSG] tahusd_elam_wrapper_report:27d:asic type 5 inst 0 slice 1 a_to_d 1 insel 6 outsel 0
GBL_C++: [MSG] Inside tahusd_elam_wrapper_dav_report
GBL_C++: [MSG] ELAM not yet triggered <<<<<<
VXLAN 캡슐화 ELAM:
VXLAN 패킷은 캡슐화되므로 ELAM은 OUTER 헤더가 아닌 INNER 헤더에서 트리거되어야 합니다. ARP 프레임은 아래 예를 참조하십시오.
module-1# debug platform internal tah elam asic 0
module-1(TAH-elam)# trigger init asic 0 slice 1 in-select 7 out-select 0 use-src-id 48
module-1(TAH-elam-insel7)# reset
module-1(TAH-elam-insel7)# set inner arp source-ip-addr 192.0.2.2 target-ip-addr 192.0.2.1
module-1(TAH-elam-insel7)# start
module-1(TAH-elam-insel7)# report
NX-OS 7.0(3)I7(2) 이후 ELAM 구성
NX-OS 7.0(3)I7(2) 이후, ELAM은 이제 손쉽게 ASIC 또는 슬라이스 번호를 지정하지 않고도 전체적으로 트리거될 수 있습니다. 아래 예를 참조하십시오.
Nexus-9K# debug platform internal tah elam
Nexus-9K(TAH-elam)# trigger init
Nexus-9K(TAH-elam-insel6)# reset
Nexus-9K(TAH-elam-insel6)# set outer ipv4 dst_ip 192.0.2.1 src_ip 192.0.2.2
Nexus-9K(TAH-elam-insel6)# start
Nexus-9K(TAH-elam-insel6)# report