NIC 링 매개변수가 하드웨어 최대 기능으로 사전 설정되지 않은 이유는 무엇입니까?

NIC 링 매개변수가 하드웨어 최대 기능으로 사전 설정되지 않은 이유는 무엇입니까?

NIC 링 버퍼를 확인합니다.

# ethtool -g eth0
Ring parameters for eth0:
Pre-set maximums:
RX:        4096
RX Mini:      0
RX Jumbo:     0
TX:        4096
Current hardware settings:
RX:         256
RX Mini:      0
RX Jumbo:     0
TX:         256

다음과 같이 "사전 설정된 최대값"에 표시된 제한까지 "RX/TX"를 설정할 수 있습니다.

# ethtool -G eth0 rx 4096 rx 4096

질문은: 기본적으로;,이거 왜 이렇게 낮게 설정되어 있어?(내가 가지고 있는 모든 서버에서 모두 256입니다) 더 높은 값 대신 또는 하드웨어 최대 기능? 이 값을 늘리면 어떤 단점이 있습니까(예인 경우 어떤가요?)?

답변1

첫째, 설정한 숫자가바이트많은 사람들이 생각하는 것처럼 그들은설명자(설명자 크기는 하드웨어에 따라 다릅니다.) 따라서 링 길이를 늘리면 이러한 설명자에 대해 커널에 더 많은 메모리를 할당하도록 요청하게 됩니다. 일반적으로 인터럽트 처리 속도가 최대한 빨라지도록 이 커널 메모리를 L1 캐시에 두는 것이 좋습니다. 링 크기를 늘리면 이러한 가능성이 낮아지고 어떤 경우에는 완전히 불가능합니다.

다음은 인터럽트 병합입니다. 일반적으로 링 버퍼 크기를 늘리면 NIC는 낮음/높음 표시를 적절하게 조정하고 더 많은 데이터가 버퍼링될 때(즉, 빈도가 낮을 ​​때) 인터럽트를 트리거합니다. 결과적으로 인터럽트 처리 중에 커널이 이러한 대량의 데이터를 처리하는 데 필요한 시간도 늘어납니다.

위의 모든 결과는 단순한 버킷 효과를 가져옵니다. 즉, 링 패킷이 더 커질수록 드롭 확률은 감소하고 네트워크 대기 시간은 증가합니다. TCP를 통해 대용량 파일을 스트리밍하는 경우에는 문제가 없을 수 있지만 지연 시간이 짧은 소형 패킷 애플리케이션(예: 게임 등)인 경우에는 완전히 바람직하지 않을 수 있습니다.

표시되는 기본 숫자는 둘 사이의 합리적인 절충안입니다.

관련 정보