【问题标题】:kprobe of tcp_retransmit_skb. instead of tcp_retransmit_skb @tcp_states, I want to kprobe __napi_scheduletcp_retransmit_skb 的 kprobe。而不是 tcp_retransmit_skb @tcp_states,我想 kprobe __napi_schedule
【发布时间】:2020-08-27 07:41:14
【问题描述】:

在 BPF Performance Tools 一书中,有一个 tcp_retransmit_skb 的 kprobe 实现。我想做同样的事情,但不是 tcp_retransmit_skb @tcp_states,而是 kprobe _napi_schedule 并合并“include/linux/netdevice.h”的枚举 NAPI_STATE*。上面有我的实现:

 1 #!/usr/local/bin/bpftrace
  2
  3 #include <linux/netdevice.h>
  4
  5 kprobe:__napi_schedule
  6 {
  7         $ns = (struct napi_struct *)arg0;
  8
  9         // Poll is scheduled
 10         @napi[1] = "NAPI_STATE_SCHED";
 11         @napi[2] = "NAPI_STATE_DISABLE";
 12         @napi[3] = "NAPI_STATE_NPSVC";
 13         @napi[4] = "NAPI_STATE_HASHED";
 14         @napi[5] = "NAPI_STATE_NO_BUSY_POLL";
 15
 16
 17         printf("-------------------\n");
 18         printf("\n");
 19         printf("__napi_schedule: %s pid: %d\n", comm, pid);
 20         printf("\n");
 21         $state = $ns->state;
 22         printf("$ns->state: %d\n", $state);
 23         $statestr = @napi[$state];
 24         printf("state is: %s\n", $statestr);
 25         clear(@napi);
 26         printf("--------------------\n");
 27 }

当我尝试运行它时,它在我的“状态是”的 printf 中没有显示任何内容。

输出是:

...
__napi_schedule: tmux: server pid: 9003

$ns->state: 17
state is:
--------------------
-------------------

__napi_schedule: tmux: server pid: 9003

$ns->state: 17
state is:
--------------------
-------------------

__napi_schedule: tmux: server pid: 9003

$ns->state: 17
state is:
--------------------
...

【问题讨论】:

  • 您能添加一个示例输出吗?是否显示了 printf 以外的 state is...
  • 好的。我在上面的代码中添加了输出。

标签: tcp bpf ebpf kprobe bcc-bpf


【解决方案1】:

$ns-&gt;state 是一个位数组,所以值 17 实际上是(1 &lt;&lt; NAPI_STATE_SCHED) | (1 &lt;&lt; NAPI_STATE_HASHED)

您需要逐位解析值并显示等效字符串。

【讨论】:

  • 怎么发现是NAPI_STATE_MISSED | NAPI_STATE_NO_BUSY_POLL?我只给出 $ns->state 是 17。当您说“walk the bits”时,您的意思是我应该使用移位操作(>)吗?我在代码中添加了这一行'$state = $ns->state
  • 啊,抱歉弄错了。我已经更新了帖子。基本上,17 是二进制的 10001,映射到上面。
猜你喜欢
  • 2015-03-15
  • 1970-01-01
  • 2023-03-29
  • 2021-12-28
  • 2023-02-22
  • 1970-01-01
  • 1970-01-01
  • 2016-01-10
  • 2019-04-26
相关资源
最近更新 更多