

# Linux에서 ENA 커널 드라이버 문제 해결
<a name="troubleshooting-ena"></a>

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

인스턴스에 연결할 수 없는 경우 [연결 문제 해결](#ena-connectivity-issues) 섹션에서 시작하세요.

6세대 인스턴스 유형으로 마이그레이션한 후 성능 저하가 발생하는 경우 [지식 센터의 최대 네트워크 성능을 얻으려면 EC2 인스턴스를 6세대 인스턴스로 마이그레이션하기 전에 어떤 작업이 필요한가요?](https://repost.aws/knowledge-center/migrate-to-gen6-ec2-instance)를 참조하세요.

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

**Topics**
+ [연결 문제 해결](#ena-connectivity-issues)
+ [연결 유지 메커니즘](#ena-keep-alive)
+ [레지스터 읽기 시간 초과](#register-read-timeout-ena)
+ [Statistics](#statistics-ena)
+ [syslog의 드라이버 오류 로그](#driver-error-logs-ena)
+ [최적이 아닌 구성 알림](#ts-ena-sub-opt-config-notification)

## 연결 문제 해결
<a name="ena-connectivity-issues"></a>

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

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

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

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

1. 로컬 컴퓨터에서 Amazon EC2 콘솔, [stop-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/stop-instances.html) 명령(AWS CLI) 또는 [Stop-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Stop-EC2Instance.html) cmdlet(AWS Tools for PowerShell)을 사용하여 인스턴스를 중지합니다.

1. 로컬 컴퓨터에서, [modify-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html) 명령을 `--no-ena-support` 옵션과 함께 사용하거나 [Edit-EC2InstanceAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html) cmdlet을 `-EnaSupport $false` 파라미터와 함께 사용하여 향상된 네트워킹 속성을 비활성화합니다.

1. 로컬 컴퓨터에서 Amazon EC2 콘솔, [start-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/start-instances.html) 명령, 또는 [Start-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Start-EC2Instance.html) cmdlet을 사용하여 인스턴스를 시작합니다.

1. (선택 사항) 인스턴스에 연결한 후 `ena`의 단계에 따라 현재 커널 버전으로 [EC2 인스턴스에서 ENA로 향상된 네트워킹 활성화](enhanced-networking-ena.md) 모듈을 다시 설치해 보십시오.<a name="disable-enhanced-networking-ena-instance-store"></a>

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

1. [Amazon S3 지원 AMI 생성](creating-an-ami-instance-store.md)에 설명된 대로 새 AMI를 생성합니다.

1. AMI를 등록할 때는 [stop-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/stop-instances.html) 명령(AWS CLI)에 `--no-ena-support` 옵션을 포함하거나 [Register-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html) cmdlet에 `-EnaSupport $false` 파라미터를 포함해야 합니다.

## 연결 유지 메커니즘
<a name="ena-keep-alive"></a>

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}}
```

## 레지스터 읽기 시간 초과
<a name="register-read-timeout-ena"></a>

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
<a name="statistics-ena"></a>

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

```
[ec2-user ~]$ ethtool -S eth{{N}}
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가 인스턴스의 최댓값을 초과하여 대기열에 추가되거나 손실된 패킷 수입니다. \*

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

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

`linklocal_allowance_exceeded`: {{N}}  
로컬 프록시 서비스에 대한 트래픽의 PPS가 네트워크 인터페이스의 최댓값을 초과하여 손실된 패킷 수입니다. 이는 Amazon DNS 서비스, Instance Metadata Service 및 Amazon Time Sync Service에 대한 트래픽에 영향을 주지만, 사용자 지정 DNS 해석기에 대한 트래픽에는 영향을 주지 않습니다.

`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의 드라이버 오류 로그
<a name="driver-error-logs-ena"></a>

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: Elastic Network Adapte(ENA) 드라이버가 snmpd로부터의 이더넷 기능 폴링을 지원하지 않습니다.

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

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

## 최적이 아닌 구성 알림
<a name="ts-ena-sub-opt-config-notification"></a>

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 인스턴스 간 네트워크 성능 향상](ena-express.md)을 참조하세요.
+ **코드 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)](https://github.com/amzn/amzn-drivers/tree/master/kernel/linux/ena#large-low-latency-queue-large-llq) 주제를 참조하세요.

  ```
  ethtool -g {{interface}}
  ```

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

  ```
  ethtool -G {{interface}} tx {{depth}}
  ```

  ENA Express의 최적 구성에 대한 자세한 내용은 [ENA Express로 EC2 인스턴스 간 네트워크 성능 향상](ena-express.md)을 참조하세요.
+ **코드 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)](https://github.com/amzn/amzn-drivers/tree/master/kernel/linux/ena#large-low-latency-queue-large-llq) 주제를 참조하세요.

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

  ```
  ethtool -g {{interface}}
  ```

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

  ```
  ethtool -G {{interface}} tx {{depth}}
  ```