4

임베디드 리눅스 환경에서 NAPI 기능을 테스트하려고합니다. 나는 많은 패킷을 생성하기 위해 'pktgen'을 사용했고 내 네트워크 인터페이스의 인터럽트 카운트를 /proc/interrupts에 확인하려고했습니다.리눅스 NAPI 기능을 테스트하는 방법은 무엇입니까?

인터럽트 카운트가 생성 된 패킷보다 비교적 적다는 것을 알게되었습니다. 또한 'netdev_budget'값을 1에서 1000 (기본값은 300)으로 조정하려고합니다. netdev_budget이 증가 할 때 인터럽트 카운트 감소를 관찰 할 수 있습니다.

그러나 netdev_budget을 늘리는 것이 도움이되지 않습니다. 인터럽트는 netdev_budget 관찰 인터럽트 카운트 (300) 그래서 여기

로 설정과 유사 나의 질의는 다음과 같습니다

  1. NAPI에 'netdev_budget'의 효과는 무엇인가?

  2. 인터럽트 카운트의 변화를 관찰하기 위해 조정할 수있는 다른 매개 변수는 무엇입니까?

  3. 내가 Linux에서 NAPI 기능을 테스트하는 데 사용할 수있는 다른 방법이 있나요? (그렇다 직접 네트워크 드라이버 코드를 찾고에서) 어떤 도움이 많이 appreaciated됩니다

.

미리 감사드립니다.

+0

"썩은 패킷"테스트. napi 폴링에서 인터럽트 모드로 전환하는 동안 정확히 프레임이 도착하지 않을 수 있습니다. 이 프레임은 수신 인터럽트를 트리거하기 위해 다른 프레임이 도착할 때까지 처리되지 않습니다. – sawdust

+0

안녕하세요 @ 톱밥은 힌트를 주셔서 감사합니다. 하지만 대답을 좀 더 자세히 설명해 주시겠습니까? 왜냐하면 내가 패킷/프레임 크기를 증가시키지 않으면 드롭 된 패킷을 볼 수 없기 때문입니다. 그렇다면 '썩은 패킷'이 있는지를 확인하기 위해 정확히해야 할 일은 무엇입니까? – sunisiha

+0

썩은 패킷은 끊어진 패킷이 아닙니다. 지연된 패킷입니다. 이러한 버그를 쉽게 알아보기 위해 시간이 초과 된 패킷을 가져야합니다 (예 : X 초 내에 응답을 기대하며 연결은 활동의 연속과 비활성의 기간에 따라 다릅니다. 문제를 만드는 상황에는 10 개의 지시 사항이 포함됩니다. 그러나 머피의 법칙이 우세하다. 상황을 만드는 것이 어려울 수 있는데, 이는 드라이버가이 버그로 출시되는 이유를 부분적으로 설명합니다. – sawdust

답변

5

나는 리눅스 네트워크 스택 (NAPI 가중치 포함) 모니터링, 조정 및 최적화에 대한 모든 것을 설명하는 comprehensive blog post about Linux network tuning을 작성했습니다. 보세요.

주의 : 일부 드라이버 NAPI가 시작될 때 NIC에서 IRQ를 비활성화하십시오. 그들은해야하지만, 일부는 그렇게하지 않습니다. 드라이버의 하드 IRQ 처리기를 검사하여 하드 IRQ가 비활성화되어 있는지 확인할 수 있습니다.

블로그 게시물 및 아래에서 언급 한 것처럼 하드 IRQ가 다시 활성화되는 경우도 있습니다. 지금까지 귀하의 질문에 같은

:

  1. netdev_budget 증가는 NET_RX의 현재 softirq가 처리 할 수있는 패킷의 수를 증가시킨다. 처리 할 수있는 패킷 수는 조정할 수없는 시간 제한에 의해 제한됩니다. 이는 NET_RX softirq가 100 %의 CPU 사용량을 차지하지 못하도록 방지하기위한 것입니다. 장치가 해당 시간 할당 동안 처리 할 패킷을 충분히받지 못하면 hardirqs는 다시 활성화이고 NAPI는 비활성화됩니다.

  2. NIC가 지원되는 경우 NIC의 IRQ 통합 설정을 수정할 수도 있습니다. 이를 수행하는 방법과 정확히 무엇이 의미하는지에 대한 자세한 정보는 위의 블로그 게시물을 참조하십시오.

  3. /proc/net/softnet_stat 파일에 모니터링을 추가해야합니다. 이 파일의 필드는 처리중인 패킷 수, 시간 초과 여부 등을 파악하는 데 도움이됩니다.

내가 수도 경우, 고려에 대한 질문 :

왜 hardirq 속도의 문제는 무엇입니까? 그것은 아마 직접적으로 중요하지 않습니다. NIC 드라이버의 hardirq 처리기는 가능한 한 적은 작업을해야하므로 많은 작업을 수행하는 것이 시스템에 문제가되지는 않습니다. 그렇다면 신중하게 측정해야합니다. 그럼에도 불구하고 IRQ 통합 설정 및 IRQ CPU 선호도를 조정하여 처리를 분산하여 NIC에서 생성되고 특정 CPU에서 처리되는 하드 디스크의 수를 각각 변경할 수 있습니다.

패킷 처리량 또는 패킷 처리 대기 시간에 더 많은 관심이 있는지 고려해야합니다. 걱정거리에 따라 네트워크 스택을 적절하게 조정할 수 있습니다.

기억하십시오 : Linux 네트워킹 스택을 완전히 조정하고 최적화하려면 각 구성 요소를 모니터하고 조정해야합니다. 그것들은 모두 얽혀 있고 스택의 한 면만 모니터링하고 조정하기가 어렵습니다.

관련 문제