新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/11/11 12:56:58来源:尧图网络
在 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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/10 4:49:37

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/10 19:42:40

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/11 9:31:44

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/11 5:36:08

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/10 15:15:31

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/10 17:14:10

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉