ELT.ZIP
团队,ELT<=>Elite(精英),.ZIP为压缩格式,ELT.ZIP即压缩精英。6个地方
的同学,我们在OpenHarmony成长计划啃论文俱乐部
里,与华为、软通动力、润和软件、拓维信息、深开鸿
等公司一起,学习和研究操作系统技术
…@[toc]
【往期回顾】
① 2月23日 《老子到此一游系列》之 老子为什么是老子 —— ++综述视角解读压缩编码++
② 3月11日 《老子到此一游系列》之 老子带你看懂这些风景 —— ++多维探秘通用无损压缩++
③ 3月25日 《老子到此一游系列》之 老子见证的沧海桑田 —— ++轻翻那些永垂不朽的诗篇++
④ 4月4日 《老子到此一游系列》之 老子游玩了一条河 —— ++细数生活中的压缩点滴++
⑤ 4月18日 ++【ELT.ZIP】OpenHarmony啃论文俱乐部——一文穿透多媒体过往前沿++
⑥ 4月18日 ++【ELT.ZIP】OpenHarmony啃论文俱乐部——这些小风景你不应该错过++
⑦ 4月18日 ++【ELT.ZIP】OpenHarmony啃论文俱乐部——浅析稀疏表示医学图像++
⑧ 4月29日 ++【ELT.ZIP】OpenHarmony啃论文俱乐部——计算机视觉数据压缩应用++
⑨ 4月29日 ++【ELT.ZIP】OpenHarmony啃论文俱乐部——点燃主缓存压缩技术火花++
⑩ 4月29日 ++【ELT.ZIP】OpenHarmony啃论文俱乐部——即刻征服3D网格压缩编码++
⑪ 5月10日 ++【ELT.ZIP】OpenHarmony啃论文俱乐部——云计算数据压缩方案++
⑫ 5月10日 ++【ELT.ZIP】OpenHarmony啃论文俱乐部——大数据框架性能优化系统++
⑬ 5月10日 ++【ELT.ZIP】OpenHarmony啃论文俱乐部——物联网摇摆门趋势算法++
⑭ 5月22日 ++【ELT.ZIP】OpenHarmony啃论文俱乐部——电子设备软件更新压缩++
⑮ 5月22日 ++【ELT.ZIP】OpenHarmony啃论文俱乐部——人工智能短字符串压缩++
⑯ 5月22日 ++【ELT.ZIP】OpenHarmony啃论文俱乐部——多层存储分级数据压缩++
⑰ 6月3日 ++【ELT.ZIP】OpenHarmony啃论文俱乐部——数据高通量无损压缩方案++
⑱ 6月3日 ++【ELT.ZIP】OpenHarmony啃论文俱乐部——快速随机访问字符串压缩++
⑲ 6月13日 ++【ELT.ZIP】OpenHarmony啃论文俱乐部——gpu上高效无损压缩浮点数 ++
⑳ 6月13日 ++【ELT.ZIP】OpenHarmony啃论文俱乐部—一种深度神经网压缩算法 ++
㉑ 6月13日 ++【ELT.ZIP】OpenHarmony啃论文俱乐部—硬件加速的快速无损压缩++
【本期看点】
揭秘谷歌应用EROFS到安卓的原因
EROFS为何能在文件压缩系统领域大放光彩
神秘的LZ4m如何给内存压缩领域带来新的生机
【技术DNA】
【智慧场景】
********** | ******************** | ******************** | ******************** | ******************** | ******************** | ******************** | ******************** | ******************** | ******************** | ******************** | ******************** | ******************** | ******************** | ******************** | ***************** | ***************** | ******************** |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
场景 | 自动驾驶 / AR | 语音信号 | 流视频 | GPU 渲染 | 科学、云计算 | 内存缩减 | 科学应用 | 医学图像 | 数据库服务器 | 人工智能图像 | 文本传输 | GAN媒体压缩 | 图像压缩 | 文件同步 | 数据库系统 | 通用数据 | 系统数据读写 |
技术 | 点云压缩 | 稀疏快速傅里叶变换 | 有损视频压缩 | 网格压缩 | 动态选择压缩算法框架 | 无损压缩 | 分层数据压缩 | 医学图像压缩 | 无损通用压缩 | 人工智能图像压缩 | 短字符串压缩 | GAN 压缩的在线多粒度蒸馏 | 图像压缩 | 文件传输压缩 | 快速随机访问字符串压缩 | 高通量并行无损压缩 | 增强只读文件系统 |
开源项目 | Draco / 基于深度学习算法/PCL/OctNet | SFFT | AV1 / H.266编码 / H.266解码/VP9 | MeshOpt / Draco | Ares | LZ4 | HCompress | DICOM | Brotli | RAISR | AIMCS | OMGD | OpenJPEG | rsync | FSST | ndzip | EROFS |
智能手机
,已然成为我们生活中不可或缺的一部分。低头族
,智能手机
的性能就显得尤为重要。智能手机的存储空间和运行时内存通常有限。
Android 操作系统所占用的空间
也在不断增加。与此同时,Android 应用的存储消耗
也在不断增长,因此,可供用户使用的低端智能手机的存储容量相当小。此外,许多智能手机的顶级应用往往会消耗大量内存,即使在高端智能手机上,也只留下少量内存用于系统启动操作
。不能为了压缩
而进行积极的优化。此外,压缩并不是唯一的衡量标准
。解压
过程中的内存消耗受到限制
。 对于像智能手机这样的设备来说,性能
和响应能力
是不可动摇的重要关键指标。因此,随着高效数据修改的负担,Btrfs 很难同时满足性能
和压缩效率
的要求。固定大小的输入压缩
大量的内存消耗和数据移动。
利用固定大小的输出压缩。
将文件数据压缩到多个固定大小的块,以显著缓解读放大问题,并尽可能减少不必要的计算。
内存高效的解压缩,在很少额外内存开销的情况下实现高性能。
通过利用压缩算法(如 LZ4)的特点,EROFS 设计了不同的内存高效解压缩方案,以减少解压缩过程中额外的内存使用。
EROFS 还采用了一套精心确保有保障的用户体验的优化方案。
索引节点
,其页缓存
存储按物理块序号索引
的压缩块。因此,对于缓存的 I/O, EROFS 会在特殊的 inode 的页面缓存中分配一个页面来发起I/O(输入/输出)请求
, 这样压缩的数据就会被存储驱动
直接取到分配的页面 。
VFS(虚拟文件系统)
会在页面缓存中,为文件系统分配页面,来存放文件数据。对于这些在解压前不包含有意义数据的页面中的任何一个,被称为可重用页面。对于就地 I/O,EROFS 会使用最后一个可重用页面,来初始化 I/O 请求。以单个块为例
前 5 个块(D0 到 D4)和部分块 D5 被压缩为块 C0,其余块被压缩为块 C1。
下面将介绍三种解压缩方式:
解压缩为了获得块 D3 和 D4 中的数据,EROFS 首先从存储器中读取压缩后的块 C0,并将其存储在内存中。然后 EROFS 会按照以下步骤进行解压。
连续内存
作为解压缩的目的地
, EROFS 通过 vmap 接口
将上一步准备好的物理页面映射到连续虚拟内存区域
。页面缓存页面
中,EROFS 还需要将压缩数据(C0)复制到 一个临时的pre——CPU 页面(下一个方案中会介绍),这样解压后的数据不会在解压过程中覆盖被压缩的数据。需要动态分配物理内存页,这增加了内存受限设备的内存压力。
使用 vmap
和 vunmap
在每次解压时效率都很低。
针对动态分配内存问题有以下两种优化方案
EROFS 利用 percpu 缓冲区
来缓解解压后的数据少于 4 页时的问题。
1.一个四页的内存缓冲区被预先分配给每个 CPU 作为每 CPU 缓冲区,对于提取不超过 4 个数据块的解压缩,EROFS 将数据解压缩到 per-cpu 缓冲区。
D8 中的数据被请求,C1 中的压缩数据 直接解压缩到 per-cpu 缓冲区。
D8 的内容通过 memcpy 复 制到页面缓存页面。
vmap
的动态内存分配问题。超级区块
位于整个结构的前端。在其之后,元数据与实际数据可以按顺序存储也可以以混合形式进行存储。EROFS 可以将数百页的原始数据压缩成仅一个压缩块,但这种情况下,将需要数百个指针去跟踪那些原始数据应当被存储的页面,可能会导致消耗大量内存。为此,EROFS 会尝试使用可重用的页面来存储这些信息。如果有多个 VFS 分配的页面可被重用,便选取最后一页存储压缩数据,剩余页面的指针则会被移动到堆栈上。
在像 Btrfs 这样的文件系统中,当压缩数据被读进内存时,会唤醒一个专用线程来解压数据。而解压完成后,用来实现 I/O 的读取器线程才会被唤醒,以从页面缓存中获取被解压完的数据。因此,这种互相之间的调度开销不可忽视。于是,EROFS 采取了全过程都使用读取器线程的策略。
可以同时发出多个请求进行解压缩。当线程 A 请求的数据正在被线程 B 所解压时,线程 A 无需自己再重新解压一遍,可以直接从页面缓存中复用已被线程 B 解压出的数据,从而实现合作重复使用解压缩数据,防止单个数据被多次解压。
尽管 EROFS 压缩的是只读分区,但其中的数据在系统更新等操作时可能仍会变动。即便只简单修改文件数据中的个别几个位,其他大量相关分散数据也可能需要一并被修改,这会致使整个分区的重新压缩。EROFS 提供了可以放在其镜像末端的镜像补丁,免除对已压缩只读分区的修改,而是在原始数据解压完成后应用补丁予以更新修补。
在 90% 以上的启动状态下,EROFS 都优于 ext4,只有偶然会出现非常长的启动时间。
[1] USENIX
[2] IEEE Xplore, delivering full text access to the world's highest quality technical literature in engi
更多回帖