메뉴
Amazon Elastic Compute Cloud
User Guide for Linux Instances

ENA(Elastic Network Adapter) 문제 해결

ENA(Elastic Network Adapter)는 운영 체제의 상태를 향상하고 예기치 못한 하드웨어 동작이나 오류로 인한 장기적 중단 가능성을 줄이도록 설계되었습니다. ENA 아키텍처는 디바이스 또는 드라이버 장애가 시스템에 영향을 주지 않도록 최대한 보호합니다. 이 주제에서는 ENA에 대한 문제 해결 정보를 제공합니다.

인스턴스에 연결할 수 없는 경우 연결 문제 해결 섹션에서 시작하십시오.

인스턴스에 연결할 수 있는 경우 이 주제의 이후 섹션에서 다루는 장애 탐지 및 복구 메커니즘을 사용하여 진단 정보를 수집할 수 있습니다.

연결 문제 해결

향상된 네트워킹 기능을 활성화하는 도중 연결이 해제된 경우, 인스턴스의 현재 실행 중인 커널이 ena 모듈과 호환되지 않아 발생한 문제일 수 있습니다. 이 문제는 dkms가 없거나 dkms.conf 파일이 잘못 구성된 특정 커널 버전용 모듈을 설치한 이후에 인스턴스 커널이 업데이트된 경우에 발생할 수 있습니다. 부팅 시 로드되는 인스턴스 커널에서 ena 모듈을 올바르게 설치하지 않는 경우 인스턴스에서 네트워크 어댑터를 인식하지 못하여 인스턴스에 접속할 수 없습니다.

PV 또는 AMI 인스턴스에서 향상된 네트워킹 기능을 활성화하면 인스턴스 접속이 불가능해질 수도 있습니다.

ENA를 사용하여 향상된 네트워킹을 활성화한 이후에 인스턴스에 접속할 수 없는 경우 인스턴스에 대한 enaSupport 속성을 비활성화할 수 있습니다. 그러면 스톡 네트워크 어댑터로 대체하여 사용됩니다.

ENA를 사용하여 향상된 네트워킹을 비활성화하려면(EBS 기반 인스턴스)

  1. 로컬 컴퓨터를 사용하는 경우, Amazon EC2 콘솔을 사용하거나 다음 명령 중 하나를 사용하여 인스턴스를 중지하십시오. stop-instances (AWS CLI), Stop-EC2Instance(Windows PowerShell용 AWS 도구). 인스턴스를 AWS OpsWorks에서 관리할 경우 AWS OpsWorks 콘솔에서 인스턴스를 중지해야 인스턴스 상태가 동기화됩니다.

    중요

    인스턴스 스토어 지원 인스턴스를 사용할 때는 인스턴스를 중지할 수 없습니다. 이 경우, ENA를 사용하여 향상된 네트워킹을 비활성화하려면(인스턴스 스토어 지원 인스턴스) 단계로 넘어갑니다.

  2. 로컬 컴퓨터에서 다음 명령을 사용하여 향상된 네트워크 속성을 비활성화합니다.

  3. 로컬 컴퓨터를 사용하는 경우, Amazon EC2 콘솔을 사용하거나 다음 명령 중 하나를 사용하여 인스턴스를 시작하십시오. start-instances(AWS CLI), Start-EC2Instance(Windows PowerShell용 AWS 도구). 인스턴스를 AWS OpsWorks에서 관리할 경우 AWS OpsWorks 콘솔에서 인스턴스를 시작해야 인스턴스 상태가 동기화됩니다.

  4. (선택 사항) 인스턴스에 연결한 후 VPC의 Linux 인스턴스에서 ENA(Elastic Network Adapter)를 사용하여 향상된 네트워킹 활성화의 단계에 따라 현재 커널 버전으로 ena 모듈을 다시 설치해 보십시오.

ENA를 사용하여 향상된 네트워킹을 비활성화하려면(인스턴스 스토어 지원 인스턴스)

인스턴스 스토어 지원 인스턴스를 사용 중인 경우 인스턴스 스토어 기반 Linux AMI 생성에 설명된 대로 새 AMI를 만듭니다. AMI를 등록할 때 향상된 네트워킹 enaSupport 속성을 비활성화해야 합니다.

  • register-image(AWS CLI)

    Copy
    $ aws ec2 register-image --no-ena-support ...
  • Register-EC2Image (Windows PowerShell용 AWS 도구)

    Copy
    C:\> Register-EC2Image -EnaSupport $false ...

연결 유지 메커니즘

ENA 디바이스는 고정된 속도(일반적으로 1초당 한 번)로 연결 유지 이벤트를 게시합니다. ENA 드라이버는 감시 메커니즘을 구현하여 이러한 연결 유지 메시지가 있는지를 확인합니다. 메시지가 있으면 감시를 다시 강화하고, 그렇지 않으면 드라이버에서 디바이스에 오류가 발생한 것으로 간주하고 다음을 수행합니다.

  • 현재 통계를 syslog에 덤프

  • ENA 디바이스 초기화

  • ENA 드라이버 상태 초기화

위 초기화 절차로 인해 잠시 동안 일부 트래픽 손실이 발생할 수 있지만(TCP 연결을 통해 복구 가능) 사용자에게는 영향을 주지 않아야 합니다.

ENA 디바이스는 연결 유지 알림을 전송하지 않아 디바이스 초기화 절차를 간접적으로 요청할 수도 있습니다(예: 복구할 수 없는 구성을 로드한 이후에 ENA 디바이스의 상태를 알 수 없는 경우).

다음은 초기화 절차에 대한 예시입니다.

[18509.800135] ena 0000:00:07.0 eth1: Keep alive watchdog timeout. // The watchdog process initiates a reset
[18509.815244] ena 0000:00:07.0 eth1: Trigger reset is on		
[18509.825589] ena 0000:00:07.0 eth1: tx_timeout: 0 // The driver logs the current statistics
[18509.834253] ena 0000:00:07.0 eth1: io_suspend: 0
[18509.842674] ena 0000:00:07.0 eth1: io_resume: 0
[18509.850275] ena 0000:00:07.0 eth1: wd_expired: 1
[18509.857855] ena 0000:00:07.0 eth1: interface_up: 1
[18509.865415] ena 0000:00:07.0 eth1: interface_down: 0
[18509.873468] ena 0000:00:07.0 eth1: admin_q_pause: 0
[18509.881075] ena 0000:00:07.0 eth1: queue_0_tx_cnt: 0
[18509.888629] ena 0000:00:07.0 eth1: queue_0_tx_bytes: 0
[18509.895286] ena 0000:00:07.0 eth1: queue_0_tx_queue_stop: 0
.......
........
[18511.280972] ena 0000:00:07.0 eth1: free uncompleted tx skb qid 3 idx 0x7 // At the end of the down process, the driver discards incomplete packets.
[18511.420112] [ENA_COM: ena_com_validate_version] ena device version: 0.10 //The driver begins its up process
[18511.420119] [ENA_COM: ena_com_validate_version] ena controller version: 0.0.1 implementation version 1
[18511.420127] [ENA_COM: ena_com_admin_init] ena_defs : Version:[b9692e8] Build date [Wed Apr  6 09:54:21 IDT 2016]
[18512.252108] ena 0000:00:07.0: Device watchdog is Enabled
[18512.674877] ena 0000:00:07.0: irq 46 for MSI/MSI-X
[18512.674933] ena 0000:00:07.0: irq 47 for MSI/MSI-X
[18512.674990] ena 0000:00:07.0: irq 48 for MSI/MSI-X
[18512.675037] ena 0000:00:07.0: irq 49 for MSI/MSI-X
[18512.675085] ena 0000:00:07.0: irq 50 for MSI/MSI-X
[18512.675141] ena 0000:00:07.0: irq 51 for MSI/MSI-X
[18512.675188] ena 0000:00:07.0: irq 52 for MSI/MSI-X
[18512.675233] ena 0000:00:07.0: irq 53 for MSI/MSI-X
[18512.675279] ena 0000:00:07.0: irq 54 for MSI/MSI-X
[18512.772641] [ENA_COM: ena_com_set_hash_function] Feature 10 isn't supported
[18512.772647] [ENA_COM: ena_com_set_hash_ctrl] Feature 18 isn't supported
[18512.775945] ena 0000:00:07.0: Device reset completed successfully // The reset process is complete

레지스터 읽기 시간 초과

ENA 아키텍처는 MMIO(Memory Mapped I/O) 읽기 작업의 제한된 사용을 제안합니다. ENA 디바이스 드라이버는 초기화 절차 중에만 MMIO 레지스터에 액세스합니다.

dmesg 출력으로 제공되는 드라이버 로그에 읽기 작업 실패가 표시되는 경우 호환되지 않거나 잘못 컴파일된 드라이버, 사용 중인 하드웨어 디바이스 또는 하드웨어 장애가 원인일 수 있습니다.

읽기 작업 실패를 나타내는 자주 끊기는 로그 항목을 문제로 간주해서는 안 됩니다. 이 경우 드라이버에서는 읽기 작업을 다시 시도합니다. 읽기 실패가 포함된 로그 항목이 잇따라 나타날 경우 드라이버 또는 하드웨어 문제를 나타냅니다.

다음은 시간 초과로 인한 읽기 작업 실패를 나타내는 드라이버 로그 항목의 예시입니다.

[ 47.113698] [ENA_COM: ena_com_reg_bar_read32] reading reg failed for timeout. expected: req id[1] offset[88] actual: req id[57006] offset[0] 
[ 47.333715] [ENA_COM: ena_com_reg_bar_read32] reading reg failed for timeout. expected: req id[2] offset[8] actual: req id[57007] offset[0] 
[ 47.346221] [ENA_COM: ena_com_dev_reset] Reg read32 timeout occurred

통계

네트워크 성능이 저하되거나 지연 시간 문제가 발생할 경우 디바이스 통계를 불러온 후 확인해야 합니다. 아래와 같이 ethtool을 사용하여 이러한 통계를 가져올 수 있습니다.

Copy
[ec2-user ~]$ ethtool –S ethN NIC statistics: tx_timeout: 0 io_suspend: 0 io_resume: 0 wd_expired: 0 interface_up: 1 interface_down: 0 admin_q_pause: 0 queue_0_tx_cnt: 4329 queue_0_tx_bytes: 1075749 queue_0_tx_queue_stop: 0 ...

다음은 명령 출력 파라미터입니다.

tx_timeout: N

Netdev 감시가 활성화된 횟수입니다.

io_suspend: N

지원되지 않습니다. 이 값은 항상 0이어야 합니다.

io_resume: N

지원되지 않습니다. 이 값은 항상 0이어야 합니다.

wd_expired: N

드라이버가 이전 3초 동안 연결 유지 이벤트를 수신하지 못한 횟수입니다.

interface_up: N

ENA 인터페이스가 표시된 횟수입니다.

interface_down: N

ENA 인터페이스가 중단된 횟수입니다.

admin_q_pause: N

관리 대기열이 불안정한 상태입니다. 이 값은 항상 0이어야 합니다.

queue_N_tx_cnt: N

대기열 N에 대해 전송된 패킷 수입니다.

queue_N_tx_bytes: N

대기열 N에 대해 전송된 바이트 수입니다.

queue_N_tx_queue_stop: N

대기열 N이 꽉 차서 중지된 횟수입니다.

queue_N_tx_queue_wakeup: N

대기열 N이 중지되었다가 재개된 횟수입니다.

queue_N_tx_dma_mapping_err: N

직접 메모리 액세스 오류 수입니다. 이 값이 0이 아니면 시스템 리소스가 부족한 것입니다.

queue_N_tx_napi_comp: N

napi 핸들러가 대기열 N에 대해 napi_complete을 호출한 횟수입니다.

queue_N_tx_poll: N

napi 핸들러가 대기열 N에 대해 예약된 횟수입니다.

queue_N_tx_doorbells: N

대기열 N에 대한 전송 초인종 수입니다.

queue_N_tx_linearize: N

대기열 N에 대해 SKB 선형화가 시도된 횟수입니다.

queue_N_tx_linearize_failed: N

대기열 N에 대해 SKB 선형화가 실패한 횟수입니다.

queue_N_tx_prepare_ctx_err: N

대기열 N에 대해 ena_com_prepare_tx가 실패한 횟수입니다. 이 값은 항상 0이어야 합니다. 그렇지 않은 경우 드라이버 로그를 참조하십시오.

queue_N_tx_missing_tx_comp: codeN

대기열 N에 대해 완료되지 않은 상태로 남은 패킷 수입니다. 이 값은 항상 0이어야 합니다.

queue_N_tx_bad_req_id: N

대기열 N에 대해 잘못된 req_id입니다. 유효한 req_id는 0, -queue_size, -1입니다.

queue_N_rx_cnt: N

대기열 N에 대해 수신된 패킷 수입니다.

queue_N_rx_bytes: N

대기열 N에 대해 수신된 바이트 수입니다.

queue_N_rx_refil_partial: N

드라이버가 rx 대기열의 빈 부분을 N 대기열에 대한 버퍼로 리필하는 데 실패한 횟수입니다. 이 값이 0이 아니면 메모리 리소스가 부족한 것입니다.

queue_N_rx_bad_csum: N

rx 대기열에 N 대기열에 대한 잘못된 체크섬이 포함된 횟수입니다(rx 체크섬 오프로드가 지원되는 경우에만 해당).

queue_N_rx_page_alloc_fail: N

대기열 N에 대해 페이지 할당이 실패한 횟수입니다. 이 값이 0이 아니면 메모리 리소스가 부족한 것입니다.

queue_N_rx_skb_alloc_fail: N

대기열 N에 대해 SKB 할당이 실패한 횟수입니다. 이 값이 0이 아니면 시스템 리소스가 부족한 것입니다.

queue_N_rx_dma_mapping_err: N

직접 메모리 액세스 오류 수입니다. 이 값이 0이 아니면 시스템 리소스가 부족한 것입니다.

queue_N_rx_bad_desc_num: N

패킷당 버퍼가 너무 많습니다. 이 값이 0이 아니면 매우 작은 버퍼가 사용되는 것입니다.

queue_N_rx_small_copy_len_pkt: N

최적화: 패킷이 sysfs에 의해 설정되는 이 임계값보다 작은 경우 패킷이 스택에 직접 복사되어 새 페이지가 할당되는 것을 방지합니다.

ena_admin_q_aborted_cmd: N

중단된 관리 명령 수입니다. 이러한 상황은 일반적으로 자동 복구 절차 중에 발생합니다.

ena_admin_q_submitted_cmd: N

관리 대기열 초인종 수입니다.

ena_admin_q_completed_cmd: N

관리 대기열 완료 횟수입니다.

ena_admin_q_out_of_space: N

드라이버가 새 관리 명령을 시도했지만 대기열이 꽉 찬 횟수입니다.

ena_admin_q_no_completion: N

드라이버가 명령에 대한 관리 완료를 가져오지 못한 횟수입니다.

syslog의 드라이버 오류 로그

ENA 드라이버는 시스템 부팅 중에 syslog에 메시지를 기록합니다. 문제가 발생한 경우 이 로그를 조사하여 오류를 확인할 수 있습니다. 다음은 시스템 부팅 중에 ENA 드라이버가 syslog에 기록한 정보와 선택 메시지에 대한 일부 주석의 예시입니다.

Jun  3 22:37:46 ip-172-31-2-186 kernel: [  478.416939] [ENA_COM: ena_com_validate_version] ena device version: 0.10
Jun  3 22:37:46 ip-172-31-2-186 kernel: [  478.420915] [ENA_COM: ena_com_validate_version] ena controller version: 0.0.1 implementation version 1
Jun  3 22:37:46 ip-172-31-2-186 kernel: [  479.256831] ena 0000:00:03.0: Device watchdog is Enabled
Jun  3 22:37:46 ip-172-31-2-186 kernel: [  479.672947] ena 0000:00:03.0: creating 8 io queues. queue size: 1024
Jun  3 22:37:46 ip-172-31-2-186 kernel: [  479.680885] [ENA_COM: ena_com_init_interrupt_moderation] Feature 20 isn't supported  // Interrupt moderation is not supported by the device
Jun  3 22:37:46 ip-172-31-2-186 kernel: [  479.691609] [ENA_COM: ena_com_get_feature_ex] Feature 10 isn't supported // RSS HASH function configuration is not supported by the device
Jun  3 22:37:46 ip-172-31-2-186 kernel: [  479.694583] [ENA_COM: ena_com_get_feature_ex] Feature 18 isn't supported //RSS HASH input source configuration is not supported by the device 
Jun  3 22:37:46 ip-172-31-2-186 kernel: [  479.697433] [ENA_COM: ena_com_set_host_attributes] Set host attribute isn't supported
Jun  3 22:37:46 ip-172-31-2-186 kernel: [  479.701064] ena 0000:00:03.0 (unnamed net_device) (uninitialized): Cannot set host attributes
Jun  3 22:37:46 ip-172-31-2-186 kernel: [  479.704917] ena 0000:00:03.0: Elastic Network Adapter (ENA) found at mem f3000000, mac addr 02:8a:3c:1e:13:b5 Queues 8
Jun  3 22:37:46 ip-172-31-2-186 kernel: [  480.805037] EXT4-fs (xvda1): re-mounted. Opts: (null)
Jun  3 22:37:46 ip-172-31-2-186 kernel: [  481.025842] NET: Registered protocol family 10

무시할 수 있는 오류는 무엇입니까?

시스템 오류 로그에 표시되는 다음 경고는 ENA에 대해 무시해도 됩니다.

호스트 속성 설정이 지원되지 않음

호스트 속성은 이 디바이스에 대해 지원되지 않습니다.

rx 대기열에 대해 버퍼를 할당하지 못함

복구할 수 있는 오류이며 오류가 발생된 시점에 메모리 부족 문제가 발생했을 수 있습니다.

기능 X가 지원되지 않음

참조된 함수는 ENA에서 지원되지 않습니다. 가능한 X 값은 다음과 같습니다.

  • 10: RSS 해시 함수 구성은 이 디바이스에 대해 지원되지 않습니다.

  • 12: RSS 간접 테이블 구성은 이 디바이스에 대해 지원되지 않습니다.

  • 18: RSS 해시 입력 구성은 이 디바이스에 대해 지원되지 않습니다.

  • 20: 인터럽트 조절은 이 디바이스에 대해 지원되지 않습니다.

AENQ를 구성하지 못함

ENA가 AENQ 구성을 지원하지 않습니다.

지원되지 않는 AENQ 이벤트를 설정하려고 시도

이 오류는 ENA에서 지원되지 않는 AENQ 이벤트 그룹을 설정하려고 시도했음을 나타냅니다.