首页/新闻资讯/正文详情

在 LinuxKit 中使用 bcc 进行内核性能分析:从工具链匹配到容器内部署实战

发布时间:2026/9/25 8:08:21 来源:云帆数科 栏目:资讯中心
在 LinuxKit 中使用 bcc 进行内核性能分析:从工具链匹配到容器内部署实战
操作系统云原生容器运行时【免费下载链接】linuxkitA toolkit for building secure, portable and lean operating systems for containers项目地址https://gitcode.com/gh_mirrors/li/linuxkit点击查看免费下载bccBPF Compiler Collection是 Linux 内核性能分析的标准工具集可用于访问性能计数器、跟踪事件以及探测各类内核内部数据结构。本指南围绕 LinuxKit 项目中的 kernel-bcc 文档完整讲解linuxkit/kernel-bcc包的版本匹配机制、在init阶段的挂载方式、三种容器内访问路径、kptr_restrict的解除方法并结合仓库中的 Dockerfile 与测试用例说明该包从构建到验证的全链路细节。bcc 工具与内核版本匹配原理bcc 依赖内核的 eBPF 特性其运行效果与具体内核版本、头文件、模块符号高度耦合。因此bcc 工具必须与目标内核严格配对。LinuxKit 对此的解决方案是为每一个内核构建发布一个带相同 tag 的配套linuxkit/kernel-bcc包。在 kernel/Makefile 中可以看到TOOLSbcc perf定义了两类随内核发布的工具而buildtools-%/buildtool-%目标会调用linuxkit pkg build以./$(COMMON_DIR)/build-bcc.yml为构建清单生成形如linuxkit/kernel-bcc:KERNEL_VERSION-SERIES_HASH的镜像 tag。内核包 tag 与 bcc 包 tag 使用同一套哈希体系SERIES_HASH从而保证同一版本的内核对应同一版本的 bcc这一配对关系。实际的构建流程定义在 kernel/common/build-bcc.ymlimage: kernel-bcc network: true dockerfile: common/Dockerfile.bcc该 yml 声明构建产物名为kernel-bcc使用 kernel/common/Dockerfile.bcc 作为构建镜像。bcc 包的构建内容与产物结构kernel/common/Dockerfile.bcc 完整揭示了 bcc 包的组成提取内核头文件与源码通过COPY --fromksrc /kernel-headers.tar /kernel-dev.tar /kernel.tar从对应 tag 的linuxkit/kernel镜像中取回三个 tar 包并解压随后将usr/src与usr/include复制到输出目录这部分为 bcc 提供与当前内核匹配的编译/运行期头文件。安装 bcc 本体与工具脚本以bcc、bcc-dev、bcc-tools三个 Alpine 包为主辅以python3、zlib、busybox等运行时依赖同时尝试安装luajit与bcc-lua注释明确说明这两者并非所有平台都可用缺失不阻塞构建。补齐动态库将libelf、libstdc、libintl以及 Pythonsite-packages拷贝进产物目录确保 bcc 的 Python 前端与 C 库在最小化的 LinuxKit 根文件系统中可直接运行。以scratch收尾最终镜像基于FROM scratch通过COPY --frommirror /out /与COPY --frombuild /out /将上述内容打包。因此LinuxKit 的 bcc 包内包含bcc可执行程序、示例与工具脚本位于/usr/share/bcc下以及与该内核构建配套的内核头文件。在 LinuxKit 中启用 bccinit 阶段挂载LinuxKit 中 bcc 的推荐用法是将linuxkit/kernel-bcc包添加到 yml 配置的init段。以仓库测试用例 test/cases/040_packages/002_bcc/test.yml 为参照kernel: image: linuxkit/kernel:6.12.59 cmdline: consolettyS0 consolettyAMA0 init: - linuxkit/init:1c3e4933ceabd7418b961d66d5d884bf0044ac64 - linuxkit/runc:9442aa234715e751a16144f1d4ae3fd1a00fd492 - linuxkit/kernel-bcc:5.4.113 onboot: - name: check-bcc image: alpine:3.13 ...将linuxkit/kernel-bcc放在init段后其内容会被合并进系统的根文件系统在运行时表现为向根文件系统新增了/usr/share/bcc目录包含tools、examples等子目录。版本配对提示示例中的 test.yml 在 6.12.59 内核上搭配linuxkit/kernel-bcc:5.4.113仅为该测试用例的既定配置实际生产使用时应遵循每个内核 tag 对应一个同 tag 的 kernel-bcc 包的匹配规则选取与目标内核版本一致的 bcc 包避免头文件与内核符号不匹配导致的加载失败。容器内访问 bcc 的三种方式将 bcc 并入根文件系统后可从以下三个入口使用它1. bind mount 挂载进业务容器在任意容器的配置中把宿主根文件系统内的/usr/share/bcc以 bind mount 方式挂载进容器容器即可直接调用其中的tools脚本。例如在 onboot 或 services 段中为容器追加 bindsservices: - name: my-app image: alpine:3.13 binds: - /usr/share/bcc:/usr/share/bcc command: [/usr/share/bcc/tools/runqlat]2. 在 getty / ssh 容器内访问LinuxKit 默认提供 getty控制台与 sshd 容器两者共享宿主 PID 1 的根文件系统视图。可以直接访问/proc/1/root/usr/share/bcc/tools# 在 getty 或 ssh 会话中直接运行 bcc 工具 /proc/1/root/usr/share/bcc/tools/softirqs 1 1/proc/1/root是 PID 1 进程的根目录符号链接等价于整个宿主根文件系统因此可以透明访问/usr/share/bcc下所有工具。3. 通过 nsenter 进入 PID 1 的命名空间若需要完整的宿主环境视图可用nsenter进入 PID 1 的 mount 命名空间并执行 ashnsenter -t 1 -m -- /bin/ash -c /usr/share/bcc/tools/softirqs 1 1这种方式与仓库测试用例 test/cases/040_packages/002_bcc/check.sh 的验证逻辑完全一致——该脚本正是通过nsenter -t 1 -m -- /bin/ash -c /usr/share/bcc/tools/softirqs 1 1来确认 bcc 工具能否在系统内正常执行nsenter -t 1 -m -- /bin/ash -c /usr/share/bcc/tools/softirqs 1 1 if [ $? -ne 0 ]; then printf bcc test suite FAILED\n 1 exit 1 fi printf bcc test suite PASSED\n 1解除内核指针限制kptr_restrictbcc 的部分探针尤其是依赖内核符号地址的跟踪点会受到kptr_restrict的限制。LinuxKit 的默认镜像中sysctl容器会启用内核指针限制这会阻止普通用户查看内核指针值进而影响 bcc 的输出可读性。文档给出的处理方式有两种方案一移除 sysctl 容器。在 LinuxKit yml 的onboot段中删除linuxkit/sysctl一项即不加载其默认 sysctl 配置。方案二运行时手动解除限制echo 0 /proc/sys/kernel/kptr_restrict将kptr_restrict置 0 后内核指针对非特权用户可见bcc 即可正常解析符号与地址。该操作需要 root 权限在 getty/ssh 会话中执行即可。解除限制后bcc 即可投入使用。完整可运行的 LinuxKit bcc 配置示例综合上述要素一个可直接参考的完整 yml 示例如下内核版本请按实际环境替换为匹配的 kernel 与 kernel-bcc 组合kernel: image: linuxkit/kernel:6.12.59 cmdline: consolettyS0 consolettyAMA0 init: - linuxkit/init:1c3e4933ceabd7418b961d66d5d884bf0044ac64 - linuxkit/runc:9442aa234715e751a16144f1d4ae3fd1a00fd492 - linuxkit/kernel-bcc:5.4.113 onboot: - name: sysctl image: linuxkit/sysctl:latest # 若 bcc 受限可移除本项或改用方案二 # command: [sh, -c, echo 0 /proc/sys/kernel/kptr_restrict] - name: poweroff image: linuxkit/poweroff:4059858a555bed90c2280fa9b060b7a8f8de6d45 command: [/bin/sh, /poweroff.sh, 10]构建并启动后在 getty 控制台执行echo 0 /proc/sys/kernel/kptr_restrict /proc/1/root/usr/share/bcc/tools/softirqs 1 1即可看到 bcc 输出的软中断统计。小结LinuxKit 通过为每个内核构建同 tag 的linuxkit/kernel-bcc包从工具链层面解决了 bcc 与内核版本匹配的问题通过init段挂载将/usr/share/bcc含工具脚本与配套内核头文件并入根文件系统并提供 bind mount、/proc/1/root、nsenter三种访问途径同时配合kptr_restrict的解除操作让 bcc 在最小化的 LinuxKit 系统中开箱即用。仓库中的 kernel/common/Dockerfile.bcc、kernel/common/build-bcc.yml 与 test/cases/040_packages/002_bcc/ 测试用例是深入理解该包构建与验证流程的最佳参考资料。赞分享操作系统云原生容器运行时【免费下载链接】linuxkitA toolkit for building secure, portable and lean operating systems for containers项目地址https://gitcode.com/gh_mirrors/li/linuxkit点击查看免费下载相关推荐LinuxKit 内核性能分析指南使用 perf 工具进行容器系统性能剖析LinuxKit 内核性能分析指南使用 perf 工具进行容器系统性能剖析 导读 本文介绍如何在 LinuxKit 构建的最小化容器操作系统中使用 Linux操作系统云原生容器运行时在 minikube 中运行 eBPF 工具用 BCC 观测本地 Kubernetes 集群内核行为在 minikube 中运行 eBPF 工具用 BCC 观测本地 Kubernetes 集群内核行为 eBPF 工具是用于观测 Linux 内核行为的高性能性云原生容器编排CLI开发工具BCCBPF Compiler Collection实战指南基于 eBPF 的内核追踪与性能分析工具箱BCCBPF Compiler Collection实战指南基于 eBPF 的内核追踪与性能分析工具箱 BCCBPF Compiler CollectieBPF可观测性性能剖析网络上一篇Windows平台Clang-tutorial构建指南修改SharedBuild.targets解决路径问题下一篇Godot 场景脚本拆分实操480 行 Enemy.gd 拆成 3 个文件后我改判定只动了 1 处创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

苏州艾涪轲功能材料有限公司技术实力如何
苏州艾涪轲功能材料有限公司技术实力如何

一卷胶带的分量在很多人眼里,胶带只是生产线角落里不起眼的辅料。可真正走进过工厂的人都明白,一卷胶带的失效,可能让一批电路板在波峰焊前功尽弃,可能让一条汽车线束在发动机舱的高温里慢慢松脱,也可能让动力电池模组… · 2026/9/25 8:08:21

xberg 中 force_ocr 与 disable_ocr 冲突的校验机制:从 C 绑定错误示例看 OCR 配置正确性
xberg 中 force_ocr 与 disable_ocr 冲突的校验机制:从 C 绑定错误示例看 OCR 配置正确性

后端AI 应用NLP 【免费下载链接】xberg Polyglot document intelligence with a Rust core: extract text, metadata, images, tables, and structured data from 106 formats across 140 file extensions, plus code intelligence for 371 languages. Fifteen bindings, with … · 2026/9/25 8:08:15

宏碁OMR318鼠标无需驱动:HID协议解析与原生控制指南
宏碁OMR318鼠标无需驱动:HID协议解析与原生控制指南

1. 这不是“驱动下载站”,而是宏碁暗影骑士OMR318鼠标的全链路驱动治理实录你搜“宏碁暗影骑士鼠标 omr318 驱动”,页面弹出一堆带“驱动总裁”“官网下载”字样的跳转链接,点进去要么是捆绑软件安装包,要么是404页面,… · 2026/9/25 8:08:15

解决适配375像素宽度667像素高度移动端方法:推荐一款非常好用的px转rem单位的VSCode插件px to rem  rpx (cssrem)
解决适配375像素宽度667像素高度移动端方法:推荐一款非常好用的px转rem单位的VSCode插件px to rem rpx (cssrem)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 8:46:30

Windows系统安装时间怎么查?注册表、PowerShell与文件时间戳
Windows系统安装时间怎么查?注册表、PowerShell与文件时间戳

“怎么查看Windows系统安装时间”这个问题,我在后台和群里被问过太多次了。网上一搜教程一大把,但至少有一半是错的,最典型的就是拿systeminfo一敲,然后把“系统启动时间”当成安装时间,这俩根本不是一回事。这篇文章我… · 2026/9/25 8:46:23

MySQL 8.0 Windows安装配置全指南:从环境变量到服务启动
MySQL 8.0 Windows安装配置全指南:从环境变量到服务启动

1. 为什么这次MySQL 8.0安装,我宁愿重装三遍也不跳过这一步你是不是也经历过:点开官网下载页面,看到“mysql-installer-community-8.0.xx.msi”这个文件名,心里一松——有图形界面,总比Linux下编译源码强吧&#xff1f… · 2026/9/25 8:46:17

Redis on Windows 3.2 发布说明深度解读:Windows 移植关键修复与集群故障转移演进
Redis on Windows 3.2 发布说明深度解读:Windows 移植关键修复与集群故障转移演进

缓存KV存储数据库后端 【免费下载链接】redis Native port of Redis for Windows. Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, Stre… · 2026/9/25 8:46:17

Kubernetes HPA实战:构建视频业务弹性伸缩与资源治理方案
Kubernetes HPA实战:构建视频业务弹性伸缩与资源治理方案

“video-use”标题看似简短,实则是我们生产环境里一套完整的 Kubernetes 资源治理方案。当时摆在我们面前的局面很现实:业务流量一天内有多个明显波峰波谷,白天人力高峰和晚间活动高峰交错出现,固定规格的节点池要么在高峰期被打满… · 2026/9/25 8:46:17

数据可视化工具选型与实战:ECharts、Superset、Grafana
数据可视化工具选型与实战:ECharts、Superset、Grafana

做数据这行久了,最常被问的一句话不是“这个数据怎么算”,而是“这个结果怎么给领导看”。数据可视化在大数据项目里从来都不是最后补一张图的事,从选型开始就决定了整个交付链路的走向。这篇东西把我这些年在大数据项目里实际摸过、踩过坑又… · 2026/9/25 8:46:17

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码