2017-12-24 25 views
1

아이디어는 을 사용하여 대기 시간을 napi_poll()으로 측정하여 처리 된 패킷 수 (작업이라고 함)를 반환합니다. napi_poll()의 실행 대기 시간과 처리 된 패킷 수의 비율은 히스토그램의 형태로 각 패킷을 처리하는 데 걸린 평균 시간을 제공합니다. 내가 명령bcc 도구를 사용하여 eBPF`kretprobes`를`napi_poll()`에 연결하지 못했습니다.

argdist -H 'r:c:napi_poll():u64:$latency/$retval#avg time per packet (ns)' Failed to attach BPF to kprobe 에러주고 결국 과 dmesg 명령에 내가 kretprobesnapi_poll()과 비슷한 트릭 작품을 첨부 할 수없는 이유를 내가 Could not insert probe at napi_poll+0: -2

같은 메시지가 단지 골동품 얻을 다음 사용하고

net_rx_action()?

+0

간단한 도구로 시도해 볼 수 있습니까? 예 : 'funccount napi_poll'. 내 시스템에서,'napi_poll'은 작동하지 않지만'net_rx_action'은 작동합니다. 아마 하나가 인라인되어 있고 다른 하나는 인라인되지 않았기 때문일 것입니다. – pchaigno

+0

다른 모든 방법을 시도해 본 결과 napi_poll이 전혀 작동하지 않아서 기능의 인라인 된 기능이 옳다고 생각합니다. –

+0

제안 사항에 대한 답변을 모두 작성하겠습니다 만, 불행히도 기능을 가로 채지 못하면 할 수있는 일이별로 없습니다. – pchaigno

답변

2

대부분의 경우 Failed to attach BPF to kprobe 오류는 인라인 된 함수로 인해 발생합니다. Kprobes documentation (섹션 Kprobes Features and Limitations)에서 설명한 것처럼 대상 기능이 인라인 된 경우 Kprobes가 연결되지 않습니다. napi_poll is static부터 컴파일 타임에 인라인되었을 수 있습니다. napi_poll가 인라인이나되지 않은 경우

당신은 커널 기호에서 확인할 수 있습니다 net_rx_action가 아닌 동안

$ cat /boot/System.map-`uname -r` | grep " napi_poll" 
$ 
$ cat /boot/System.map-`uname -r` | grep " net_rx_action" 
ffffffff817d8110 t net_rx_action 

을 내 시스템에서 napi_poll가 인라인됩니다.


목표에 따라 여러 가지 해결 방법이 있습니다. 당신이 당신의 커널을 재 컴파일 괜찮다면

  1. , 당신은 Linux inline attributenapi_poll가 인라인되지 않도록하는 데 사용할 수 있습니다.
  2. 커널을 변경할 수없는 경우, 일반적인 해결 방법은 동일한 정보를 제공하는 napi_poll의 호출 기능을 찾는 것입니다. napi_poll이 호출하는 함수는 충분한 정보를 제공하고 자체적으로 인라인되지 않는 경우에도 작동 할 수 있습니다.