利用DPU/IPU 卸载容器镜像以及文件系统的相关操作

news2024/11/24 21:09:21

1、背景和动机

随着云原生(Cloud Native)被工业界广泛接受,容器(container)在数据中心被广泛部署,其地位正在逐步取代传统的虚拟机(Virtual Machine)。当然目前依然存在用轻量虚拟机来运行和部署容器,比如使用Kata Containers。简单来讲, 容器化是将程序的代码以及相关的软件库(包括对操作系统依赖库等)打包在一起, 创建可在任意基础架构上一直运行的轻量级执行文件(容器)。容器通常以镜像(image)的形式进行发布,一般用户可以直接通过一些轻量级容器运行工具,比如containerd,docker等进行运行。更高级一些,用户可以通过K8S (Kubernetes)这样的开源系统,进行容器的自动部署,扩展和管理。

随着容器技术的广泛普及,用户对容器技术的优化需求也越来越高。比如大规模部署容器的时候,客户希望能够在非常短的时间内启动容器。举个实际的应用场景,FaaS (Function as a service)目前也会采用容器的方式进行部署和扩展。一般来讲,如果使用容器来部署FaaS,可以采用以下的几个步骤:

  1. 根据用户的需求,将所要执行的函数,进行编译生成二进制文件,将可执行二进制文件与所需的库打包到文件系统,并且生成相应的镜像。

  2. 镜像被调度到某个节点, 尽快准备好容器执行环境,包括将container的镜像解包到文件系统中。

  3. 启动容器(包括计算,网络环境以及文件系统),然后在选定的容器中执行 FaaS 应用程序。

对于FaaS这样的程序,快速启动在计算以及网络方面都有相应的优化方案,在这篇文章中不再赘述。但是对于容器镜像的下载以及容器文件系统的构建,是我们今天讨论的重点。本文提出DPU (Data Processing Unit)/ IPU (Infrastructure processing Unit) 可以对容器的镜像以及文件系统的构建进行相应的卸载(offloading) 。//由于DPU 和IPU 是类似概念,文中后续内容主要采用IPU 这个说法。

2、解决方案

正常的容器启动,首先需要下载容器(container)的镜像(image),然后把下载来的容器的镜像层进行解压(unpack)操作,接着选择容器的一个Runtime time进行启动。当然目前也有一些工作,是在容器生命管理周期软件(诸如containerd)中采用特定snapshot实现,从而在容器启动后可以按需获取解压后的镜像内容。我们在2023年SDC会议上的议题 [1] 提出可以使用IPU进行容器启动前镜像的准备工作,包括镜像的管理以及unpack操作。那么容器的镜像将完全放入IPU,而不用存放在主机中。具体的做法:

  1. 容器的管理软件需要和IPU进行通信,即让IPU 完成整个容器镜像的准备工作;

  2. 接着IPU 通知主机中的管理软件(诸如containerd)镜像准备已经完成;

  3. 容器的管理软件进行正常的容器启动。

使用这样的方法后:1把容器镜像的管理,包括下载以及caching 完全放入IPU中;2把每个容器的镜像解压(unpack)操作也放入IPU。镜像可以直接解压到IPU中"块设备服务"的服务软件 (i.e., 基于SPDK [3]的virtual storage block service) 所提供的bdev中,然后通过PF/VF的形式透传给主机或者主机中运行容器的轻量级虚拟机。接着主机中的容器管理软件可以挂载相应的块设备,然后得到容器的rootfs 层,进行容器的正常启动。因为IPU中的块设备服务软件,可以提供块设备的快照(snapshot)和克隆功能(Clone),那么大规模部署中, 容器的rootfs可以使用相对较小的代价进行构建,因为不同的容器可以进行共享解压后的bdev,从而进一步提高容器启动速度,并提升空间使用效率。

此外,IPU也提供了一些基于硬件的加速器(诸如Intel E2000 IPU的LCE),可以进行容器镜像解压缩的加速。在这篇文章中, 我们会详细介绍这个方案,并且用简单的例子进行佐证。总的来讲,本文提出的方案可以很好的把IPU和云原生有机的结合起来。

本文的解决方案 VS 已有的块存储卸载方案

图1 给出了已有的IPU/DPU 对于主机虚拟存储设备的模拟,IPU通过PCIe协议,通过VF/PF 给主机提供一些虚拟的块设备,诸如Virtio-blk,virtio-SCSI, NVMe。然后主机通过相应的驱动,就可以操纵这些虚拟块设备。在这样的虚拟设备上,也可以创建文件系统,然后运行相应的程序。这样的卸载在多数场景下,满足了用户的需求,但是也有一定的局限性--用户还是需要构建自己的文件系统,不能进行更好的资源共享,比如文件系统级别的共享,包括PageCache等。

7cd8dc5903a6c7841f6c084ed6210ad6.jpeg

图 1 利用IPU 给主机提供块设备[4]

尤其是针对容器相关的应用(诸如FaaS), 这样的卸载显得不太彻底。比如对于容器来讲,一般会使用overlayFS的方式,进行解压后的镜像层管理。如果IPU 仅仅卸载块设备,而没有额外的功能,那么这样的事情都需要主机去完成,那么就会消耗主机大量的CPU 资源。

为此,我们提出IPU可以进行一些软件层面的增强,更好的服务这样的场景,如图2所示。

7ef27b700b8f096c0c23c31b022fff60.png

图 2 IPU 进行扩展支持容器镜像以及文件系统构建的卸载

此外,在图3中也给出了IPU 怎么和容器管理软件通信,进行有效的卸载。图3中存储的卸载服务软件,主要基于SPDK [3] 实现。FaaS/Container使用场景的卸载大致有以下步骤:

  1. Orchestrator(如K8S/containerd/runC|Kata Containers)收到容器运行请求后与IPU通信。然后IPU接收到主机中来自上层运行软件(image-mgnt client)的请求。

  2. Image-mgnt 服务从镜像注册中心下载动态镜像和基础镜像。

  3. Image-mgnt 服务将镜像解压到到指定的 Bdev(例如图中的 Bdev2)。

  4. 然后,基于SPDK的存储服务指定传输层(例如,NPI for NVMe)将相应的包含容器文件系统的块设备(例如途中的Bdev2)通过 VF 或 PF 导出到主机。IPU通过RPC通知容器软件。

  5. 当 VM 或主机内核看到 VF/PF 时,加载相关设备驱动程序后最终获得块设备。然后容器管理软件将块设备(例如 /dev/sdX)通过IPU 给知的信息,通过相应的文件系统格式挂载到特定的挂载点。

通过这样的方式,上层容器管理软件就可以直接看到容器需要的文件系统,然后进行后续的容器的启动。在这个过程中,主机中不需要对容器的镜像下载以及文件系统的构建,花费额外的CPU 资源,为此可以节省出更多的CPU 资源,进行其他更重要的服务。

24d8e4e0b7af26ea876d5d3801ac97d8.png

图 3 IPU 对容器文件系统构建的具体卸载流程图

3、讨论

这是一个可行的方案,在IPU中利用基于SPDK的存储服务,利用基于blobstore bdev 的clone/snapshot的功能,也可以实现一些简单的容器overlayfs的sharing。举个例子,比如主机需要启动50个类似的容器。这些容器都有两层镜像:一层是ubuntu22.04 基础镜像 (命名为ubuntu层),一层是每个容器自己的镜像层。那么对于ubuntu层相关的文件系统,可以在SPDK 中选取一个blobstore bdev ,加压镜像灌入相应的文件系统,然后对生成的基础bdev 进行clone操作,就可以生成很多不同的bdev,那么每个容器就可以基于各自clone后的bdev,进行后续文件系统的构建,最后IPU再把已经准备好文件系统的bdev 暴露给主机。此外对于K8S的一些容器管理,都是以pod 单位的,那么在一个bdev 中,也可以准备同一个pod 中不同容器的文件系统,这些都是没有问题的。对于怎么用IPU 构建相应的可以给容器使用的bdev,可以参考我们在SDC2022的presentation [1]或者SPDK 虚拟论坛2022的presentation [6] 。

目前我们的实践工作,主要解决了容器镜像卸载以及文件系统构建的工作,但是并没有解决主机在运行过程中,对于PageCache的共享。我们知道目前Kata Containers中可以使用virtiofs 把主机中的文件系统,直接共享给Kata Containers 管理的虚拟机,然后供容器使用,这样可以在运行过程中共享PageCache。不过这应该是在同一个Host OS 的环境下进行共享。

最近,我们观察到IBM 正在使用Bluefield进行一些virtio-fs [5] 卸载的POC 工作,参见[2] 。虽然主机和IPU 依然通过PCIe进行数据交换,但是不在是virtio-blk或者NVMe之类的块协议,而是带有文件系统信息的virtio-fs的协议。然后在IPU 中,对这些卸载的文件操作,可以卸载到本地的文件系统或者远端的NFS 系统。这样的工作非常有价值,但是怎样在主机和IPU 中共享Page Cache 依然是具有挑战性的工作,这个和在同一个host OS 环境中有很大的区别。也就是主机和IPU 需要协商好一些内存空间,进行一些page cache的共享,才能进一步加快container的启动,或者在container使用过程中进行共享。笔者认为,也许未来CXL(Compute Express Link)等技术可以解决这样的问题。

4、总结和后续

这篇文章中主要介绍了怎样使用IPU 对容器的镜像下载,文件系统的构建进行卸载。目前传统的IPU在存储方面,主要是对主机上块设备的一个卸载。文中的解决方案,主要针对IPU 对块设备的卸载,做了一定程度的扩展,简而言之,就是让IPU参与容器文件系统的构建,在IPU中准备好容器所需要的文件系统,依然通过块设备的方式暴露给主机使用。主机通过和IPU的交互,可以正确的使用块设备中的文件系统,进行容器的快速启动。此外,IBM开展了文件系统直接采用DPU/IPU 进行卸载 (即virtio-fs的卸载) ,提出了DPFS [2], 也就是使用直接卸载文件系统而不是块设备存储。这样的工作,目前在性能和功能方面都有一定的局限性,不过随着CXL技术和IPU的配合,也许可以达成,使得主机对于文件系统的卸载真正达成。

Reference

[1] Accelerating FaaS/container Image Construction via IPU.

https://www.snia.org/sites/default/files/SDC/2022/SNIA-SDC22-Yang-Li-Zeng-Accelerating-FaaS-Container-Image-Construction-via-IPU_0.pdf

[2] IBM DPFS.

https://github.com/IBM/DPFS

[3] SPDK website.

http://spdk.io

[4] VirtualBlockStorage. https://ipdk.io/documentation/Recipes/VirtualBlockStorage/

[5] Virtio-fs.

https://vmsplice.net/~stefan/virtio-fs_%20A%20Shared%20File%20System%20for%20Virtual%20Machines%20%28FOSDEM%29.pdf

[6] 利用IPU 加速FaaS/container image 构建.

https://ci.spdk.io/download/2022-virtual-forum-prc/D2_7_Ziye_Accelerating_FaaS_container_Image_Construction_via_IPU.pdf

作者:杨子夜 黄薪宇 刘孝冬 曾军

50908b6b5ddf1acfee6ea40d1372d01a.jpeg

转载须知

DPDK与SPDK开源社区

公众号文章转载声明

推荐阅读

TADK v22.03 Release

手把手教你让英特尔®E810飞起来

2a1dac94b1f1c9b86c18d8657340f889.jpeg

841ba0edf9e7f5382bdf4e072a013f74.gif

点点“赞”“在看”,给我充点儿电吧~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/648394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA实现USB3.0 UVC 相机OV5640摄像头输出 基于FT602驱动 提供工程源码和QT上位机源码

目录 1、前言2、UVC简介3、FT602芯片解读4、我这儿的 FT601 USB3.0通信方案5、详细设计方案基于FT602的UVC模块详解 6、vivado工程详解7、上板调试验证8、福利:工程代码的获取 1、前言 目前USB3.0的实现方案很多,但就简单好用的角度而言,FT6…

2023 年 8 个最佳 React UI 组件库和框架

将展示八个最好的 React UI 组件库和框架,如下表所示:(星标加关注,开车不迷路) 「React Bootstrap:」一个与 Bootstrap 框架集成的实用的 React UI 库。「Grommet:」如果您想在设计中实现可访问…

基于Servlet+mysql+jsp学生宿舍信息管理系统

基于Servletmysqljsp学生宿舍信息管理系统 一、系统介绍二、功能展示1.用户登陆2.学生-主页面3.学生-缺勤记录4.学生-修改密码5.宿舍管理员-主页面6.宿舍管理员-学生查看7.宿舍管理员-缺勤记录8.系统管理员-宿舍管理员管理9.系统管理员-学生管理10.系统管理员-宿舍楼管理11.系统…

中高级前端面试秘籍,为你保驾护航金三银四

引言 各位大佬在评论中指出的种种问题小弟万分感谢。由于这一年来,出了不少变动,所以才一直耽搁,现已修复各位大佬指出的问题和建议。请大家放心食用!感恩~🥳 当下,正面临着近几年来的最严重的互联网寒冬&a…

《文渊》期刊简介及投稿邮箱

《文渊》期刊简介及投稿邮箱 《文渊》是正规国家级连续型电子期刊,新闻出版广电总局可查,国家级教育核心刊物、中国核心期刊数据库收录期刊。 主管单位:中国出版传媒股份有限公司 主办单位:中国出版传媒股份有限公司 文渊&…

变量的线程安全分析

目录 变量的线程安全 常见线程安全类 变量的线程安全 成员变量和静态变量是否线程安全? 如果它们没有共享,则线程安全 如果它们被共享了,根据它们的状态是否能够改变,又分两种情况 如果只有读操作,则线程安全如果…

【30天熟悉Go语言】7 Go流程控制之分支结构if、switch

文章目录 一、前言二、if1、单分支Go语法规范: 2、双分支Go语法规范 3、多分支 三、switch1、基本语法2、语法规范1)switch2)case3)default 四、总结 一、前言 Go系列文章: GO开篇:手握Java走进Golang的世界…

手机APP大用户并发测试

一、背景 随着智能手机近年来的快速增长,从游戏娱乐到移动办公的各式各样的手机APP软件渗透到我们的生活中,对于大型的手机APP测试不仅要关注它的功能性、易用性还要关注它的性能,最近发现LoadRunner12可以对手机APP做性能测试,但…

寻味一座城,从吃吃吃开始

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 小黑 运营 / SandLiu 卷圈 监制 / 姝琦 文案 / 小黑 产品统筹 / bobo 场地支持 / 声湃轩天津站 为了再也不用在节目里喊“我们真的不是美食节目”,2023年7月起,原汤话原食将更名为“记者下班”…

记录--极致舒适的Vue可编辑表格

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 使用ElementPlus的Table啥都好,就是没有可编辑表格!!!😭 既然UI库不支持,那我们实现一个可编辑表格是很难的事么?&am…

Avalon 学习系列(五)—— 过滤器

Avalon 本身有很多过滤器,例如 date、number等文本过滤器、循环过滤器;avalon 也提供了方法可以根据需求自定义过滤器。 示例: (1)定义一个 myFunc 的个性化过滤器,并加在元素上; &#xff0…

一文带你玩转 RustChinaConf 2023,内含赞助商展位活动福利和 Workshop 介绍

除了两天干货满满的会议外,RustChinaConf 的赞助商也准备了精美的周边礼物等待大家去打卡。每位参会者在签到的时候会获得一张集章卡,集齐上面所有的章,可至签到处兑换精美礼物一份。偷偷剧透一下,奖品有大家喜欢的 Rust 小螃蟹玩…

【计算机网络】第一章 概述(上)

文章目录 第一章 概述1.2 因特网概述1.2.1 网络、互连网(互联网)和因特网1.2.2 因特网发展的三个阶段1.2.4 因特网的组成 1.3 三种交换方式1.3.1 电路交换1.3.2 分组交换1.3.3 报文交换1.3.4 三种方式对比 1.4 计算机网络的定义 第一章 概述 1.2 因特网概…

「深度学习之优化算法」笔记(二)优化算法的分类

1. 优化算法的分类 1.1常见的优化算法 在分类之前,我们先列举一下常见的优化算法(不然我们拿什么分类呢?) 1.遗传算法Genetic algorithm 2.粒子群优化算法Particle Swarm Optimization 3.差分进化算法Differential Evolution 4.人…

springboot第27集:springboot-mvc,WxPay

在数据库中,DISTINCT 关键字用于查询去重后的结果集。它用于从查询结果中去除重复的行,只返回唯一的行。 要使用 DISTINCT 关键字,可以将其放置在 SELECT 关键字之前,指示数据库返回去重后的结果。 请注意,DISTINCT 关…

Linux常用命令——getenforce命令

在线Linux命令查询工具 getenforce 显示当前SELinux的应用模式,是强制、执行还是停用。 补充说明 grename命令可以重命名卷组的名称。 语法 getenforce例子 查看当前SELinux的应用模式。 [rootlocalhost ~]# getenforce Enforcing在线Linux命令查询工具 原文…

ChatGPT时代,我的新书《智慧共生》上市了

告诉你一个好消息,我在人民邮电出版社的第二本书《智慧共生:ChatGPT 与 AIGC 生产力工具实践》刚刚上市,你现在就可以在 京东 和 当当买到了。 有人把 2022 年称作 AIGC(人工智能生成内容) 的元年,我深表赞…

浅谈数据中台之数据开发

目 录 01 前言‍ 02 中台概念及背景 ‍‍‍‍‍‍‍ 03 数据中台建设方法‍‍‍‍‍‍ 04 数据开发实践 01‍ 前言‍‍ 2015年阿里在国内首次提出了中台概念,由阿里引领发展,迅速在互联网企业中形成了一股浪潮。在数字化转型的道路上,为了…

【AUTOSAR】UDS协议的代码分析与解读(五)----ECU诊断服务

8 诊断服务 8.1 总览 此章节定义了本规范中可使用的诊断服务及其执行规则。 下表列出了h事业部定义的所有UDS诊断服务。ECU最终实现与下述定义不符之处必须得到h事业部 的认可。服务实现内容需在零部件诊断规范中详细说明。 表 9 诊断服务支持列表 诊断服务列表 APP Bootlo…

【手撕代码】同步 FIFO、LIFO/Stack

FIFO 是FPGA设计中最有用的模块之一。FIFO 在模块之间提供简单的握手和同步机制,是设计人员将数据从一个模块传输到另一个模块的常用选择。 在这篇文章中,展示了一个简单的 RTL 同步 FIFO,可以直接在自己的设计中配置和使用它,该设…