无法使用 bcc 工具将 eBPF `kretprobes` 附加到 `napi_poll()`

2024-01-11

想法是使用argdist测量延迟时间napi_poll()它返回已处理的数据包数量(称为工作)。执行延迟比率napi_poll()处理的数据包数量将以直方图的形式给出处理每个数据包所需的平均时间。

我正在使用以下命令

argdist -H 'r:c:napi_poll():u64:$latency/$retval#avg time per packet (ns)' 这最终给了我错误Failed to attach BPF to kprobe在 dmesg 中我收到类似的消息Could not insert probe at napi_poll+0: -2

我只是好奇为什么我无法附加kretprobes to napi_poll()当类似的技巧适用于net_rx_action() ?


大多数时候Failed to attach BPF to kprobe错误是由内联函数引起的。正如中所解释的Kprobes 文档 https://www.kernel.org/doc/Documentation/kprobes.txt(部分Kprobes Features and Limitations),如果目标函数是内联的,Kprobes 将无法附加。自从napi_poll是静态的 https://elixir.free-electrons.com/linux/v4.14.9/source/net/core/dev.c#L5524,它可能已在编译时内联。

您可以检查内核符号,如果napi_poll是否内联:

$ 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被内联,同时net_rx_action is not.


此问题有多种解决方法,具体取决于您的目标。

  1. 如果你不介意重新编译内核,你可以使用Linux inline属性 https://www.kernel.org/doc/local/inline.html确保napi_poll不是内联的。
  2. 如果你不能改变你的内核,通常的解决方法是找到一个调用函数napi_poll提供相同的信息。调用的函数napi_poll如果它提供了足够的信息并且本身没有内联,也可以工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法使用 bcc 工具将 eBPF `kretprobes` 附加到 `napi_poll()` 的相关文章

  • Linux内核中读写原子操作的实现

    最近 我研究了 Linux 内核的原子读写实现 并提出了一些问题 首先是ia64架构的相关代码 typedef struct int counter atomic t define atomic read v volatile int v
  • Linux 内核中的 DMA 映射和 DMA 引擎是什么?

    Linux 内核中的 DMA 映射和 DMA 引擎是什么 DMA映射API和DMA引擎API何时可以在Linux设备驱动程序中使用 任何真正的 Linux 设备驱动程序示例作为参考都会很棒 Linux 内核中的 DMA 映射和 DMA 引擎
  • current->mm 在 Linux 内核中给出 NULL

    我想遍历页表 因此我访问了 current gt mm 但它给出了 NULL 值 我正在研究 linux 内核 3 9 我不明白 current gt mm 怎么会为零 这里有什么我想念的吗 这意味着您处于内核线程中 在Linux中 内核线
  • 如何修改内核DTB文件

    Summary 我目前正在为定制板编译 Linux 内核 内核 模块和 DTB 以及一些定制驱动程序 有时 我会编译内核并意识到 DTB 文件中的兼容性字符串不是自定义驱动程序正在寻找的内容 现在 我可以解决此问题的唯一方法是修改 DTS
  • Android:如何以编程方式连接/断开 OTG

    我想在我的 Android 设备中以编程方式连接和断开 USB OTG 笔式驱动器 硬盘驱动器等 对于USB 我使用以下路径在连接到PC时绑定 取消绑定USB sys bus usb drivers usb bind or unbind 我
  • 将内核内置模块替换为可加载模块

    我开发了一个内核模块来管理 nf4 标签作为字符设备 我在内核之外开发了这个模块 并在开发阶段将其编译为可加载内核模块 即 ko 进行了测试 一旦驱动程序功能正常且足够稳定 我就使用补丁将其插入 Linux 内核源代码 v4 9 30 以便
  • Kubernetes Node 中的内核内存使用率较高

    我非常绝望地寻找解决方案 我正在 AWS 上运行 Kubernetes 集群 v1 16 7 节点规格为 它是一个亚马逊 EC2 t3 medium实例与4GB RAM和 AMI k8s 1 11 debian stretch amd64
  • tcp_max_syn_backlog 和 somaxconn 有什么区别?

    我一直在阅读一些关于 Linux 上的 TCP 实现的文章 我很困惑 它们之间有什么区别net ipv4 tcp max syn backlog and net core somaxconn和backlog作为参数传递给listen 系统调
  • 加载linux内核的基地址

    我对内核如何加载到内存有一些疑问 检查后 proc kallsyms我能够找到内核中各种符号的地址 cat proc kallsyms head n 10 00000000 t vectors start 80008240 T asm do
  • 尝试将 GCC 特定的 asm goto 移植到 Clang

    我一直在尝试将一些 GNU 扩展转换为实际的标准 C 这样它就可以在 clang 上运行 知道标准 C 而不是 GNU 扩展 我有点不知所措 asm goto 1 STATIC KEY INITIAL NOP pushsection jum
  • Linux用户空间线程、内核线程、轻量级进程

    我对所有这些实体以及它们在 Linux 中如何互连感到有点困惑 Unix 内部原理 一书指出lightweight process LWP 是内核支持的用户线程 并且该内核看不到进程内的线程 对于 Linux 来说仍然如此吗 据我了解 用户
  • Linux 内核:为什么调用 kstrtol 会崩溃?

    我正在学习内核编程 并且对 kstrtol 进行了简单的调用 我用它来将字符串转换为数字 然而 每次我编译这个模块并使用 insmod 将其放入内核时 我都会收到 BUG 无法处理 f862b026 处的内核分页请求 然后是寄存器和堆栈转储
  • posix_fadvise(WILLNEED) 会使 IO 变慢吗?

    在运行 Linux 内核版本 2 6 18 194 26 1 el5 的 CentOS 5 5 机器上 我注意到 posix fadvise WILLNEED 使读取 60K 文件比常规 IO 慢了近 200 看起来实际的 fadvise
  • Linux 内核线程没有地址空间

    为什么Linux内核线程没有地址空间 对于任何要执行的任务 它都应该有一个内存区域 对吗 内核线程的文本和数据去了哪里 内核线程确实有一个地址空间 只是他们都有同一个 这并不妨碍它们各自拥有不同的堆栈 文本和数据放置在内核地址空间 由所有线
  • 如何在Linux内核中启用CONFIG_PREEMPT选项?

    我是 Linux 内核编程的新手 尝试在 x86 64 上使用旧内核 Linux 2 6 32 我想启用其中的 CONFIG PREEMPT 选项 但找不到有关如何执行此操作的信息 我可以使用我的首选选项编译新内核 但不知道在这种情况下我需
  • 在内核模块中执行shell命令

    是否可以在内核模块中执行shell命令 我知道我们可以在用户空间 C 代码中使用system子程序 我正在调试一个存在内存泄漏问题的内核模块 在无限循环中执行 insmod 和 rmmod module ko 后 8G RAM 的系统在几分
  • 如何编写需要内核源头文件的 BitBake 驱动程序配方?

    介绍 我有一个do install我为驱动程序编写的 BitBake 配方中的任务 我在其中执行自定义install脚本 任务失败 因为安装脚本无法在其中找到内核源头文件
  • 尝试映射大页面 (1GB) 时 mmap 失败

    我做了什么 使用 root 启用大页 我的系统支持 1MB 大页 echo 20 gt proc sys vm nr hugepages 将大页文件系统挂载到 mnt hugepages mount t hugetlbfs nodev mn
  • ARM 系统调用的接口是什么?它在 Linux 内核中的何处定义?

    我读过有关 Linux 中的系统调用的内容 并且到处都给出了有关 x86 架构的描述 0x80中断和SYSENTER 但我无法追踪 ARM 架构中系统调用的文件和进程 任何人都可以帮忙吗 我知道的几个相关文件是 arch arm kerne
  • 从内核空间中的块设备读取

    我正在编写一个内核模块 需要从现有的块设备执行读取 dev 东西 有谁知道有任何其他模块可以执行这些操作 我可以用作参考吗 欢迎任何指点 Linux 2 6 30 如果你真的绝对必须那么使用filp open filp close vfs

随机推荐

  • Flash逆向工程[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么我们不能一次从 System.in 读取一个字符?

    下面的程序打印标准输入上写入的每个字符 但仅在写入换行符后才打印 至少在我的系统上 public class Test public static void main String args throws java io IOExcepti
  • Spring Security如何在不登录的情况下更新用户详细信息

    我是 Spring Security 的新手 我已经实现了 UserDetails 来创建我自己的用户 我还有我的自定义 userDetailsS ervice 现在一切正常 但我需要在不登录的情况下更新有关我的用户的信息 如何做到这一点
  • WooCommerce REST API - 按修改日期过滤订单

    我正在使用 WooCommerce REST API http woocommerce github io woocommerce rest api docs introduction http woocommerce github io
  • 带有伪造霍夫曼表的 jpeg 可以恢复吗?

    我有一个在任何程序中都无法打开的 JPEG 在 Ubuntu 图像查看器中打开会产生 把照片传过去convert产生类似的结果 convert corrupt jpg out jpg convert im6 Bogus Huffman ta
  • 如何在 .NET 应用程序中使用 C++ 项目?

    我是一名普通的 NET 开发人员 旨在将 C 库集成到 NET 项目中 我有一些想法 但由于我总体上是 C 新手 所以我不知道我正在尝试使用的技术的局限性 C 项目本质上是一个快速声音渲染器 可以使用一堆不同的后处理技巧来播放多轨音频文件
  • self.tabBarController 为 NULL

    我创建了一个如下所示的 UITabBarController 并推送了一个 navigationController 但我现在无法设置选项卡栏项目的标题等 因为 tabbarcontroller 为 NULL 请你告诉我哪里出了问题 UIT
  • 为什么C语言不支持列主数组? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 查找 PHP 中最小的 int [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我有 2
  • openpty() 的作用是什么? “openpty() 函数找到可用的伪终端”是什么意思?

    我觉得问这个问题很愚蠢 只是 RTFM 但我无法理解这个手册页 这手册页简介 http man7 org linux man pages man3 openpty 3 html描述openpty The openpty 函数找到可用的伪终端
  • gulp.src() 包含文件但忽略所有文件夹

    这个问题肯定有一个简单的答案 我找不到以前问过这个问题的人 什么通配模式可以包含文件夹中的所有文件但忽略所有子文件夹 gulp src 包括所有文件和文件夹 我只想要这些文件 而不必单独排除这些文件夹 只需使用nodir打电话时的选项gul
  • 如何使用 ViewModel 连接启用复选框

    我刚刚学习knockout js 经过大量工作 我让这个小视图模型正常工作 但 ViewModel 的 shouldBeEnabled 方法看起来相当笨重 有没有更好的方法来绑定这个 我想要实现的是 如果选择第一项 用户就无法选择第三项 反
  • 如何配置 Unity 容器以提供字符串构造函数值?

    这是我的dad class public class Dad public string Name get set public Dad string name Name name 这是我的测试方法 public void TestDad
  • 朱莉娅:未找到系统映像文件“sys.ji”

    我正在使用 IDE Netbeans 在 Linux red hat 7 下编写一个 c 项目 由于我需要使用一些数学函数 我尝试将 Julia 语言嵌入到我的 C 项目中 这是我所做的 从下载 Juliahere http juliala
  • 我正在制作一个 Tumblr 主题 请保留您的批评 并且我想使用一些语义标签 因为这似乎是大多数主题所没有的 这些博客的样式是一个充满帖子的主页可能会被截断 也可能不会 然后 您可以单击链接并获取该帖子的永久链接 或者完整的帖子 如果帖子被
  • Eclipse 抱怨:“'endl' 的重载无效” - 但代码确实可以编译

    我为我的模板类编写了一个运算符 template
  • 删除 Axis 中的 client-config.wsdd

    我正在设置我的测试环境 我需要以编程方式注册我的处理程序 传输 而不是使用 client config wsdd
  • 我可以使用 FullPath 以编程方式转义 Sitecore 查询中的破折号吗?

    我正在尝试扩展自定义 Sitecore 命令来确定当前项目是否具有与特定模板 ID 匹配的父项目 我知道查询理想情况下应该像这样简单 ancestor templateid 26710865 F082 4714 876B D5E1F3867
  • 如何使用 sha512 创建 pkcs12 证书

    我正在像这样创建我的证书 openssl genrsa out rootCA key 2048 openssl req x509 new key rootCA key sha512 days 36501 out rootCA pem ext
  • 无法使用 bcc 工具将 eBPF `kretprobes` 附加到 `napi_poll()`

    想法是使用argdist测量延迟时间napi poll 它返回已处理的数据包数量 称为工作 执行延迟比率napi poll 处理的数据包数量将以直方图的形式给出处理每个数据包所需的平均时间 我正在使用以下命令 argdist H r c n