평균 사용률이 낮을 때 Amazon EC2 인스턴스가 네트워크 제한을 초과하는 이유는 무엇입니까?

최종 업데이트 날짜: 2022년 8월 4일

평균 사용률이 낮을 때 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스가 네트워크 제한을 초과하는 이유는 무엇입니까?

간략한 설명

Elastic Network Adapter(ENA)를 통해 향상된 네트워킹을 지원하는 인스턴스에서 네트워크 성능 지표를 실시간으로 쿼리할 수 있습니다. 이러한 지표는 마지막 장치 재설정 이후 각 네트워크 인터페이스에서 대기 중이거나 삭제된 누적 패킷 수를 제공합니다. 다음은 ENA 지표 중 일부입니다.

  • bw_in_allowance_exceeded: 인바운드 집계 대역폭이 인스턴스의 최댓값을 초과하여 대기 중이거나 삭제된 패킷 수입니다.
  • bw_out_allowance_exceeded: 아웃바운드 집계 대역폭이 인스턴스의 최댓값을 초과하여 대기 중이거나 삭제된 패킷 수입니다.
  • pps_allowance_exceeded: 양방향 초당 패킷 수(PPS)가 인스턴스의 최댓값을 초과하여 대기 중이거나 삭제된 패킷 수입니다.

네트워크 성능 사양은 인스턴스 유형에 따라 다릅니다. 사양을 보려면 현재 세대 인스턴스를 참조하십시오. 경우에 따라 Amazon CloudWatch에서 볼 수 있는 평균 대역폭 또는 PPS가 낮더라도 대기 또는 삭제가 발생할 수 있습니다. 예를 들어 CloudWatch의 NetworkIn, NetworkOut, NetworkPacketsIn 또는 NetworkPacketsOut 지표에 한도 도달을 암시하지 않는 금액이 표시될 수 있습니다.

해결 방법

마이크로버스트는 이전 징후의 가장 흔한 원인입니다. 마이크로버스트는 수요가 짧게 급증한 후 활동이 적거나 전혀 없는 기간입니다. 이러한 버스트는 일반적으로 초, 밀리초 또는 마이크로초 동안 지속됩니다. 마이크로버스트의 경우 이전 섹션에 나열된 CloudWatch 지표는 이를 반영하기에 충분히 세분화되지 않았습니다.

평균 계산 방법

이전 섹션에 나열된 CloudWatch의 EC2 지표는 1분마다 샘플링됩니다. 이러한 지표은 해당 기간에 전송된 총 바이트 또는 패킷을 캡처합니다. 그런 다음 이러한 샘플이 집계되어 5분 간격으로 CloudWatch에 게시됩니다. 기간의 각 통계는 서로 다른 샘플 값을 반환합니다.

  • Sum는 모든 샘플 값의 합계입니다.
  • SampleCount는 집계된 샘플 수(이 경우 5)입니다.
  • Minimum은 바이트/패킷 수가 가장 낮은 샘플 값입니다.
  • Average는 합계를 SampleCount로 나누어 계산한 평균 샘플 값입니다.
  • Maximum은 바이트/패킷 수가 가장 높은 샘플 값입니다.

평균 스루풋 또는 PPS는 다음 두 가지 방법으로 계산할 수 있습니다.

  • 합계기간(예: 300초)으로 나누면 5분의 단순 평균을 얻을 수 있습니다.
  • 최댓값60초로 나누면 활동이 가장 높은 분 단위의 평균을 구할 수 있습니다.

마이크로버스트가 CloudWatch 지표에 반영되는 방식

다음은 마이크로버스트의 예와 이 마이크로버스트가 CloudWatch에 어떻게 반영되는지를 보여줍니다.

  • 인스턴스의 네트워크 대역폭 성능은 10Gbps(1.25GB/s)입니다.
  • 지정된 샘플(60초)에서 20GB의 아웃바운드 데이터 전송은 사용 가능한 모든 대역폭을 사용하므로 bw_out_allowance_exceeded가 증가합니다. 전송은 약 20초 만에 완료되며 이후에는 더 이상 데이터가 전송되지 않습니다.
  • 인스턴스는 나머지 4개 샘플(240초) 동안 유휴 상태로 유지됩니다.

이 예에서 5분 간격의 평균 처리량은 마이크로버스트 동안의 평균 처리량보다 훨씬 낮습니다.

SUM(NetworkOut) / PERIOD = ((20 GB * 1 sample) + (0 GB * 4 samples)) / 300 seconds = ~0.066 GB/s * 8 bits = ~0.533 Gbps

가장 높은 샘플을 기준으로 처리량을 계산하더라도 평균은 여전히 처리량을 반영하지 않습니다.

MAXIMUM(NetworkOut) / 60 = 20 GB / 60 seconds = ~0.333 GB/s * 8 bits = ~2.667 Gbps

마이크로버스트 모니터링

처리량과 PPS를 보다 세분화된 수준에서 측정하려면 운영 체제(OS) 도구를 사용하여 네트워크 통계를 모니터링합니다. 형성 기간 또는 활동이 많은 기간 동안 네트워크 통계를 더 자주 모니터링합니다.

다음은 OS 도구의 예제입니다.

Linux

  • sar
  • nload
  • iftop
  • iptraf-ng

Windows

  • Performance Monitor

CloudWatch 에이전트를 Linux와 Windows 모두에서 사용하여 이러한 OS 수준의 네트워크 지표를 CloudWatch에 사용자 지정 지표로 게시할 수 있습니다. 이러한 지표는 최소 1초 간격으로 게시할 수 있습니다. 고해상도 지표(기간이 60초 미만인 지표)는 요금이 더 많이 부과된다는 점에 주의하세요. CloudWatch 요금에 대한 자세한 내용은 Amazon CloudWatch 요금을 참조하세요.

ENA에서 제공하는 네트워크 성능 지표를 모니터링하는 것이 가장 좋습니다. 지표를 보려면 드라이버 버전이 2.2.10(Linux) 및 2.2.2(Windows) 이상이어야 합니다. 자세한 내용은 LinuxWindows의 관련 페이지를 참조하십시오.

CloudWatch 에이전트는 ENA 지표를 게시할 수도 있습니다. Linux용 ENA 지표 게시에 대한 지침은 네트워크 성능 지표 수집을 참조하세요. Windows의 경우 Performance Monitor에서 ENA 지표를 사용할 수 있으며 CloudWatch 에이전트는 여기에서 사용 가능한 모든 지표를 게시하도록 구성할 수 있습니다.

마이크로버스트 방지

마이크로버스트를 방지하려면 트래픽이 최대 처리량 또는 패킷 속도를 초과하지 않도록 발신자에게 전달되어야 합니다. 이로 인해 마이크로버스트를 피하기 어렵습니다. 발신자의 트래픽 페이싱에는 일반적으로 애플리케이션 수준 변경이 필요합니다. 이 변경 사항이 구현되는 방식에 따라 발신자에서 트래픽 페이싱에 대한 OS 지원이 사용할 수 있어야 하거나 켜져 있어야 할 수 있습니다. 항상 가능하거나 실용적이지는 않을 수도 있습니다. 단기간에 패킷을 전송하는 연결이 너무 많아서 마이크로버스트가 발생할 수도 있습니다. 이 경우 개별 발신자의 페이싱은 도움이 되지 않습니다.

이러한 이유로 ENA 지표를 모니터링하는 것이 가장 좋습니다. 한도에 자주 도달하거나 이 트래픽 쉐이핑이 애플리케이션에 영향을 미친다는 증거가 있는 경우 다음을 수행합니다.

  • 스케일 업: 더 큰 인스턴스 크기로 이동합니다. 큰 인스턴스는 일반적으로 허용치가 더 높습니다. 네트워크 최적화 인스턴스(예: C5n에서와 같이 'n'이 있음)는 네트워크에 최적화되지 않은 각 인스턴스보다 허용치가 높습니다.
  • 스케일 아웃: 트래픽을 여러 인스턴스로 분산하여 개별 인스턴스에서 트래픽과 경합을 줄입니다.

Linux에서는 위의 옵션 외에도 고급 사용자를 위한 잠재적인 완화 옵션이 있습니다. 이러한 옵션을 단독으로, 또는 조합하여 구현할 수 있습니다. 테스트 환경에서 완화를 벤치마킹하여 워크로드에 부정적인 영향을 주지 않으면서, 트래픽 쉐이핑을 줄이거나 제거하는지 확인하는 것이 가장 좋습니다.

  • SO_MAX_PACING_RATE: 이 소켓 옵션은 애플리케이션에서 setsockopt 시스템 호출에 전달하여 최대 페이싱 속도(초당 바이트 수)를 지정할 수 있습니다. 그런 다음 Linux 커널은 이 소켓에서 트래픽을 전달하여 제한을 초과하지 않도록 합니다. 이 옵션을 사용하려면 다음이 필요합니다.
  • 대기행렬 규칙(qdiscs): qdiscs는 패킷 스케줄링 및 선택적 쉐이핑을 담당합니다. fq 등의 일부 qdisk는 개별 흐름에서 발생하는 트래픽 버스트를 완화하는 데 도움이 됩니다. 자세한 내용은 트래픽 제어(TC) 매뉴얼 페이지를 참조하세요.
  • 피상적 전송(Tx) 대기열: 일부 시나리오에서는 피상적 Tx 대기열이 PPS 쉐이핑을 줄이는 데 도움이 됩니다. 이는 두 가지 방법으로 달성할 수 있습니다.
    • 바이트 대기열 제한(BQL): BQL은 Tx 대기열의 진행 중인 바이트 양을 동적으로 제한합니다. BQL은 Linux 커널과 함께 제공되는 ENA 드라이버 버전('K'로 끝나는 버전)에서 기본적으로 켜져 있습니다. GitHub의 ENA 드라이버 버전('g'로 끝나는 버전)의 경우 BQL은 v2.6.1g부터 사용할 수 있으며 기본적으로 꺼져 있습니다. enable_bql ENA 모듈 파라미터를 사용하여 BQL을 켤 수 있습니다.
    • Tx 대기열 길이 감소: Tx 대기열 길이를 기본값인 1,024패킷에서 더 적은 양(최소 256)으로 줄입니다. ethtool을 사용하여 이 길이를 변경할 수 있습니다.