Kata IO 优化:使用 passthrough-fd 技术大幅提升 IO 性能

深入理解并优化Android中的文件描述符(FD) 本文将详细介绍Android中文件描述符(FD)的基本概念和使用场景,并分享如何在实际开发中进行文件描述符的优化,以提高应用的性能和稳定性。 阅读详情

13717697096e019f6512b50dab0cd424.gif

背景

当前 Kata 的 IO 实现路径过长,效率过低,复制 10GB 文件竟然需要长达 10 分钟的时间才能完成,针对此情况 Kata 社区成员 @lifupan[1] (Kata AC Member) 和 @frezcirno[2] 提交了一系列代码通过 passthrough fd 技术大幅改善和提升了 IO 性能。

传统的 IO

在使用 passthrough fd 技术(以下有时会简称为 pass-fd)实现 IO 以前,Kata 的 IO 流是通过 ttrpc + virtio-vsock 实现的。由 Host 上的 kata-shim(containerd-shim-kata-v2)进程来打开 containerd 通过 shimv2 接口传递过来的 FIFO 路径名,这时我们得到三个 fd(file descriptor,以下简称 fd),分别对应 stdin, stdout 和 stderr,kata-shim 中会启动三个线程分别处理三个 IO 流,这样等于在 kata-shim 中维护了三个 buffer,kata-shim 作为中间人要把 stdin, stdout 和 stderr 读到自己的 buffer 中之后才能通过 ttrpc over vsock 发送到最终目的地,在这个过程中 kata-shim 的三个线程作为 ttrpc over vsock 的 client 是必不可少的。下图展示了 stdin 在 kata 中原本的处理流程,为了简洁省略了 stdout 和 stderr。

b8620de6ff3f03f5ddeca38888374057.png
Kata 传统 IO 示意图

什么是 passthrough-fd 技术

pass-fd 技术是 dragonball 在其 hybrid-vsock 实现的基础上增加对 recv-fd 的支持,使得 dragonball 的 hybrid-vsock 模块可以直接接收文件描述符从而能够直接读取或写入 host 上的 fd,这样可以省略掉转发的中间层(因为原来 hybrid-vsock 不支持接收 fd,那么就只能增加一个中间层来读取 fd 的内容再转发给 hybrid-vsock 了),如下图我们省略了中间层相当于将 IO 流直接通到了 kata-agent 上。

c192f1ff96def912a8c3ee82c9af726a.png

passthrough-fd IO 示意图

passthrough-fd 技术细节

怎么打开和配置

首先 pass-fd IO 特性通过 kata 配置文件中的两个配置项 use_passfd_io 和 passfd_listener_port 来控制,第一个配置项 use_passfd_io 是特性的开关,第二个配置项则是用来控制 agent 端的 listen 端口的,默认值为 1027。

业务流程

1.kata-agent 端会启动一个 server listen 到配置项 passfd_listener_port 所指定的端口上。2.kata-shim 会在 create container 阶段将 stdin, stdout 和 stderr 的 fd 通过 sendfd 的方式发送给 dragonball 的 hybrid-vsock 模块,从而连接上第一步中 kata-agent 端启动的 server。3.agent 端的 server 会通过 accept 得到该连接的 fd 和 host-port,并以 host-port 作为标识将建立的连接保存下来,现在 agent 端得到了 stdin,stdout 和 stderr 三条连接并分别以 stdin-port, stdout-port 和 stderr-port 作为标识。4.随后 kata-shim 在通过 rpc 调用 agent 的 create_container 的时候会将 stdin-port,stdout-port 和 stderr-port 作为 rpc 请求发送给 agent。5.agent 在接到 create_container 的 rpc 请求后通过 stdin-port,stdout-port 和 stderr-port 将第三步中保存的三条连接分别取出然后分别跟容器的 stdin,stdout 和 stderr 建立转发关系【注释1】。

借用 github pull request 的图片可以跟直观的了解以上的业务流程:

3e56176016159c066db42eb9b55d5b46.png
passthrough-fd IO 业务流程图

性能对比

f194905fc1ee47739c724c851a4436c8.png
IO 速度对比图

在 IO 速度上,pass-fd IO 比原版 IO 提高了 185%。

d70b7855a13ecb0a6a6d802b3a92e009.png
CPU 使用率对比图

在 CPU 上 pass-fd IO 比原版 IO 节省了 20%。

写在最后

passfd-io 在性能和资源消耗上都比 Kata 原本的 IO 实现有着较大的优势,如果您正在使用 Kata 并且 vmm 选用了 dragonball 的话大可以尽快切换到 passfd-io 上去了。

本文中提到的相关 pull requests

  • dragonball: vsock add fifo/pipe stream support for passed fd hybridStream[3] 

  • vsock: passthrough fd support for hybrid mode[4] 

  • runtime-rs: improving io performance using dragonball's vsock fd passthrough[5]

注释

为什么不一步到位,将三个 vsock socket 直接作为 container 的 stdin, stdout 和 stderr 呢?我们其实是尝试过这么做的,但是经过测试发现 Linux 并不允许将一个 socket 直接作为 stdio,socket 只能通过转发来作为 stdio。

References

[1] @lifupan: https://github.com/lifupan
[2] @frezcirno: https://github.com/frezcirno
[3] dragonball: vsock add fifo/pipe stream support for passed fd hybridStream: https://github.com/kata-containers/kata-containers/pull/7585
[4] vsock: passthrough fd support for hybrid mode: https://github.com/openanolis/dragonball-sandbox/pull/278
[5] runtime-rs: improving io performance using dragonball's vsock fd passthrough: https://github.com/kata-containers/kata-containers/pull/7483

6a8a8d9b2e08cc4b3a209c3eb196de01.png

Kata Containers及相关vmm介绍 Kata Containers介绍 Kata Containers 是轻量级虚拟机的一种新颖实现,可无缝集成到容器生态系统中。 Kata Containers 与容器一样轻巧快速,并与容器管理层集成,同时还提供 VM 的安全优势。 Kata Containers 是两个现有开源项目的合并:Intel Clear Containers 和 Hyper runV。 新项目结合了两种技术的优点,共同愿景是重组虚拟化以适应容器原生应用程序,以提供容器的速度和 VM 的安全性。... 阅读详情

相关推荐

计算机导论期末知识点及试题总结 [近三万字总结 · 全]

计算机网络:计算机网络是利用通信线路连接起来相互独立的计算机的集合,其主要目的是实现数据通信和资源共享。 计算机病毒:破坏计算机功能或数据,影响计算机使用,并能自我复制的一组计算机指令或程序。 操作系统:操作系统是由程序和数据结构组成的大型系统软件,它负责计算机的全部软硬件的资源分配,调度和管理,控制各类程序的正常执行,并为用户使用计算机提供良好的环境。 高速缓冲储存器(Cache):位于cpu和内存之间的储存器,其特点是速度快,目的是是储存器的速度与cpu的速度相匹配。 总线:若干信号线的集合,是

这个人好有趣....hh 1万+

虚拟化技术之设备直接分配(passthrough)

1、设备直接分配技术         如何提高虚拟化设备的性能问题是虚拟化领域长期的研究重点。如前所述,设备模拟模型会导致虚拟化性能大大下降;泛虚拟化设备模型虽然在性能上拥有一定的优势,但由于需要修改操作系统,具有局限性.。并且当前的两种I/O设备虚拟化模型已无法满足高速的数据交换需求,应运而生的就是另外一种设备虚拟化模型——设备直接分配模型。         传统的实现I/O虚拟化的技术

lkn910907的专栏 8270

别再硬啃理论了!用Simulink双脉冲实验,5分钟搞懂MOSFET二极管反向恢复

本文通过Simulink双脉冲实验仿真,帮助电力电子学习者快速理解MOSFET二极管反向恢复特性。文章详细介绍了实验搭建步骤、关键参数配置及波形解析,将抽象理论转化为可视波形,大幅提升学习效率。特别适合需要直观理解反向恢复过程的工程师和学生。

weixin_30918633的博客 955

超融合产品集成 Kata 虚拟化容器技术的方案演进 | 龙蜥技术

龙蜥大讲堂78期回顾文来啦~完整直播回放已上线至龙蜥视频号【龙蜥社区小龙】,浪潮数据超融合云原生工程师王永超带大家了解 Kata 虚拟化容器技术,及超融合产品为集成 Kata 容器而进行技术方案演进历程,也分享了超融合 Kata 容器技术设计与应用。欢迎观看!

weixin_60347558的博客 1097

告别误唤醒!S32K3xx低功耗设计避坑指南:Fast Standby模式与WISR寄存器操作详解

本文深入解析了NXP S32K3xx系列MCU在低功耗设计中常见的误唤醒问题,并提供了基于Fast Standby模式的解决方案。文章重点剖析了DCMRWF5寄存器的配置方法、WISR/WISR_64唤醒中断状态寄存器的标志位处理策略,以及如何利用32KB Standby SRAM保存唤醒状态,从而帮助开发者构建稳定可靠的汽车电子低功耗系统。

weixin_29163857的博客 362

【katacontainer基础知识】kata-container介绍与原理

WHY ? 弥补了传统容器技术安全性的缺点,Kata Containers通过使用硬件虚拟化来达到容器隔离的目的。每一个container/pod 都是基于一个独立的kernel实例来作为一个轻量级的虚拟机。自从每一个container/pod运行与独立的虚拟机上,他们不再从宿主机内核上获取相应所有的权限。 WHAT ? kata container...

zhonglinzhang 2万+

22版本Altium Designer导出生产文件的规范化操作指南

本文详细介绍了PCB设计中的Gerber文件导出流程及相关文件生成方法。主要内容包括:1)Gerber文件导出的5个关键设置步骤;2)NC钻孔文件的导出方法;3)坐标文件的生成方式;4)文件打包规范要求必须包含Gerber文件、NC钻孔文件和坐标文件;5)文件提交的两种方式(新手推荐提交原始工程文件,量产推荐仅提交Gerber文件包)。文章还特别强调了单位一致性、精度验证等注意事项,为PCB设计文件的规范输出提供了完整指导。

qq_56506325的博客 1058

算法面试模板gh_mirrors/le/leetcode:15步搞定任何编程题

算法面试是每个程序员职业生涯中必经的关卡,而gh_mirrors/le/leetcode项目正是为这一挑战量身打造的完整解决方案。这个算法面试模板包含了从基础到高级的完整刷题体系,通过15个系统化步骤帮助你在编程面试中脱颖而出。 ## 📋 面试准备路线图 ### 第一步:理解问题本质 在开始编码前,确保你完全理解题目要求。问自己:输入是什么?输出是什么?边界条件有哪些? ### 第二步:暴

gitblog_00151的博客 433

含分布式光伏的IEEE 33节点配电网电压越限仿真分析

摘要 本文针对分布式光伏接入配电网引发的电压越限问题,基于IEEE 33节点系统开展仿真研究。首先分析了光伏出力的随机性和波动性特性,采用Beta分布和马尔可夫链方法建立光伏出力模型;其次在MATLAB/Simulink平台搭建完整测试系统,包含光伏模型、配电网线路模型和控制模块;最后通过多场景仿真定量分析了不同光伏渗透率和接入位置对节点电压的影响。结果表明:光伏渗透率提高会显著增加电压越限风险,特别是线路末端节点;光伏接入位置对电压分布具有决定性影响,馈线末端接入更易引发电压越限。研究为含高比例光伏的配电

huanghm88的专栏 321

一步一步教你如何安装IP-Guard(客户端WINDOWS篇)

1、安装完服务器后,在服务器右下角有一个IP-GUARD图标:如图 2、点图标右键选注册: 3、注册成功后, 4、在开始菜单里选生成客户端安装包。 5、生成客户端安装包成功,安装名字可以任意,但是最好是英文名字。 6、将客户端安装程序复制到桌面。 7、退出所有杀毒软件、安全卫士、电脑管家等然后运行 8、安装完成后,立即重启计算机。IPguard客户端安装完成。 9、这样在控制里就可以看到已经安装客户端的计算机,在线显示蓝色,灰色表示计算机已经离线货关机 ...

IP-Guard专栏 5627

Kata Containers:轻量级虚拟化容器的新里程碑

![Kata Containers Logo](https://object-storage-ca-ymq-1.vexxhost.net/swift/v1/6e4619c416ff4bd19e1c087f27a43eea/www-images-prod/openstack-logo/kata/SVG/kata-1.svg?response-content-disposition=inline;%2

gitblog_00017的博客 700

华为OD机试双机位C卷:打印机队列 (C++/Py/C/Java/Js/Go)

华为OD机试双机位C卷 打印机队列,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 打印机队列。

qq_45776114的博客 1793

推荐使用:Kata Containers - 高性能安全的容器运行时环境

推荐使用:Kata Containers - 高性能安全的容器运行时环境 在现代云计算和微服务架构中,容器已成为部署和管理应用的重要工具。而Kata Containers,作为一个开源项目,旨在提供一种轻量级虚拟化方案,实现了高性能与隔离性的完美结合,为您的业务带来更高级别的安全保障。 项目介绍 Kata Containers 是一个创新的容器运行时环境,它利用轻量级虚拟化技术,如QEMU和 ka...

gitblog_00053的博客 587

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Kata3.0.0 x LifseaOS x 龙蜥内核三管齐下!带你体验最新的安全容器之旅

袋鼠RunD正式成为安全容器上游社区最新3.0.0标准,龙蜥社区推出最新安全容器包,欢迎体验!

weixin_60347558的博客 952

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

纯新手kata开发环境配置避坑指南

最近在学习,配一个开发环境显然是首要的,尽管之前已经有一些开发环境的配置教程,但是由于笔者初步接触,许多环节都难以知其所以然,在开发环境的配置上屡屡踩坑,在终于完成环境的配置并初步学习过代码后,决定写下这篇粗略的指南希望能帮到有需要的人。Kata Containers Runtime-rs 安装教程 - Xuewei’s Blog使用 VirtualBox 安装虚拟机开发环境 · GitBook。

sawwasus的博客 1460

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

OCI,CRI,CRI-O,Containerd 名词解释

CRI,Containerd,OCI

weixin_40864891的博客 1万+

李福攀:Kata安全容器在蚂蚁集团的应用实践

2022年6月7日,在优快云云原生系列在线峰会第7期“安全技术峰会”上,蚂蚁集团高级技术专家李福攀分享了Kata安全容器及其在蚂蚁集团的落地实践。

m0_46700908的博客 2389

kata-container初探

概览 kata containers是由OpenStack基金会管理,但独立于OpenStack项目之外的容器项目。kata containers整合了Intel的 Clear Containers 和 Hyper.sh 的 runV,能够支持不同平台的硬件 (x86-64,arm等),并符合OCI(Open Container Initiative)规范,同时还可以兼容k8s的 CRI(Cont...

hdu_hanwei的专栏 2万+

Passthrough技术简介

     目前,Intel和AMD都在处理器架构中提供了对Passthrough I/O的支持。Intel将这种支持称为VT-d(Virtualization Technology for Directed I/O),AMD称之为IOMMU(I/O Memory Management Unit)。所以有必要了解一下Passthrough技术。   Passthrough I/O模型...

weixin_38169359的博客 2078

【归档】Kata Containers 2.0 介绍

Kata Containers 2.0 2.0.0 于 2020年10月19日 发布。文档地址:https://github.com/kata-containers/kata-containers/tree/2.0.0/docs Design 1. Kata Containers 架构 概览 Kata Containers 的交付物是一个 CRI 友好的 Shim(e.g. containerd-shim-kata-v2),在它的后面还有一个 CRI 友好的 API 库。 Kata Container

AIsland 的博客 4187

CRI 与 ShimV2:一种 Kubernetes 集成容器运行时的新思路 ...

作者|张磊 Kubernetes 项目目前的重点发展方向,是为开发者和使用者暴露更多的接口和可扩展机制,将更多的用户需求下放到社区来完成。其中,发展最为成熟也最为重要的一个接口就是 CRI。2018 年,由 containerd 社区主导的 shimv2 API 的出现,在 CRI 的基础上,为用户集成自己的容器运行时带来了更加成熟和方便的实践方法...

测试0901-1 324

干货|认识kata-containers

点击上方“中兴开发者社区”,关注我们每天读一篇一线开发者原创好文认识kata-containers 1、kata-containers是什么 2、在容器生态系统中的位置 3、包含的组件及其功能介绍 4、现状以及后续的计划 5、在Docker中的使用 本文主要让大家认识什么是kata-containers,它在容器生态系统中的位置,如何跟现有容 器系统进行集成。最后介绍如何在Docker中使用kat

中兴开发者社区 1万+

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 289

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 346

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 130
上一篇: SOFA Weekly|Koupleless 社区会议预告、社区本周贡献、SOFA 六周年议题资料获取、本周推荐阅读...
下一篇: 成都召集令!「隐语城市行 x 蓉数大讲堂」共探数据要素流通前沿动向
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值