linux下的fallocate预分配

本文探讨了在存储系统中,尤其是行车记录仪等持续写入场景下,如何通过预分配(fallocate)技术来优化写入速度和减少磁盘碎片。预分配在文件创建前预留空间,确保数据写入时能连续存储,降低写放大,延长存储设备寿命。同时,文章分析了预分配可能导致的空间利用率不高问题,并指出在文件大小可预测的情况下预分配的优势。

       最近在写传感器数据及其属性数据落盘相关框架时,参考了rosbag的机制。我们在核外实现了一套基于多层地址空间管理的方案来管理所有的数据。在这个方案中,我们把传感器数据、属性数据、对应的元信息都放到了一个文件内,整个文件由文件系统来管理。也就是说整个文件内部的各种数据共享该文件的地址空间。为了区分各数据,我们给这些不同的数据划分了独立的逻辑地址空间,各地址空间相互独立。而这些逻辑地址空间的管理又需要引入元数据来管理。

        我们提供的写数据接口要求用户一次将传感器原始数据和其对应的属性数据一次写入到文件,保证原始数据和属性数据是一一对应的。当然,也可以提供独立写入的接口,只需要做好标记这些属性对应哪条传感器原始数据就行。这里,考虑到一次写入的数据类型可能比较多,这就涉及到了数据块的申请和分配了。因为除了原始数据、属性数据之外,管理它们的元数据,以及管理这些元数据的元数据可能都需要分配数据块,考虑到一次次的申请和分配会带来较大的开销,同时还会造成数据分布碎片化,我们引入了预分配fallocate,一次性为本次写入的所有数据所需要的空间进行申请和分配,当然包括了那些元数据所需要的数据块。

        为了上述目的,还是研究了一下fallocate的相关优缺点。

  fallocate即预分配,英文为preallocate。什么意思呢?还往文件中没写数据,但是已经给文件分配了足额的物理空间来存储数据。创建了文件,再调用这个接口预分配了一定量的空间后,后续就可以往这个文件中写数据了。

  另外一点需要注意,这个接口需要文件系统的支持(不是所有的文件系统都支持该操作)。常用TF卡录像,而卡的文件系统类型一般为fat32,就需要fat32文件系统相关的实现才能使用该功能。

  再有,这是一个不可移植的linux专用系统调用,用于确保文件空间被提前分配,成功执行后,可以确保写卡速度较快,也能保证不会因为磁盘空间不足而出现写失败。EXT4是带有这个系统调用的。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值