Linux에서 ENA 커널 드라이버 문제 해결 - Amazon Elastic Compute Cloud

Linux에서 ENA 커널 드라이버 문제 해결

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

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

6세대 인스턴스 유형으로 마이그레이션한 후 성능 저하가 발생하는 경우 지식 센터의 최대 네트워크 성능을 얻으려면 EC2 인스턴스를 6세대 인스턴스로 마이그레이션하기 전에 어떤 작업이 필요한가요?를 참조하세요.

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

연결 문제 해결

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

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

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

ENA를 사용하여 향상된 네트워킹을 비활성화하려면(EBS 기반 인스턴스)
  1. 로컬 컴퓨터에서 Amazon EC2 콘솔을 사용하거나 stop-instances(AWS CLI) 또는 Stop-EC2Instance(AWS Tools for Windows PowerShell) 명령 중 하나를 사용하여 인스턴스를 중지합니다. 인스턴스를 AWS OpsWorks에서 관리할 경우 AWS OpsWorks 콘솔에서 인스턴스를 중지해야 인스턴스 상태가 동기화됩니다.

    작은 정보

    인스턴스 스토어 지원 인스턴스를 사용할 때는 인스턴스를 중지할 수 없습니다. 대신, ENA(인스턴스 스토어 지원 인스턴스)를 사용하여 향상된 네트워킹을 비활성화하려면으로 이동하세요.

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

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

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

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

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

  • register-image(AWS CLI)

    $ C:\> aws ec2 register-image --no-ena-support ...
  • Register-EC2Image(AWS Tools for Windows PowerShell)

    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

Statistics

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

[ec2-user ~]$ ethtool -S ethN NIC statistics: tx_timeout: 0 suspend: 0 resume: 0 wd_expired: 0 interface_up: 1 interface_down: 0 admin_q_pause: 0 bw_in_allowance_exceeded: 0 bw_out_allowance_exceeded: 0 pps_allowance_exceeded: 0 conntrack_allowance_available: 450878 conntrack_allowance_exceeded: 0 linklocal_allowance_exceeded: 0 queue_0_tx_cnt: 4329 queue_0_tx_bytes: 1075749 queue_0_tx_queue_stop: 0 ...

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

tx_timeout: N

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

suspend: N

드라이버가 일시 중지 작업을 수행한 횟수입니다.

resume: N

드라이버가 다시 시작 작업을 수행한 횟수입니다.

wd_expired: N

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

interface_up: N

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

interface_down: N

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

admin_q_pause: N

실행 중인 상태의 관리 대기열을 찾지 못한 횟수입니다.

bw_in_allowance_exceeded: N

인바운드 집계 대역폭이 인스턴스의 최대값을 초과하여 대기열에 추가되거나 손실된 패킷 수입니다.

bw_out_allowance_exceeded: N

아웃바운드 집계 대역폭이 인스턴스의 최대값을 초과하여 대기열에 추가되거나 손실된 패킷 수입니다.

pps_allowance_exceeded: N

양방향 PPS가 인스턴스의 최대값을 초과하여 대기열에 추가되거나 손실된 패킷 수입니다. 이 한도에는 ENI당 1,024PPS를 초과하는 Egress Fragment 드롭도 포함됩니다.

conntrack_allowance_available: N

해당 인스턴스 유형의 연결 추적 허용량에 도달하기 전에 인스턴스에서 설정할 수 있는 추적된 연결 수입니다. Nitro 기반 인스턴스에 대해서만 사용 가능합니다. FreeBSD 인스턴스 또는 DPDK 환경에서는 지원되지 않습니다.

conntrack_allowance_exceeded: N

연결 추적에서 인스턴스의 최대값이 초과되어 새 연결을 설정하지 못했기 때문에 손실된 패킷 수입니다. 이로 인해 인스턴스의 수신 또는 송신 트래픽에 대한 패킷 손실이 발생할 수 있습니다.

linklocal_allowance_exceeded: N

로컬 프록시 서비스에 대한 트래픽의 PPS가 네트워크 인터페이스의 최대값을 초과하여 손실된 패킷 수입니다. 이는 DNS 서비스, Instance Metadata Service 및 Amazon Time Sync Service에 대한 트래픽에 영향을 미칩니다.

queue_N_tx_cnt: N

이 대기열의 전송된 패킷 수입니다.

queue_N_tx_bytes: 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_linearize: N

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

queue_N_tx_linearize_failed: N

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

queue_N_tx_napi_comp: N

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

queue_N_tx_tx_poll: N

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

queue_N_tx_doorbells: N

이 대기열의 전송 도어벨 수입니다.

queue_N_tx_prepare_ctx_err: N

이 대기열에 대해 ena_com_prepare_tx가 실패한 횟수입니다.

queue_N_tx_bad_req_id: N

이 대기열에 유효하지 않은 req_id입니다. 유효한 req_id는 0, -queue_size, -1입니다.

queue_N_tx_llq_buffer_copy: N

헤더 크기가 이 대기열의 llq 항목보다 큰 패킷 수입니다.

queue_N_tx_missed_tx: N

이 대기열에 대해 완료되지 않은 상태로 남은 패킷 수입니다.

queue_N_tx_unmask_interrupt: N

이 대기열에 대해 tx 인터럽트가 마스크되지 않은 횟수입니다.

queue_N_rx_cnt: N

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

queue_N_rx_bytes: N

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

queue_N_rx_rx_copybreak_pkt: N

rx 대기열이 이 대기열의 rx_copybreak 패킷 크기보다 작은 패킷을 수신한 횟수입니다.

queue_N_rx_csum_good: N

체크섬이 확인되었고 이 대기열에 대해 올바른 패킷을 rx 대기열이 수신한 횟수입니다.

queue_N_rx_refil_partial: N

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

queue_N_rx_bad_csum: N

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

queue_N_rx_page_alloc_fail: N

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

queue_N_rx_skb_alloc_fail: N

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

queue_N_rx_dma_mapping_err: N

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

queue_N_rx_bad_desc_num: N

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

queue_N_rx_bad_req_id: N

이 대기열의 req_id가 유효하지 않습니다. 유효한 req_id는 [0, queue_size - 1 ]입니다.

queue_N_rx_empty_rx_ring: N

이 대기열에 대해 rx 대기열이 빈 횟수입니다.

queue_N_rx_csum_unchecked: N

이 대기열에 대해 체크섬이 확인되지 않은 패킷을 rx 대기열이 받은 횟수입니다.

queue_N_rx_xdp_aborted: N

XDP 패킷이 XDP_ABORT로 분류된 횟수입니다.

queue_N_rx_xdp_drop: N

XDP 패킷이 XDP_DROP으로 분류된 횟수입니다.

queue_N_rx_xdp_pass: N

XDP 패킷이 XDP_PASS로 분류된 횟수입니다.

queue_N_rx_xdp_tx: N

XDP 패킷이 XDP_TX로 분류된 횟수입니다.

queue_N_rx_xdp_invalid: N

패킷에 대한 XDP 반환 코드가 올바르지 않았던 횟수입니다.

queue_N_rx_xdp_redirect: N

XDP 패킷이 XDP_REDIRECT로 분류된 횟수입니다.

queue_N_xdp_tx_cnt: N

이 대기열의 전송된 패킷 수입니다.

queue_N_xdp_tx_bytes: N

이 대기열의 전송된 바이트 수입니다.

queue_N_xdp_tx_queue_stop: N

이 대기열이 가득 차서 중지된 횟수입니다.

queue_N_xdp_tx_queue_wakeup: N

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

queue_N_xdp_tx_dma_mapping_err: N

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

queue_N_xdp_tx_linearize: N

이 대기열에 대해 XDP 버퍼 선형화가 시도된 횟수입니다.

queue_N_xdp_tx_linearize_failed: N

이 대기열에 대해 XDP 버퍼 선형화가 실패한 횟수입니다.

queue_N_xdp_tx_napi_comp: N

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

queue_N_xdp_tx_tx_poll: N

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

queue_N_xdp_tx_doorbells: N

이 대기열의 전송 도어벨 수입니다.

queue_N_xdp_tx_prepare_ctx_err: N

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

queue_N_xdp_tx_bad_req_id: N

이 대기열의 req_id가 유효하지 않습니다. 유효한 req_id는 [0, queue_size - 1 ]입니다.

queue_N_xdp_tx_llq_buffer_copy: N

이 대기열에 대해 llq 버퍼 복사를 사용하여 헤더를 복사한 패킷 수입니다.

queue_N_xdp_tx_missed_tx: N

tx 대기열 항목이 이 대기열의 완료 제한 시간을 놓친 횟수입니다.

queue_N_xdp_tx_unmask_interrupt: N

이 대기열에 대해 tx 인터럽트가 마스크되지 않은 횟수입니다.

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: 인터럽트 조절은 이 디바이스에 대해 지원되지 않습니다.

  • 27: ENA(Elastic Network Adapter) 드라이버가 snmpd로부터의 이더넷 기능 폴링을 지원하지 않습니다.

AENQ를 구성하지 못함

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

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

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

최적이 아닌 구성 알림

ENA 디바이스는 드라이버에서 변경할 수 있는 최적이 아닌 구성 설정을 탐지합니다. 디바이스는 ENA 드라이버에 알리고 콘솔에 경고를 기록합니다. 다음 예는 경고 메시지의 형식을 보여줍니다.

Sub-optimal configuration notification code: 1. Refer to AWS ENA documentation for additional details and mitigation options.

다음 목록은 최적이 아닌 구성 결과에 대한 알림 코드 세부 정보와 권장 조치를 보여줍니다.

  • 코드 1: 넓은 LLQ 구성을 갖춘 ENA Express는 권장되지 않습니다

    ENA Express ENI는 넓은 LLQ로 구성되어 있습니다. 해당 구성은 최적이 아니며 ENA Express의 성능에 영향을 미칠 수 있습니다. ENA Express ENI를 사용할 때는 다음과 같이 넓은 LLQ 설정을 비활성화하는 것이 좋습니다.

    sudo rmmod ena && sudo modprobe ena force_large_llq_header=0

    ENA Express의 최적 구성에 대한 자세한 내용은 ENA Express로 EC2 인스턴스 간 네트워크 성능 향상을 참조하세요.

  • 코드 2: Tx 대기열 깊이가 최적이 아닌 ENA Express ENI는 권장되지 않음

    ENA Express ENI가 최적이 아닌 Tx 대기열 깊이로 구성되어 있습니다. 해당 구성은 ENA Express의 성능에 영향을 미칠 수 있습니다. ENA Express ENI를 사용하는 경우 다음과 같이 모든 Tx 대기열을 네트워크 인터페이스의 최댓값으로 확장하는 것이 좋습니다.

    다음 ethtool 명령을 실행하여 LLQ 크기를 조정할 수 있습니다. 넓은 LLQ를 제어, 쿼리 및 활성화하는 방법에 대한 자세한 내용은 Amazon Drivers GitHub 리포지토리의 ENA 설명서에서 Linux 커널 드라이버에 대한 Large Low-Latency Queue (Large LLQ) 주제를 참조하세요.

    ethtool -g interface

    최대 깊이로 Tx 대기열 설정:

    ethtool -G interface tx depth

    ENA Express의 최적 구성에 대한 자세한 내용은 ENA Express로 EC2 인스턴스 간 네트워크 성능 향상을 참조하세요.

  • 코드 3: 일반 LLQ 크기 및 Tx 패킷 트래픽을 사용하는 ENA에서 헤더 지원 최대 크기를 초과함

    기본적으로 ENA LLQ는 Tx 패킷 헤더 크기를 최대 96바이트까지 지원합니다. 패킷 헤더 크기가 96바이트보다 크면 패킷이 삭제됩니다. 이 문제를 완화하려면 지원되는 Tx 패킷 헤더 크기를 최대 224바이트로 늘리는 넓은 LLQ를 활성화하는 것이 좋습니다.

    하지만 넓은 LLQ를 활성화하면 최대 Tx 링 크기가 1,000개 항목에서 512개 항목으로 줄어듭니다. 넓은 LLQ는 모든 Nitro v4 이상의 인스턴스 유형에서 기본적으로 활성화됩니다.

    • Nitro v4 인스턴스 유형에서 기본 최대 넓은 LLQ Tx 링 크기는 512개 항목이며, 변경할 수 없습니다.

    • Nitro v5 인스턴스 유형에서 기본 넓은 LLQ Tx 링 크기는 512개 항목이며, 최대 1,000개까지 늘릴 수 있습니다.

    다음 ethtool 명령을 실행하여 LLQ 크기를 조정할 수 있습니다. 넓은 LLQ를 제어, 쿼리 및 활성화하는 방법에 대한 자세한 내용은 Amazon Drivers GitHub 리포지토리의 ENA 설명서에서 Linux 커널 드라이버에 대한 Large Low-Latency Queue (Large LLQ) 주제를 참조하세요.

    Tx 대기열의 최대 깊이 찾기:

    ethtool -g interface

    최대 깊이로 Tx 대기열 설정:

    ethtool -G interface tx depth