F2FS源码分析-6.1 [其他重要数据结构以及函数] f2fs_summary的作用

2024-06-14 10:08

本文主要是介绍F2FS源码分析-6.1 [其他重要数据结构以及函数] f2fs_summary的作用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

F2FS源码分析系列文章
主目录
一、文件系统布局以及元数据结构
二、文件数据的存储以及读写
三、文件与目录的创建以及删除(未完成)
四、垃圾回收机制
五、数据恢复机制
六、重要数据结构或者函数的分析
  1. f2fs_summary的作用
  2. f2fs_journal的作用
  3. f2fs_map_block的作用
  4. get_dnode_of_data的作用
  5. get_node_page的作用(未完成)

f2fs_summary的作用

从第二章第一节F2FS文件组织结构可以知道,一个文件是如何通过node找到对应的data的物理地址。但是一些场合会反过来,需要通过data的物理地址找到保存这个地址的node的信息。例如GC的时候,F2FS会找到一个segment进行GC,将数据块迁移到新的segment中。此时系统要根据segment里面的block的物理地址,反过来找到node的信息,然后将新的数据块物理地址重新更新的node的对应位置,更具体可以参考垃圾回收章节。

因此SSA的主要作用是提供系统通过数据块物理地址找到所属的node的信息的能力。我们可以直接分析f2fs_summary的源码:

struct f2fs_summary {__le32 nid;		/* parent node id */union {__u8 reserved[3];struct {__u8 version;		/* node version number */__le16 ofs_in_node;	/* block index in parent node */} __packed;};
} __packed;

系统中每一个数据块的物理地址,都对应了一个f2fs_summary,系统可以通过物理地址找到对应的f2fs_summaryf2fs_summarynid变量表示当前的数据块所属的node的nid。而ofs_in_node则表示当前的数据块位于这个node的第几个block,即f2fs_inode->i_addr[ofs_in_node]或者direct_node->addr[ofs_in_node],可以参考F2FS文件组织结构这一节。

f2fs_summary保存在f2fs_summary_block中,而每一个f2fs_summary_block都保存了512个f2fs_summary,对应一个segment保存的数据块的数目,因此一个segment对应一个f2fs_summary_block,系统可以通过segment number(segno)找到对应的f2fs_summary_block,然后再找到对应的f2fs_summary

f2fs_summary_block的定义可以发现,除了f2fs_summary以外,还保存了f2fs_journal以及summary_footersummary_footertype变量表明当前的f2fs_summary_block是保存了node数据还是data数据。f2fs_journal用于缓存一些当前的对SIT和NAT的一些改动,避免频繁读写NAT和SIT区域的数据,可以参考f2fs_journal的作用这一节。

struct f2fs_summary_block {struct f2fs_summary entries[ENTRIES_IN_SUM]; // ENTRIES_IN_SUM=512struct f2fs_journal journal;struct summary_footer footer;
} __packed;struct summary_footer {unsigned char entry_type;	/* SUM_TYPE_XXX */__le32 check_sum;		/* summary checksum */
} __packed;

这篇关于F2FS源码分析-6.1 [其他重要数据结构以及函数] f2fs_summary的作用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1060103

相关文章

[职场] 公务员的利弊分析 #知识分享#经验分享#其他

公务员的利弊分析     公务员作为一种稳定的职业选择,一直备受人们的关注。然而,就像任何其他职业一样,公务员职位也有其利与弊。本文将对公务员的利弊进行分析,帮助读者更好地了解这一职业的特点。 利: 1. 稳定的职业:公务员职位通常具有较高的稳定性,一旦进入公务员队伍,往往可以享受到稳定的工作环境和薪资待遇。这对于那些追求稳定的人来说,是一个很大的优势。 2. 薪资福利优厚:公务员的薪资和

【操作系统】信号Signal超详解|捕捉函数

🔥博客主页: 我要成为C++领域大神🎥系列专栏:【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ 如何触发信号 信号是Linux下的经典技术,一般操作系统利用信号杀死违规进程,典型进程干预手段,信号除了杀死进程外也可以挂起进程 kill -l 查看系统支持的信号

java中查看函数运行时间和cpu运行时间

android开发调查性能问题中有一个现象,函数的运行时间远低于cpu执行时间,因为函数运行期间线程可能包含等待操作。native层可以查看实际的cpu执行时间和函数执行时间。在java中如何实现? 借助AI得到了答案 import java.lang.management.ManagementFactory;import java.lang.management.Threa

springboot家政服务管理平台 LW +PPT+源码+讲解

3系统的可行性研究及需求分析 3.1可行性研究 3.1.1技术可行性分析 经过大学四年的学习,已经掌握了JAVA、Mysql数据库等方面的编程技巧和方法,对于这些技术该有的软硬件配置也是齐全的,能够满足开发的需要。 本家政服务管理平台采用的是Mysql作为数据库,可以绝对地保证用户数据的安全;可以与Mysql数据库进行无缝连接。 所以,家政服务管理平台在技术上是可以实施的。 3.1

SQL Server中,isnull()函数以及null的用法

SQL Serve中的isnull()函数:          isnull(value1,value2)         1、value1与value2的数据类型必须一致。         2、如果value1的值不为null,结果返回value1。         3、如果value1为null,结果返回vaule2的值。vaule2是你设定的值。        如

高仿精仿愤怒的小鸟android版游戏源码

这是一款很完美的高仿精仿愤怒的小鸟android版游戏源码,大家可以研究一下吧、 为了报复偷走鸟蛋的肥猪们,鸟儿以自己的身体为武器,仿佛炮弹一样去攻击肥猪们的堡垒。游戏是十分卡通的2D画面,看着愤怒的红色小鸟,奋不顾身的往绿色的肥猪的堡垒砸去,那种奇妙的感觉还真是令人感到很欢乐。而游戏的配乐同样充满了欢乐的感觉,轻松的节奏,欢快的风格。 源码下载

高度内卷下,企业如何通过VOC(客户之声)做好竞争分析?

VOC,即客户之声,是一种通过收集和分析客户反馈、需求和期望,来洞察市场趋势和竞争对手动态的方法。在高度内卷的市场环境下,VOC不仅能够帮助企业了解客户的真实需求,还能为企业提供宝贵的竞争情报,助力企业在竞争中占据有利地位。 那么,企业该如何通过VOC(客户之声)做好竞争分析呢?深圳天行健企业管理咨询公司解析如下: 首先,要建立完善的VOC收集机制。这包括通过线上渠道(如社交媒体、官网留言

tf.split()函数解析

API原型(TensorFlow 1.8.0): tf.split(     value,     num_or_size_splits,     axis=0,     num=None,     name='split' ) 这个函数是用来切割张量的。输入切割的张量和参数,返回切割的结果。  value传入的就是需要切割的张量。  这个函数有两种切割的方式: 以三个维度的张量为例,比如说一

tensorboard-----summary用法总结

Tensorflow学习笔记——Summary用法         最近在研究tensorflow自带的例程speech_command,顺便学习tensorflow的一些基本用法。 其中tensorboard 作为一款可视化神器,可以说是学习tensorflow时模型训练以及参数可视化的法宝。 而在训练过程中,主要用到了tf.summary()的各类方法,能够保存训练过程以及参数分布图并在

【数据结构】线性表:顺序表

文章目录 1. 线性表2. 顺序表2.1 概念及结构2.2 接口实现2.3 顺序表的问题及思考 1. 线性表 线性表是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式