테스트 하려고 해요국가 API임베디드 리눅스 환경의 기능. 나는 '를 사용했다PKTGEN' 많은 패킷을 생성하고 내 네트워크 인터페이스의 인터럽트 수를 확인해보세요./proc/인터럽트.
인터럽트 수가 생성된 패킷보다 상대적으로 적다는 것을 발견했습니다. 나도 적응하려고 노력 중이야'웹 개발 예산'가치는 다음에서 나온다.1도착하다1000(기본값은 300)이렇게 하면 netdev_budget이 증가함에 따라 인터럽트 수가 감소하는 것을 관찰할 수 있습니다.
그러나 netdev_budget을 늘리는 것은 도움이 되지 않는 것 같습니다. 이 인터럽트는 netdev_budget이 300으로 설정되었을 때 관찰된 인터럽트 수와 유사합니다.
내 질문은 다음과 같습니다.
- "netdev_budget"은 NAPI에 어떤 영향을 미치나요?
- 인터럽트 카운트 변화를 관찰하기 위해 어떤 다른 매개변수를 조정할 수 있거나 조정해야 합니까?
- Linux에서 NAPI 기능을 테스트하는 다른 방법이 있습니까? (네트워크 드라이버 코드를 직접 보는 것 외에)
어떤 도움이라도 대단히 감사하겠습니다.
미리 감사드립니다.
답변1
나는 썼다Linux 네트워크 튜닝에 대한 종합적인 블로그 게시물NAPI 가중치를 포함하여 Linux 네트워크 스택 모니터링, 조정 및 최적화에 대한 모든 내용을 설명합니다. 구경하다.
기억하세요: 일부 운전자원하지 않는다NAPI는 NIC가 시작될 때 IRQ를 비활성화합니다. 그래야 하지만 어떤 사람들은 그렇지 않습니다. 드라이버의 하드 IRQ 처리기를 확인하여 하드 IRQ가 비활성화되어 있는지 확인하면 이를 확인할 수 있습니다.
블로그 게시물과 아래에서 언급한 것처럼 어떤 경우에는 하드 IRQ가 다시 활성화됩니다.
귀하의 질문에 관해서는:
증가하면
netdev_budget
NET_RX Softirq가 처리할 수 있는 패킷 수가 늘어납니다. 처리할 수 있는 패킷 수도 시간 제한에 의해 제한되며 이는 조정할 수 없습니다. 이는 NET_RX Softirq가 CPU 사용량을 100% 차지하는 것을 방지하기 위한 것입니다. 장치가 할당된 시간 동안 처리할 충분한 패킷을 수신하지 못하는 경우 하드 인터럽트다시 활성화NAPI가 비활성화되었습니다.NIC의 IRQ 병합 설정을 수정해 볼 수도 있습니다(지원되는 경우). 이 작업을 수행하는 방법과 정확한 의미에 대한 자세한 내용은 위의 블로그 게시물을 참조하세요.
파일 에 모니터링을 추가해야 합니다
/proc/net/softnet_stat
. 이 파일에는 처리 중인 패킷 수, 시간 초과 여부 등을 이해하는 데 도움이 되는 필드가 있습니다.
가능하다면 다음 질문을 고려해 보십시오.
하드 인터럽트 비율이 중요한 이유는 무엇입니까? 직설적으로 말하면 NIC 드라이버의 Hardirq 처리기는 가능한 한 적은 작업을 수행해야 하므로 시스템이 많은 작업을 수행하는 것은 문제가 되지 않을 수 있습니다. 그렇다면 그럴 것 같지 않으므로 신중하게 무게를 달아야 합니다. 그러나 IRQ 병합 설정 및 IRQ CPU 선호도를 조정하여 처리를 분산함으로써 NIC에서 생성된 하드 인터럽트 수와 특정 CPU에서 처리하는 하드 인터럽트 수를 각각 변경할 수 있습니다.
패킷 처리 처리량에 더 관심이 있는지 아니면 패킷 처리 대기 시간에 더 관심이 있는지 고려해야 합니다. 우려 사항에 따라 네트워크 스택을 적절하게 조정할 수 있습니다.
기억하세요: Linux 네트워킹 스택을 완전히 조정하고 최적화하려면 모든 구성 요소를 모니터링하고 조정해야 합니다. 그것들은 모두 서로 얽혀 있으며 스택의 단일 측면만을 모니터링하고 조정하는 것은 어렵습니다(종종 부정확함).