Kata Containers Runtime-rs 中的 Passthrough-FD IO:Dragonball VMM 直通式进程 IO 优化实战

发布时间:2026/9/25 13:58:10

Kata Containers Runtime-rs 中的 Passthrough-FD IO:Dragonball VMM 直通式进程 IO 优化实战 云原生容器运行时【免费下载链接】kata-containersKata Containers is an open source project and community working to build a standard implementation of lightweight Virtual Machines (VMs) that feel and perform like containers, but provide the workload isolation and security advantages of VMs. https://katacontainers.io/项目地址https://gitcode.com/gh_mirrors/ka/kata-containers点击查看免费下载Passthrough-FDpass-fd是 Kata Containers 为优化容器进程 IO 性能引入的一项关键技术它让 Dragonball VMM 的 hybrid-vsock 直接接收并传递宿主机文件描述符从而绕过 kata-shim 的中转缓冲层显著降低 IO 延迟与 CPU 开销。本文以 docs/how-to/how-to-use-passthroughfd-io-within-runtime-rs.md 为骨架结合 runtime-rs 与 kata-agent 的源码实现完整讲解其工作原理、端到端数据流以及配置启用方法读者读完后可掌握该特性的适用边界、底层调用链与实际配置方式。重要限制仅 Dragonball VMM 支持在深入技术细节之前必须先明确该特性的适用范围专属支持 Dragonball VMMPassthrough-FD 目前只在 Kata Containers 内置 VMM——Dragonball 上实现并生效不支持的 VMMQEMU、Cloud HypervisorCLH、Firecracker 等其他 VMM 当前均不支持该特性。从源码结构看这一点与 runtime-rs 的 hypervisor 抽象设计一致虽然 hypervisor 接口 中定义了get_passfd_listener_addr()方法QEMU、CLH、Firecracker、OpenVMM、Remote 等实现均有对应桩实现但真正完整落实 FD 直通链路的只有 Dragonball 路径。runtime-rs 在创建 hypervisor 实例时也仅在匹配到 Dragonball 且开启了use_passfd_io的情况下才会调用set_passfd_listener_port()注入监听端口参见 lib.rs。背景传统 IO 路径的瓶颈在引入 Passthrough-FD 之前Kata 的容器进程 IO 流stdin/stdout/stderr是通过ttrpc virtio-vsock实现的数据流如下这一路径的核心问题在于 kata-shim 扮演了中间人角色kata-shimcontainerd-shim-kata-v2通过 shimv2 接口打开 containerd 提供的 FIFO 管道得到 stdin、stdout、stderr 三个 FDkata-shim 为这三条流分别管理三个独立线程每个线程都必须先把数据从 FD 读入 shim 内部缓冲区再通过 ttrpc 经 vsock 转发到 guest 内的 kata-agent最终才到达容器进程。多线程代理加上三层缓冲FD → shim buffer → ttrpc/vsock → agent导致数据路径过长、效率低下。原文档给出的一个直观例子是复制 10GB 文件可能耗时长达 10 分钟。这一痛点正是 Kata AC 成员 lifupan 与 frezcirno 引入 passthrough-fd 技术优化的动因。什么是 Passthrough-FDPassthrough-FD 的核心思想是让 VMM 直接处理文件描述符。它增强了 Dragonball VMM 的 hybrid-vsock 实现使其支持 recv-fd接收带 FD 的报文从而把宿主机上的 FD 直接穿透到 kata-agent而不是让 kata-shim 先把数据读进自己的缓冲区再转发。启用后的数据流变为对比传统路径可以发现kata-shim 的缓冲代理层被整体移除。hybrid-vsock 模块可以直接从 Host 接收文件描述符系统将 Host 的 FD 直通给 kata-agentIO 流在 guest 环境中被直接接通消除了 kata-shim 中的代理逻辑。端到端工作原理整个过程的完整时序如下整个过程分为六个关键步骤Agent 初始化kata-agent 启动一个服务器监听passfd_listener_port指定的端口。对应实现见 main.rs当配置的passfd_listener_port ! 0时调用passfd_io::start_listen(port)。FD 传输在容器创建阶段kata-shim 通过 sendfd 机制将 stdin、stdout、stderr 三个 FD 发送给 Dragonball hybrid-vsock 模块。连接建立借助 hybrid-vsock这些 FD 连接到第 1 步中 agent 启动的服务器。标识与保存agent 的服务器调用accept()获得连接 FD 及其对应的 host-port并以 host-port 作为唯一标识保存连接。此时 agent 持有三条已建立连接分别由 stdin-port、stdout-port、stderr-port 标识。RPC 映射kata-shim 调用create_containerRPC 时把这三个端口标识一并放入请求。最终绑定agent 收到 RPC 后根据传入的端口从保存的连接中取出对应连接直接绑定到容器进程的标准 IO 流上。源码印证kata-agent 侧的实现细节kata-agent 侧的完整逻辑集中在 passfd_io.rsstart_listen(port)通过VsockListener::bind(libc::VMADDR_CID_ANY, port)绑定到 guest 内任意 CID 的指定端口循环accept()并把(peer port → VsockStream)立即插入全局映射HVSOCK_STREAMS注释明确说明尽快插入映射以最小化竞态风险take_io_streams(stdin_port, stdout_port, stderr_port)按端口从映射中取出流端口为0时返回None表示该流未启用直通回退到常规路径若流已被 accept 但尚未插入映射会最多重试 3 次、每次间隔 100ms最终组装成rustjail::process::ProcessIo供容器进程使用。调用点位于 rpc.rsdo_create_container在创建容器伊始即调用take_io_streams且注释强调先创建 proc_io若后续出错可确保 IO 流被正确关闭。源码印证runtime-rs 侧与配置的传递链路runtime-rs 侧的配置传递链路完整闭环从配置到内核参数再到 RPC 请求配置解析后runtime-rs 在创建 hypervisor 时仅 Dragonball 且use_passfd_io true调用set_passfd_listener_port()见 lib.rsDragonball 启动时将该端口以内核参数agent.passfd_listener_portport的形式注入 guest见 inner.rskata-shimruntime-rs 容器创建路径通过get_passfd_listener_addr()拿到 hybrid-vsock 的 UDS 路径与监听端口见 inner_hypervisor.rs容器创建时调用init_process.passfd_io_init(hvsock_uds_path, port)建立三条直通连接并把stdin_port、stdout_port、stderr_port填入CreateContainerRequest发给 agent见 container.rs。如何启用 Passthrough-FD IOPassthrough-FD 由 Kata 配置文件中的两个参数控制参数含义默认值use_passfd_io布尔开关启用/禁用 Passthrough-FD IO 特性falsepassfd_listener_portkata-agent 监听 FD 连接的端口1027在 runtime-rs 的 Dragonball 配置模板 configuration-dragonball.toml.in 中该特性默认即为开启状态配置写法如下... # If enabled, the runtime will attempt to use fd passthrough feature for process io. # Note: this feature is only supported by the Dragonball hypervisor. use_passfd_io true # If fd passthrough io is enabled, the runtime will attempt to use the specified port instead of the default port. passfd_listener_port 1027启用步骤与注意事项确保使用 Dragonball VMMruntime-rs 的configuration-dragonball.toml.in对应配置将use_passfd_io设为true按需调整passfd_listener_port默认1027该端口会同时配置给 runtime-rs 与 kata-agent若passfd_listener_port配置为0kata-agent 将不会启动 passfd 监听见 main.rs此时即便use_passfd_io true也无法生效需保持非 0 值。配置项的源码映射runtime-rs 侧use_passfd_io与passfd_listener_port定义在 runtime.rs其中passfd_listener_port带默认值函数default_passfd_listener_port()即1027agent 侧对应配置项为agent.passfd_listener_port定义在 agent.rs其解析逻辑位于 config.rs并通过agent.passfd_listener_port内核参数注入常量定义见 mod.rs。这种一份配置、两端生效的设计确保了 runtime-rs 与 kata-agent 对监听端口理解一致是直通链路能够正确建立的前提。迁移视角Go runtime 与 Runtime-rs 的配置对应若读者正在从传统 Go runtime 迁移到 runtime-rs可在 migrating-config-go-runtime-to-runtime-rs.md 中找到两个配置项的对应关系passfd_listener_port在两套 runtime 中均表示 fd-passthrough IO 特性所用端口agent 侧迁移时注意核对端口取值与use_passfd_io开关是否一致。总结Passthrough-FD 通过FD 直通重构了 Kata 容器进程 IO 的数据通路kata-shim 不再充当数据搬运工hybrid-vsock 直接接收宿主机 FDkata-agent 以端口为索引完成流与容器标准 IO 的绑定。这一设计从根源上消除了多线程代理与缓冲拷贝带来的开销是 Kata Containers 针对 IO 性能优化的重要实践。其完整链路在仓库中均可验证从 configuration-dragonball.toml.in 的配置入口到 runtime-rs 侧 container.rs 的端口注入再到 kata-agent 侧 passfd_io.rs 的监听与流管理形成了清晰可追踪的实现闭环。使用前请务必确认 VMM 为 Dragonball并保持use_passfd_io true与passfd_listener_port非 0 的配置前提。赞分享云原生容器运行时【免费下载链接】kata-containersKata Containers is an open source project and community working to build a standard implementation of lightweight Virtual Machines (VMs) that feel and perform like containers, but provide the workload isolation and security advantages of VMs. https://katacontainers.io/项目地址https://gitcode.com/gh_mirrors/ka/kata-containers点击查看免费下载上一篇终极直播录制解决方案40平台自动监控与智能录制完整指南下一篇如何用开源工具实现40平台7×24小时直播自动录制DouyinLiveRecorder深度解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/25 13:58:10

模型预测控制MPC实战:从PID瓶颈到QP求解与轨迹跟踪

1. 从一个倒立摆说起:为什么PID搞不定,MPC能搞定如果你做过倒立摆、无人机悬停或者自动驾驶小车的轨迹跟踪,大概率经历过这样的场景:PID参数调了一整天,小车勉强能走直线,但一遇到弯道就画龙,速…

2026/9/25 15:03:14

Atlas 300V 24G部署YOLO实战:从推理加速卡到全流程调优

1. 先说清楚:Atlas 300V 24G到底是什么设备最近总有人拿“atlas”来问我,问得最多的两句话就是:Atlas 300V 24G到底是什么?它是不是一块运算加速卡?能不能用来部署YOLO?我自己在接触昇腾这套东西之前也犯过…

2026/9/25 15:03:14

MFC修改鼠标光标形状:OnSetCursor与SetCursor实战配置

/* 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 15:03:14

open-code-review:本地化、可审计的AI代码审查实践

1. 这不是又一个“AI写代码”工具:open-code-review 的真实定位与设计哲学open-code-review 这个名字乍看容易被归类为“用大模型做代码审查”的又一个 CLI 工具——毕竟搜索热词里堆满了 codex cli、zcode cli、trae cli、claude code cli……满屏都是“CLI LLM …

2026/9/25 15:03:14

Atlas 300V 24G NPU部署YOLO实战:从模型转换到推理加速

1. 从热搜问题说起:Atlas 300V 24G到底算什么卡先直接回答那个被问了很多次的搜索词:Atlas 300V 24G是运算加速卡,但它不是传统意义上的GPU加速卡,而是一张基于昇腾310P芯片的AI推理加速卡(NPU)。这个区别非…

2026/9/25 14:58:13

果味黄酒和梅酒、果酒、预调鸡尾酒有什么区别?一篇讲清楚

超市货架上低度甜酒越来越多:梅酒、果酒、预调鸡尾酒,还有果味黄酒。很多人看着都差不多,买回家才发现甜度、基酒和喝法差别很大。这篇把果味黄酒和这三类酒放在一起比,帮你弄清楚各自是什么、该怎么选。 一、基酒不同&#xff0c…

2026/9/24 20:24:47

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/25 0:02:35

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:02:35

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:02:35

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑