f2fs系列文章——do_checkpoint关于data summary的两种写入方式

f2fs在do_checkpoint期间,通过write_data_summaries和write_node_summaries将segment的summary信息写入page cache并同步到磁盘。write_data_summaries有两种策略:write_compacted_summaries和write_normal_summaries。该文详细探讨了这两种方法。

    为了保存current segment的summary信息,f2fs在do_checkpoint的时候会调用会调用write_data_summaries和write_node_summaries将其sumamries信息写到page cache中然后随后同步到磁盘中,其中write_node_summaries也是只有在umount和fastboot的情况下才会调用。我们可以看到write_data_summaries中有着两种方式进行存放,所以本文就这两种方式进行讲述。

void write_data_summaries(struct f2fs_sb_info *sbi, block_t start_blk)
{
	if (is_set_ckpt_flags(sbi, CP_COMPACT_SUM_FLAG))
		write_compacted_summaries(sbi, start_blk);
	else
		write_normal_summaries(sbi, start_blk, CURSEG_HOT_DATA);
}

    这两种方式分别是write_compacted_summaries和write_normal_summaries,下面就这两种方式进行详细的讲述。

static int do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
{
	...

	data_sum_blocks = npages_for_summary_flush(sbi, false);
	spin_lock(&sbi->cp_lock);
	if (data_sum_blocks < NR_CURSEG_DATA_TYPE)
		__set_ckpt_flags(ckpt, CP_COMPACT_SUM_FLAG);
	else
		__clear_ckpt_fl
F2FS(Flash-Friendly File System)是专门为闪存设备设计的文件系统,`f2fs_issue_checkpoint` 是F2FS文件系统中的一个重要函数。 ### 原理 在F2FS文件系统中,数据和元数据的修改首先会被写入日志(log)区域,而不是直接更新到对应的磁盘块。这种日志结构的设计可以提高闪存设备的写入性能和寿命。`f2fs_issue_checkpoint` 函数的主要原理是将日志中的数据和元数据同步到磁盘的适当位置,并更新文件系统的检查点信息。检查点是文件系统的一个一致性点,它记录了哪些数据和元数据已经被安全地写入磁盘。当系统崩溃或意外断电时,文件系统可以通过检查点信息快速恢复到一致状态。该函数会遍历日志区域,将其中的有效数据和元数据迁移到磁盘的最终位置,并更新超级块和检查点结构中的相关信息,以反映文件系统的最新状态。 ### 作用 - **数据一致性**:确保文件系统在面对系统崩溃或意外断电时能够快速恢复到一致状态。通过定期执行检查点操作,可以减少需要恢复的数据量,从而缩短恢复时间。 - **空间管理**:释放日志区域中已经迁移到磁盘最终位置的数据块,以便后续的写入操作可以重用这些空间。这有助于提高文件系统的空间利用率。 - **性能优化**:虽然检查点操作会带来一定的性能开销,但它可以避免日志区域过度增长,从而减少后续写入操作的延迟。 ### 使用方法 `f2fs_issue_checkpoint` 通常是由文件系统内部调用的,一般不需要用户直接调用。不过,在某些情况下,如调试或特殊的文件系统管理任务中,可能需要手动触发检查点操作。在Linux内核代码中,可以通过调用 `f2fs_issue_checkpoint` 函数来触发检查点操作。以下是一个简单的示例代码片段: ```c #include <linux/f2fs_fs.h> // 获取F2FS文件系统的超级块 struct super_block *sb = ...; // 通过某种方式获取F2FS超级块 // 调用f2fs_issue_checkpoint函数 f2fs_issue_checkpoint(sb); ``` 需要注意的是,上述代码仅为示例,实际使用时需要确保已经正确获取了F2FS文件系统的超级块。此外,手动触发检查点操作可能会影响系统性能,因此应该谨慎使用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值