EC2 인스턴스에서 ENA 설정의 네트워크 성능 모니터링
EC2 인스턴스에서 ENA 설정의 네트워크 성능 모니터링
ENA(Elastic Network Adapter) 드라이버는 활성화된 인스턴스에서 네트워크 성능 지표를 게시해요. 이 절에서 Linux·Windows 요건, ENA 드라이버 지표, ENA Express 지표, DPDK 및 FreeBSD 지표를 살펴볼게요.
출처: 문서
본문
ENA(Elastic Network Adapter) 드라이버는 활성화된 인스턴스에서 네트워크 성능 지표를 게시해요. 이러한 지표를 사용해 인스턴스 성능 문제를 해결하고, 워크로드에 적합한 인스턴스 크기를 선택하고, 확장 활동을 사전에 계획하고, 애플리케이션이 인스턴스에서 사용 가능한 성능을 극대화하는지 벤치마크할 수 있어요.
Amazon EC2는 인스턴스 크기 전반에 걸쳐 일관된 네트워크 성능을 포함한 고품질 네트워킹 경험을 보장하기 위해 인스턴스 수준에서 네트워크 최댓값을 정의해요. AWS는 각 인스턴스에 대해 다음에 대한 최댓값을 제공해요.
- 대역폭 용량 – 각 EC2 인스턴스는 인스턴스 유형과 크기에 기반해 집계된 인바운드·아웃바운드 트래픽에 대한 최대 대역폭을 가져요. 일부 인스턴스는 평균 대역폭 사용률에 기반해 네트워크 대역폭을 할당하는 네트워크 I/O 크레딧 메커니즘을 사용해요. Amazon EC2는 Direct Connect와 인터넷 트래픽에 대한 최대 대역폭도 가져요. 자세한 내용은 Amazon EC2 instance network bandwidth를 참고하세요.
- 초당 패킷(PPS) 성능 – 각 EC2 인스턴스는 인스턴스 유형과 크기에 기반한 최대 PPS 성능을 가져요.
- 추적된 연결 – 보안 그룹은 반환 패킷이 예상대로 전달되도록 각 설정된 연결을 추적해요. 인스턴스당 추적할 수 있는 최대 연결 수가 있어요. 자세한 내용은 Amazon EC2 security group connection tracking을 참고하세요.
- 링크-로컬 서비스 접근 – Amazon EC2는 Amazon DNS 서비스, Instance Metadata Service, Amazon Time Sync Service 같은 로컬 프록시 서비스로의 트래픽에 대해 네트워크 인터페이스당 최대 PPS를 제공해요.
인스턴스의 네트워크 트래픽이 최댓값을 초과하면 AWS는 최댓값을 초과하는 트래픽을 큐에 넣은 다음 네트워크 패킷을 드롭해 트래픽을 형성(shaping)해요. 네트워크 성능 지표로 트래픽이 최댓값을 초과하는 시점을 모니터링할 수 있어요. 이러한 지표는 네트워크 트래픽에 대한 영향과 가능한 네트워크 성능 문제를 실시간으로 알려줘요.
요건
Linux 인스턴스
- ENA 드라이버 버전 2.2.10 이상을 설치합니다. 설치된 버전을 확인하려면 ethtool 명령을 사용하세요. 다음 예시에서 버전은 최소 요건을 충족해요.
[ec2-user ~]$ ethtool -i eth0 | grep version
version: 2.2.10
ENA 드라이버를 업그레이드하려면 Enhanced networking를 참고하세요.
- 이러한 지표를 Amazon CloudWatch로 가져오려면 CloudWatch 에이전트를 설치합니다. 자세한 내용은 Amazon CloudWatch User Guide의 Collect network performance metrics를 참고하세요.
conntrack_allowance_available지표를 지원하려면 ENA 드라이버 버전 2.8.1 이상을 설치합니다.- 1024의 이그레스 프래그먼트 PPS 제한을 재정의하려면 ENA 드라이버 버전 2.13.3 이상을 설치합니다.
Windows 인스턴스
-
ENA 드라이버 버전 2.2.2 이상을 설치합니다. 설치된 버전을 확인하려면 다음과 같이 디바이스 관리자(Device Manager)를 사용하세요.
-
devmgmt.msc를 실행해 디바이스 관리자를 엽니다. -
Network Adapters를 확장합니다.
-
Amazon Elastic Network Adapter, Properties를 선택합니다.
-
Driver 탭에서 Driver Version을 찾습니다.
ENA 드라이버를 업그레이드하려면 Enhanced networking를 참고하세요.
-
이러한 지표를 Amazon CloudWatch로 가져오려면 CloudWatch 에이전트를 설치합니다. 자세한 내용은 Amazon CloudWatch User Guide의 Collect advanced network metrics를 참고하세요.
ENA 드라이버용 지표
ENA 드라이버는 다음 지표를 인스턴스에 실시간으로 전달해요. 지표는 마지막 드라이버 리셋 이후 각 네트워크 인터페이스에서 큐에 넣거나 드롭된 패킷의 누적 수를 제공해요.
| 지표 | 설명 | 지원 대상 |
|---|---|---|
| bw_in_allowance_exceeded | 인바운드 집계 대역폭이 인스턴스 최댓값을 초과해 큐에 넣거나 드롭된 패킷 수입니다. | 모든 인스턴스 유형 |
| bw_out_allowance_exceeded | 아웃바운드 집계 대역폭이 인스턴스 최댓값을 초과해 큐에 넣거나 드롭된 패킷 수입니다. | 모든 인스턴스 유형 |
| conntrack_allowance_exceeded | 연결 추적이 인스턴스 최댓값을 초과해 새 연결을 설정할 수 없어 드롭된 패킷 수입니다. 이로 인해 인스턴스로 오거나 나가는 트래픽에 패킷 손실이 발생할 수 있어요. | 모든 인스턴스 유형 |
| conntrack_allowance_available | 해당 인스턴스 유형의 추적된 연결 허용량(Connections Tracked)에 도달하기 전에 인스턴스가 설정할 수 있는 추적된 연결 수입니다. | Nitro 기반 인스턴스만 해당 |
| linklocal_allowance_exceeded | 로컬 프록시 서비스로의 트래픽 PPS가 네트워크 인터페이스 최댓값을 초과해 드롭된 패킷 수입니다. 이는 Amazon DNS 서비스, Instance Metadata Service, Amazon Time Sync Service로의 트래픽에 영향을 주지만 커스텀 DNS 리졸버로의 트래픽에는 영향을 주지 않아요. | 모든 인스턴스 유형 |
| pps_allowance_exceeded | 양방향 PPS가 인스턴스 최댓값을 초과해 큐에 넣거나 드롭된 패킷 수입니다. * | 모든 인스턴스 유형 |
- ENA Linux 드라이버 v2.13.3 이상의 프래그먼트 프록시 모드(fragment proxy mode) 설정에 따라 이 제한은 네트워크 인터페이스에 대해 1024 PPS를 초과하는 이그레스 프래그먼트 드롭도 포함할 수 있어요. Linux 드라이버에서 프래그먼트 프록시 모드가 활성화되면 이그레스 프래그먼트 드롭은 보통 적용되는 1024 PPS 제한을 우회하며 표준 PPS 허용량 내에서 계산돼요. 프래그먼트 프록시 모드는 기본적으로 비활성화되어 있어요.
인스턴스의 네트워크 성능 지표 보기
사용하는 절차는 인스턴스의 운영 체제에 따라 달라져요.
지표 데이터를 시각화하기 위해 즐겨 사용하는 도구에 지표를 게시할 수 있어요. 예를 들어 CloudWatch 에이전트를 사용해 지표를 Amazon CloudWatch에 게시할 수 있어요. 에이전트를 사용하면 개별 지표를 선택하고 게시를 제어할 수 있어요.
또한 ethtool을 사용해 다음과 같이 각 네트워크 인터페이스(예: eth0)의 지표를 검색할 수 있어요.
[ec2-user ~]$ ethtool -S eth0
bw_in_allowance_exceeded: 0
bw_out_allowance_exceeded: 0
pps_allowance_exceeded: 0
conntrack_allowance_exceeded: 0
linklocal_allowance_exceeded: 0
conntrack_allowance_available: 136812
Windows 성능 카운터의 모든 소비자로 지표를 볼 수 있어요. 데이터는 EnaPerfCounters 매니페스트에 따라 구문 분석할 수 있어요. 이는 성능 카운터 공급자와 그 카운터셋을 정의하는 XML 파일이에요.
매니페스트 설치
ENA 드라이버 2.2.2 이상을 포함하는 AMI로 인스턴스를 시작했거나 ENA 드라이버 2.2.2 드라이버 패키지의 설치 스크립트를 사용했다면 매니페스트가 이미 설치되어 있어요. 매니페스트를 수동으로 설치하려면 다음 단계를 사용하세요.
- 다음 명령으로 기존 매니페스트를 제거합니다.
unlodctr /m:EnaPerfCounters.man
- 드라이버 설치 패키지에서 매니페스트 파일
EnaPerfCounters.man을%SystemRoot%\System32\drivers에 복사합니다. - 다음 명령으로 새 매니페스트를 설치합니다.
lodctr /m:EnaPerfCounters.man
성능 모니터(Performance Monitor)로 지표 보기
- 성능 모니터를 엽니다.
- Ctrl+N을 눌러 새 카운터를 추가합니다.
- 목록에서 ENA Packets Shaping을 선택합니다.
- 모니터링할 인스턴스를 선택하고 Add를 선택합니다.
- OK를 선택합니다.
ENA Express용 지표
ENA Express는 AWS Scalable Reliable Datagram(SRD) 기술로 구동돼요. SRD는 처리량을 높이고 꼬리 지연 시간(tail latency)을 최소화하기 위해 동적 라우팅을 사용하는 고성능 네트워크 전송 프로토콜이에요. 보내는 인스턴스와 받는 인스턴스 양쪽 모두의 네트워크 인터페이스 연결에 ENA Express를 활성화했다면 ENA Express 지표를 사용해 인스턴스가 SRD 기술이 제공하는 성능 개선을 최대한 활용하도록 보장할 수 있어요. 예를 들어:
- 더 많은 SRD 연결을 설정하기에 충분한 용량이 있는지 리소스를 평가합니다.
- 적격한 발신 패킷이 SRD를 사용하지 못하게 하는 잠재적 문제가 있는 위치를 식별합니다.
- 인스턴스의 발신 트래픽에서 SRD를 사용하는 비율을 계산합니다.
- 인스턴스의 수신 트래픽에서 SRD를 사용하는 비율을 계산합니다.
참고
지표를 생성하려면 드라이버 버전 2.8 이상을 사용하세요.
ENA Express로 필터링된 Linux 인스턴스의 지표 목록을 보려면 네트워크 인터페이스(여기서는 eth0으로 표시)에 대해 다음 ethtool 명령을 실행합니다. ena_srd_mode 지표의 값을 확인하세요.
[ec2-user ~]$ ethtool -S eth0 | grep ena_srd
NIC statistics:
ena_srd_mode: 1
ena_srd_tx_pkts: 0
ena_srd_eligible_tx_pkts: 0
ena_srd_rx_pkts: 0
ena_srd_resource_utilization: 0
다음 지표는 ENA Express가 활성화된 모든 인스턴스에서 사용할 수 있어요.
ena_srd_mode
활성화된 ENA Express 기능을 설명해요. 값은 다음과 같아요.
- 0 = ENA Express 꺼짐, UDP 꺼짐
- 1 = ENA Express 켜짐, UDP 꺼짐
- 2 = ENA Express 꺼짐, UDP 켜짐
참고
이것은 ENA Express가 원래 활성화되어 있고 UDP가 이를 사용하도록 구성된 경우에만 발생해요. 이전 값은 UDP 트래픽에 대해 유지돼요.
- 3 = ENA Express 켜짐, UDP 켜짐
ena_srd_eligible_tx_pkts
다음과 같은 네트워크 패킷 수입니다.
- 보내는 인스턴스 유형과 받는 인스턴스 유형 모두 지원됩니다. 자세한 내용은 Supported instance types for ENA Express 표를 참고하세요.
- 보내는 인스턴스와 받는 인스턴스 모두 ENA Express가 구성되어 있어야 합니다.
- 보내는 인스턴스와 받는 인스턴스가 같은 리전에서 실행되어야 합니다.
- 인스턴스 사이의 네트워크 경로에 미들웨어 상자(middleware boxes)가 포함되지 않아야 합니다. ENA Express는 현재 미들웨어 상자를 지원하지 않아요.
참고
ENA Express 적격성 지표는 소스·대상 요건과 두 엔드포인트 사이의 네트워크를 다룹니다. 적격 패킷은 이미 계산된 후에도 자격이 박탈될 수 있어요. 예를 들어 적격 패킷이 최대 전송 단위(MTU) 제한을 초과하면 표준 ENA 전송으로 폴백하며, 패킷은 여전히 카운터에 적격으로 반영돼요.
ena_srd_tx_pkts
주어진 기간 내에 전송된 SRD 패킷 수입니다.
ena_srd_rx_pkts
주어진 기간 내에 수신된 SRD 패킷 수입니다.
ena_srd_resource_utilization
동시 SRD 연결을 위해 허용된 최대 메모리 사용률 중 인스턴스가 소비한 비율입니다.
패킷 전송이 SRD를 사용하는지 확인하려면 주어진 기간 동안 적격 패킷 수(ena_srd_eligible_tx_pkts 지표)와 전송된 SRD 패킷 수(ena_srd_tx_pkts 지표)를 비교할 수 있어요.
이그레스 트래픽(발신 패킷)
이그레스 트래픽이 예상대로 SRD를 사용하는지 보장하려면 주어진 기간 동안 SRD 적격 패킷 수(ena_srd_eligible_tx_pkts)와 전송된 SRD 패킷 수(ena_srd_tx_pkts)를 비교하세요.
적격 패킷 수와 전송된 SRD 패킷 수 사이의 상당한 차이는 종종 리소스 사용률 문제로 인해 발생해요. 인스턴스에 연결된 네트워크 카드가 최대 리소스를 모두 사용했거나 패킷이 MTU 제한을 초과하면 적격 패킷이 SRD를 통해 전송되지 못하고 표준 ENA 전송으로 폴백해야 해요. 패킷은 라이브 마이그레이션(live migration) 또는 라이브 서버 업데이트 중에도 이 간격에 빠질 수 있어요. 근본 원인을 파악하려면 추가 문제 해결이 필요해요.
참고
적격 패킷 수와 SRD 패킷 수 사이의 가끔 발생하는 사소한 차이는 무시해도 돼요. 예를 들어 인스턴스가 SRD 트래픽을 위해 다른 인스턴스에 연결을 설정할 때 이런 일이 발생할 수 있어요.
주어진 기간 동안 전체 이그레스 트래픽 중 SRD를 사용하는 비율을 알아보려면 전송된 SRD 패킷 수(ena_srd_tx_pkts)와 그 기간 동안 인스턴스에 대해 전송된 총 패킷 수(NetworkPacketOut)를 비교하세요.
인그레스 트래픽(수신 패킷)
인그레스 트래픽 중 SRD를 사용하는 비율을 알아보려면 주어진 기간 동안 수신된 SRD 패킷 수(ena_srd_rx_pkts)와 그 기간 동안 인스턴스에 대해 수신된 총 패킷 수(NetworkPacketIn)를 비교하세요.
리소스 사용률
리소스 사용률은 단일 인스턴스가 주어진 시점에 보유할 수 있는 동시 SRD 연결 수에 기반해요. 리소스 사용률 지표(ena_srd_resource_utilization)는 인스턴스의 현재 사용률을 추적해요. 사용률이 100%에 가까워지면 성능 문제를 볼 수 있을 것으로 예상해요. ENA Express는 SRD에서 표준 ENA 전송으로 폴백하고 드롭된 패킷의 가능성이 증가해요. 높은 리소스 사용률은 네트워크 성능을 개선하기 위해 인스턴스를 확장(scale out)해야 할 때라는 신호예요.
참고
인스턴스의 네트워크 트래픽이 최댓값을 초과하면 AWS는 최댓값을 초과하는 트래픽을 큐에 넣은 다음 네트워크 패킷을 드롭해 트래픽을 형성해요.
지속성
이그레스·인그레스 지표는 인스턴스에서 ENA Express가 활성화된 동안 누적돼요. ENA Express가 비활성화되면 지표 누적이 중지되지만 인스턴스가 계속 실행되는 동안 지속돼요. 인스턴스가 재부팅되거나 종료되거나 네트워크 인터페이스가 인스턴스에서 분리되면 지표가 리셋돼요.
ENA용 DPDK 드라이버의 네트워크 성능 지표
ENA 드라이버 버전 2.2.0 이상은 네트워크 지표 보고를 지원해요. DPDK 20.11에는 ENA 드라이버 2.2.0이 포함되어 있으며 이 기능을 지원하는 최초의 DPDK 버전이에요.
DPDK 드라이버 v25.03 이상은 프래그먼트 프록시 모드를 지원해요. DPDK 드라이버에서 프래그먼트 프록시 모드가 활성화되면 이그레스 프래그먼트 드롭은 보통 적용되는 1024 PPS 제한을 우회하며 표준 PPS 허용량 내에서 계산돼요. 프래그먼트 프록시 모드는 기본적으로 비활성화되어 있어요.
예제 애플리케이션으로 DPDK 통계를 볼 수 있어요. 예제 애플리케이션의 대화형 버전을 시작하려면 다음 명령을 실행하세요.
./app/dpdk-testpmd -- -i
이 대화형 세션에서 포트의 확장 통계를 검색하는 명령을 입력할 수 있어요. 다음 예제 명령은 포트 0의 통계를 검색합니다.
show port xstats 0
다음은 DPDK 예제 애플리케이션의 대화형 세션 예시입니다.
[[email protected] build]# ./app/dpdk-testpmd -- -i
EAL: Detected 4 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: Probing VFIO support...
EAL: Invalid NUMA socket, default to 0
EAL: Invalid NUMA socket, default to 0
EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0
(socket 0)
EAL: No legacy callbacks, legacy socket not created
Interactive-mode selected
Port 0: link state change event
testpmd: create a new mbuf pool <mb_pool_0>: n=171456,
size=2176, socket=0
testpmd: preferred mempool ops selected: ring_mp_mc
Warning! port-topology=paired and odd forward ports number, the
last port will pair with itself.
Configuring Port 0 (socket 0)
Port 0: 02:C7:17:A2:60:B1
Checking link statuses...
Done
Error during enabling promiscuous mode for port 0: Operation
not supported - ignore
testpmd> show port xstats 0
###### NIC extended statistics for port 0
rx_good_packets: 0
tx_good_packets: 0
rx_good_bytes: 0
tx_good_bytes: 0
rx_missed_errors: 0
rx_errors: 0
tx_errors: 0
rx_mbuf_allocation_errors: 0
rx_q0_packets: 0
rx_q0_bytes: 0
rx_q0_errors: 0
tx_q0_packets: 0
tx_q0_bytes: 0
wd_expired: 0
dev_start: 1
dev_stop: 0
tx_drops: 0
bw_in_allowance_exceeded: 0
bw_out_allowance_exceeded: 0
pps_allowance_exceeded: 0
conntrack_allowance_exceeded: 0
linklocal_allowance_exceeded: 0
rx_q0_cnt: 0
rx_q0_bytes: 0
rx_q0_refill_partial: 0
rx_q0_bad_csum: 0
rx_q0_mbuf_alloc_fail: 0
rx_q0_bad_desc_num: 0
rx_q0_bad_req_id: 0
tx_q0_cnt: 0
tx_q0_bytes: 0
tx_q0_prepare_ctx_err: 0
tx_q0_linearize: 0
tx_q0_linearize_failed: 0
tx_q0_tx_poll: 0
tx_q0_doorbells: 0
tx_q0_bad_req_id: 0
tx_q0_available_desc: 1023
testpmd>
예제 애플리케이션과 이를 사용해 확장 통계를 검색하는 방법에 대한 자세한 내용은 DPDK 문서의 Testpmd Application User Guide를 참고하세요.
FreeBSD를 실행하는 인스턴스의 지표
버전 2.3.0부터 ENA FreeBSD 드라이버는 FreeBSD를 실행하는 인스턴스에서 네트워크 성능 지표 수집을 지원해요. FreeBSD 지표 수집을 활성화하려면 다음 명령을 입력하고 interval을 1에서 3600 사이의 값으로 설정하세요. 이는 FreeBSD 지표를 수집할 빈도(초)를 지정해요.
sysctl dev.ena.network_interface.eni_metrics.sample_interval=interval
예를 들어 다음 명령은 드라이버가 네트워크 인터페이스 1에서 10초마다 FreeBSD 지표를 수집하도록 설정해요.
sysctl dev.ena.1.eni_metrics.sample_interval=10
FreeBSD 지표 수집을 끄려면 앞선 명령을 실행하고 interval로 0을 지정할 수 있어요.
FreeBSD 지표 수집을 활성화한 후에는 다음 명령을 실행해 수집된 최신 지표 세트를 검색할 수 있어요.
sysctl dev.ena.network_interface.eni_metrics