网易首页 > 网易号 > 正文 申请入驻

递归chown从4秒变1分钟,他们用块设备把性能拉回12倍

0
分享至

一个递归 chown 命令,在容器里跑完只要四秒。搬到虚拟机里,同样的命令花了一分多钟。这不是配置写错了,是文件系统架构选错了路。


Modal 团队最近把 VM Sandboxes 推上正式可用,支撑的是越来越复杂的智能体工作负载。沙箱里的一切,归根结底都压在文件系统的速度上。他们把这段从踩坑到翻盘的过程完整讲了一遍。

起点:ImageFS 和亚秒级冷启动

2022 年 4 月,Modal 用 ImageFS 解决了容器文件系统的问题。这是一套分布式的惰性加载文件系统:启动时只拉取最少的元数据,通过一个 Rust 写的 FUSE 服务挂载,再把文件呈现给容器。文件内容按需从分层的内容寻址缓存里取,从本地内存到区域 CDN,再到全局对象存储。后台还有智能预取,访问几乎总能命中本地磁盘或内存里的文件。

这是 Modal 容器能在一秒内冷启动的主要原因。传统 Docker 要花几分钟拉取和解包镜像层,ImageFS 只需要在启动前加载元数据索引,毫秒级完成。而且它虽然是 FUSE 实现,速度并不慢——只读的特性让它能告诉内核激进缓存每一个应答过的请求。

写操作交给 OverlayFS:把只读的下层(也就是 ImageFS)和可写的上层合并,所有文件改动都落在上层文件的副本上。

虚拟机里的第一版:virtio-fs

设计虚拟机时,团队想继续复用 ImageFS,把容器那套体验继承过来。问题是容器和宿主机共享 Linux 内核,能直接用 ImageFS;虚拟机有完整的客户机内核,碰不到宿主机的文件系统。

virtio-fs 就是补这个缺口的:它把客户机虚拟机的文件系统操作转发到宿主机的 virtiofsd 守护进程,由后者安全地作用在共享目录上。指向 ImageFS,虚拟机就能继承惰性加载、亚秒冷启动和分层缓存。

确实跑通了。虚拟机从同样的镜像启动,冷启动性能和容器一致。于是他们准备发布。

但冷启动快,不等于用起来快。

virtio-fs 只是在原有 ImageFS 栈上又加了一层,多做事自然更慢。可实际差距远超预期:递归 chown 从四秒变成一分多钟,pnpm install 和 bun install 这类真实负载慢了三倍,ripgrep 性能直接断崖。

拆解 bun 和 pnpm 的系统调用后,他们做了合成微基准测试,对比三种情况:宿主机直接用 ImageFS、gVisor 后面用、虚拟机里走 virtio-fs。结果是 stat 在 virtio-fs 下慢 2 倍,chown 慢 6 倍以上。

追踪 virtiofsd 的系统调用,chown 的真相浮出来了:

  • chown 以 fchownat 离开客户机进程,进入客户机内核;
  • 客户机内核检查并清除文件能力,向虚拟机外发一个 FUSE_GETXATTR 给 virtiofsd,后者检查文件并回复,消耗 3 次宿主机系统调用;
  • 客户机内核还要检查并清除 setuid 位,再发一个 FUSE_GETATTR 给宿主机;
  • 最后所有权变更以 FUSE_SETATTR 发出,virtiofsd 改完属主,返回更新后的文件属性。

一次 chown 需要客户机到宿主机三次往返,virtiofsd 发出六次宿主机系统调用,每一次都落在 ImageFS 上。而这还是在 virtiofsd 已经调到最大缓存和合并操作的前提下。

文件带着元数据:名字、属主、权限。每一个元数据操作都必须去问元数据的权威方。virtio-fs 把这个权威方放在虚拟机边界的另一侧,客户机永远只是个客户端。哪怕宿主机侧根本不需要读虚拟机的根文件系统,它依然是一套共享文件系统。

换一种语言:说块

如果让文件系统完全活在客户机里呢?元数据全在客户机内解释,宿主机只剩一件事:存字节,需要时还回去。

这种安排有个现成的名字——块设备。块是硬盘和 SSD 说的语言,它们不知道文件是什么,只处理数据块。ext4 这类文件系统,本质上就是文件语言到块语言的翻译器。

Linux 内核在块设备上打磨了几十年。物理机靠 HDD 和 SSD,虚拟机靠 virtio-blk,也就是 virtio-fs 的块设备对应物。更关键的是,客户机内核把每个能访问的块设备都当作独占的,没有任何文件系统操作需要去问别人。

同样一个 chown 走 virtio-blk:

  • 以 fchownat 进入客户机内核,和之前一样;
  • 客户机内核检查并清除文件能力,因为 ext4 驱动就在客户机内核里;
  • 检查并清除 setuid 位,同样不需要向外调用;
  • ext4 完成所有权变更,写入预写日志。

宿主机直到 ext4 刷出一批自上次提交以来的写操作时才知道发生了什么。成百上千次文件操作的成本被摊到一条块命令后面,而且是异步发生的,文件系统在此期间保持活跃。

代价是宿主机只会说块语言,失去了操作虚拟机文件系统的能力。换来的是所有操作——包括那些烦人的元数据往返——都留在客户机内,virtiofsd 那些额外的 FUSE 往返全部消失。

ImageFS-blk

块设备让虚拟机文件系统变快了,但怎么和 ImageFS 重新接上,保住镜像兼容和惰性加载?

直接调 mkfs.ext4 -d 造一个 ext4 磁盘再通过 virtio-blk 共享,行不通——那要求所有镜像内容提前就位,和惰性架构冲突。

他们换了个问法:怎么骗过客户机的 ext4 驱动,让它以为拿到的是完整镜像,实际按需供给文件内容?

ext4 为每个文件保留一条 inode 记录,存权限、大小和一组 extent,也就是代表文件数据的块区间。对请求的镜像,团队依然只提前拉取最少的文件元数据,用它自己写出 ext4 的 inode 记录。ext4 镜像的其余部分保持稀疏,只有客户机读取时才提供实际数据块。因为元数据是自己写的,块请求到 ImageFS 文件字节的映射早就有了。

宿主机上一个叫 ImageFS-blk 的守护进程处理 virtio-blk 过来的块请求,按映射惰性供给内容,不可变镜像和持久化写入分开处理。

写的时候,把块持久化到稀疏文件,在位图里标记为脏。稀疏文件只累积它支撑的那台虚拟机的写入,快照之类的操作只要查它就知道改了什么。读的时候,查映射把请求的块区间转成文件和字节区间,从 ImageFS 取;脏块和 ext4 元数据直接从稀疏文件读——逻辑上类似 OverlayFS,但发生在块层面。

设计阶段他们还发现,能跑赢 Linux 在 ImageFS 上的 OverlayFS 挂载。OverlayFS 修改不可变下层的文件前,必须把它复制到可写上层。常规配置下这很便宜:上下层在同一个 XFS 上,reflink 让两份副本共享底层数据,不用物理复制。但 ImageFS 的下层是 FUSE,上层是 XFS,reflink 失效。极端情况下,为了写几个字节要付出几个 GB 的开销。ImageFS-blk 在块层面做写时复制,最坏情况被限制在复制一个块。

加上预取,亚秒级冷启动回来了,启动也不需要下载整个镜像,同时享受客户机自管文件系统的好处。

基准测试

ImageFS-blk 把 virtio-fs 方案彻底甩开。同样的系统调用微基准:bun install 从 12.5 秒降到 1.07 秒,快了 12 倍。它甚至超过了经典 ImageFS,因为 ImageFS-blk 的元数据操作从不离开客户机,不走 ImageFS 的 FUSE 路径。代码导航和读吞吐也大幅改善。

收益延伸到数据库负载,pgbench 和 speedtest1 都有巨大提速,体现出块设备的效率。

VM Sandboxes 现已正式可用,后端就是 ImageFS-blk。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
巴特勒:我让库里&追梦&科尔失望了 想帮助他们再拿一个总冠军

巴特勒:我让库里&追梦&科尔失望了 想帮助他们再拿一个总冠军

北青网-北京青年报
2026-10-17 19:29:14
尼克斯裁掉布鲁斯·布朗 留下怀斯曼征战新赛季

尼克斯裁掉布鲁斯·布朗 留下怀斯曼征战新赛季

体坛周报
2026-10-18 08:29:20
足坛一夜动态:巴萨5-2!曼城3-2 利物浦2-1 拜仁6-1

足坛一夜动态:巴萨5-2!曼城3-2 利物浦2-1 拜仁6-1

念洲
2026-10-18 06:46:41
央视除名、被大佬睡出位、靠肉体换资源?方琼秘闻多炸裂

央视除名、被大佬睡出位、靠肉体换资源?方琼秘闻多炸裂

角落的隐藏美景
2026-10-14 15:12:56
释放的信号太强烈了!

释放的信号太强烈了!

张嘴说财经
2026-10-17 19:35:47
巴西总统大选决选:前总统之子博索纳罗获得46.8%的选票,卢拉为45.9%

巴西总统大选决选:前总统之子博索纳罗获得46.8%的选票,卢拉为45.9%

阿尔卑斯瞭望
2026-10-17 18:04:10
杜锋重磅发声:CBA比赛即便1000场也没用,联赛的本质是锻炼外援!

杜锋重磅发声:CBA比赛即便1000场也没用,联赛的本质是锻炼外援!

历史缝隙里的猹
2026-10-17 10:41:51
雷波县耻辱合影起于县长临时起意:屁股决定脑袋,有权不能任性

雷波县耻辱合影起于县长临时起意:屁股决定脑袋,有权不能任性

十为先生
2026-10-17 19:36:29
玥儿和筱梅逛街同框!背影神似年轻大S,一家人团聚画面太暖心

玥儿和筱梅逛街同框!背影神似年轻大S,一家人团聚画面太暖心

悠悠说世界
2026-10-18 04:50:44
65岁歌手求婚61岁女星 两人交往逾一年

65岁歌手求婚61岁女星 两人交往逾一年

热搜摘要官
2026-10-17 06:10:20
三部门联合调查尊界“刹车门”:就算车有问题,懂车帝也悬了

三部门联合调查尊界“刹车门”:就算车有问题,懂车帝也悬了

茄小茄说事
2026-10-16 18:00:11
“父亲开大奔,才能养出这种女儿”,浙大女孩返校一幕火了,长相普通,但气质一流

“父亲开大奔,才能养出这种女儿”,浙大女孩返校一幕火了,长相普通,但气质一流

世界圈
2026-10-14 15:28:36
斯瓦泰克受伤后哭着打完比赛!遭逆转0-2输波兰同胞 无缘武网决赛

斯瓦泰克受伤后哭着打完比赛!遭逆转0-2输波兰同胞 无缘武网决赛

风过乡
2026-10-17 22:15:12
蒋劲夫回应太瘦了被说显老:无所谓啊,脸就一张皮要那么好看干啥

蒋劲夫回应太瘦了被说显老:无所谓啊,脸就一张皮要那么好看干啥

观鱼听雨
2026-10-17 23:48:03
赌场还是屠宰场?A股正在把散户吃干抹净

赌场还是屠宰场?A股正在把散户吃干抹净

A活着
2026-10-12 17:03:56
形势挺严重了!这5个行业,工资都发不下来了!

形势挺严重了!这5个行业,工资都发不下来了!

职场资深秘书
2026-10-16 19:47:24
巴萨受益!贝蒂斯15秒前犯规被追溯判进球无效,引发巨大争议,皇马球迷加入论战

巴萨受益!贝蒂斯15秒前犯规被追溯判进球无效,引发巨大争议,皇马球迷加入论战

福酱的小时光
2026-10-18 05:34:29
今天重阳节,记住:4事不做,2物不吃,遵循老传统,家人福寿安康

今天重阳节,记住:4事不做,2物不吃,遵循老传统,家人福寿安康

简食记工作号
2026-10-18 00:03:45
打一场就下课?CBA第一位面临下课主教练曝光,被球迷怒喷

打一场就下课?CBA第一位面临下课主教练曝光,被球迷怒喷

宗介说体育
2026-10-17 10:50:10
前任莱维特,27岁,首秀47分钟控场如机关枪扫射

前任莱维特,27岁,首秀47分钟控场如机关枪扫射

叒女紫121
2026-10-17 12:17:27
2026-10-18 08:44:49
像素与芯片
像素与芯片
有态度网友ytd
209文章数 80关注度
往期回顾 全部

科技要闻

刘煜辉:99%的黄金分析师报告一钱不值

头条要闻

牛弹琴:法国又"燃烧"了 整个国家地图上到处都在冒烟

头条要闻

牛弹琴:法国又"燃烧"了 整个国家地图上到处都在冒烟

体育要闻

升级版杨瀚森再闯难关:当上开拓者第三中锋还得拼

娱乐要闻

庾澄庆罕谈前妻 撕下伊能静仅剩的体面

财经要闻

新一轮大跌源头,找到了!

汽车要闻

星瑞L PLUS限时售价10.97万元起 开启智混3L时代

态度原创

本地
健康
手机
亲子
家居

本地新闻

因新荣记出圈,这座浙东小城才是吃货天堂

看着很健康的人,怎么会突然猝死?

手机要闻

苹果零售员工被要求劝阻顾客现场抢购 iPhone Duo 首发库存或极度紧张

亲子要闻

炸鸡排摊前老板一声好嘞,藏着多少烟火气

家居要闻

2026建博会(广州) 公装联探展交流活动

无障碍浏览 进入关怀版