![](https://img-blog.csdnimg.cn/20190927151053287.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
页缓存及文件系统
文章平均质量分 84
HuberyPan
求知
展开
-
Crash Consistency on File Systems: 文件系统一致性保证 Journaling File System & Log-structured File System
文件系统一致性原理分析原创 2022-12-16 20:33:16 · 953 阅读 · 0 评论 -
F2FS源码分析-3.1 [F2FS 文件创建和删除部分] 一般文件的创建
F2FS的文件创建流程文件创建流程介绍linux的文件的创建可以抽象为两个流程创建一个inode,使得包含文件的元数据信息;将这个新创建的inode加入父目录的管理当中,可以理解建立父目录与这个新inode的关系。到具体代码,上述两个抽象流程在F2FS中主要包含了以下几个子流程:调用vfs_open函数调用f2fs_create函数: 创建文件inode,并连接到父目录f2fs_new_inode函数创建inodef2fs_add_link函数链接到父目录第一步的vfs_o原创 2021-06-26 01:20:03 · 1172 阅读 · 1 评论 -
F2FS源码分析-6.6 [其他重要数据结构以及函数] F2FS的重命名过程-f2fs_rename函数
F2FS源码分析系列文章 主目录 一、文件系统布局以及元数据结构二、文件数据的存储以及读写三、文件与目录的创建以及删除(未完成)四、垃圾回收机制五、数据恢复机制六、重要数据结构或者函数的分析f2fs_summary的作用f2fs_journal的作用f2fs_map_block的作用get_dnode_of_data的作用get_node_page的作用(未完成)F2FS的rename流程rename流程介绍sys_rename函数do_renameat2函数vfs_原创 2021-03-06 21:52:44 · 750 阅读 · 0 评论 -
F2FS源码分析系列文章目录
一、文件系统布局以及元数据结构总体结构Superblock区域Checkpoint区域Segment Infomation Table区域(SIT)Node Address Table区域(NAT)Segment Summary Area区域(SSA)二、文件数据的存储以及读写F2FS文件数据组织方式一般文件写流程一般文件读流程目录文件读流程(未完成)目录文件写流程(未完成)三、文件与目录的创建以及删除(未完成)一般文件的创建(未完成)一般目录的创建(未完成)一般文原创 2020-07-03 11:25:17 · 5962 阅读 · 1 评论 -
F2FS源码分析-6.2 [其他重要数据结构以及函数] f2fs_journal的作用
F2FS源码分析系列文章 主目录 一、文件系统布局以及元数据结构二、文件数据的存储以及读写三、文件与目录的创建以及删除(未完成)四、垃圾回收机制五、数据恢复机制六、重要数据结构或者函数的分析f2fs_summary的作用f2fs_journal的作用f2fs_fill_super的分析f2fs_map_block的作用f2fs_get_dnode_of_data的作用get_node_page的作用(未完成)F2FS Journal机制Journal机制的介绍当F2FS进原创 2020-06-25 12:53:08 · 1089 阅读 · 0 评论 -
F2FS源码分析-6.1 [其他重要数据结构以及函数] f2fs_summary的作用
F2FS源码分析系列文章 主目录 一、文件系统布局以及元数据结构二、文件数据的存储以及读写三、文件与目录的创建以及删除(未完成)四、垃圾回收机制五、数据恢复机制六、重要数据结构或者函数的分析f2fs_summary的作用f2fs_journal的作用f2fs_fill_super的分析f2fs_map_block的作用f2fs_get_dnode_of_data的作用get_node_page的作用(未完成)f2fs_summary 和 f2fs_summary_block原创 2020-06-25 12:50:33 · 966 阅读 · 0 评论 -
F2FS源码分析-1.5 [F2FS 元数据布局部分] Node Address Table-NAT结构
Node Address Table区域-NAT结构Node Address Table,简称NAT,是F2FS用于集中管理node的结构。它的主要维护了一张表(如下图),记录了每一个node在flash设备的物理地址。F2FS给每一个node分配了一个node ID(nid),系统可以根据nid从NAT查找到该node在flash设备上的物理地址,然后从flash设备读取出来。NAT在元数据区域的物理结构如上图所示,NAT区域由N个struct f2fs_nat_block组成,每一个struc原创 2020-06-25 09:49:25 · 2895 阅读 · 2 评论 -
F2FS源码分析-5.2 [数据恢复流程] 后滚恢复和Checkpoint的作用与实现
Checkpoint的作用与实现后滚恢复即恢复到上一个Checkpoint点的元数据状态,因此F2FS需要在特定的时刻将Checkpoint的数据写入到磁盘中。Checkpoint的时机CP是一个开销很大的操作,因此合理选取CP时机,能够很好地提高性能。CP的触发时机有:前台GC(FG_GC)FASTBOOTUMOUNTDISCARDRECOVERYTRIM周期进行因此F...原创 2019-10-10 21:38:18 · 2079 阅读 · 0 评论 -
F2FS源码分析-5.1 [数据恢复流程] 数据恢复的原理以及方式
F2FS文件系统的数据恢复数据恢复的简介F2FS数据恢复的核心结构是Checkpoint结构,它保存了很多元数据用于维护系统一致性。数据恢复方式有两种,分别是后滚恢复(Roll-Back Recovery),前滚恢复(Roll-Forward Recovery)。Checkpoint的作用从F2FS的磁盘布局可以了解到,F2FS有一个元数据区域,用于集中管理磁盘所有的block的信息,因此...原创 2019-10-10 21:37:09 · 3129 阅读 · 0 评论 -
F2FS源码分析-6.3 [其他重要数据结构以及函数] 逻辑地址到物理地址映射的原理以及实现-f2fs_map_blocks函数
f2fs_map_blocks的作用与源码分析函数 f2fs_map_blocks 主要作用是F2FS通过f2fs_get_dnode_of_data函数完成逻辑地址到物理地址的映射以后,根据读写流程的不同,完成的一系列读写前的宇处理。f2fs_map_blocks的读写流程的作用对读的作用: 通过该函数根据逻辑地址找到物理地址,然后从磁盘读取出数据。对写的作用: 文件在写入数据之前,会...原创 2019-10-10 21:34:47 · 1639 阅读 · 2 评论 -
F2FS源码分析-6.4 [其他重要数据结构以及函数] 逻辑地址到物理地址映射的原理以及实现-f2fs_get_dnode_of_data和get_node_path函数
F2FS物理地址寻址的实现VFS的读写都依赖于物理地址的寻址。经典的读流程,VFS会传入inode以及page index信息给文件系统,然后文件系统需要根据以上信心,找到物理地址,然后访问磁盘将其读取出来。F2FS的物理地址寻址,是通过f2fs_get_dnode_of_data函数实现。在执行这个f2fs_get_dnode_of_data函数之前,需要通过set_new_dnode函数进...原创 2019-10-10 21:30:05 · 2320 阅读 · 0 评论 -
F2FS源码分析-1.6 [F2FS 元数据布局部分] Segment Summary Area-SSA结构
Segment Summary Area-SSA结构Segment Summary Area,简称SSA,是F2FS用于集中管理物理地址到逻辑地址的映射关系的结构,同时它也具有通过journal缓存sit或者nat的操作用于数据恢复的作用。映射关系的主要作用是当给出一个物理地址的时候,可以通过SSA索引得到对应的逻辑地址,主要应用在GC流程中; SSA所包含的journal可以缓存一些sit或者...原创 2019-10-10 21:15:45 · 2552 阅读 · 0 评论 -
F2FS源码分析-1.2 [F2FS 元数据布局部分] Superblock结构
Superblock结构Superblock保存了F2FS的核心元数据的结构,包括磁盘大小,元区域的各个部分的起始地址等。Superblock物理存放区域结构f2fs_super_block是F2FS对Superblock的具体数据结构实现,它保存在磁盘的最开始的位置,F2FS进行启动的时候从磁盘的前端直接读取出来。struct f2fs_super_block { __le32 ma...原创 2019-07-03 19:34:44 · 3130 阅读 · 0 评论 -
F2FS源码分析-1.3 [F2FS 元数据布局部分] Checkpoint结构
Checkpoint结构Checkpoint是维护F2FS的数据一致性的结构,它维护了系统当前的状态,例如segment的分配情况,node的分配情况,以及当前的active segment的状态等。F2FS在满足一定的条件的情况下,将当前系统的状态写入Checkpoint中,万一系统出现突然宕机,这个是F2FS可以从Checkpoint中恢复到上次回写时的状态,以保证数据的可恢复性。F2FS维...原创 2019-07-03 19:39:49 · 3895 阅读 · 9 评论 -
F2FS源码分析-2.1 [F2FS 读写部分] F2FS文件数据组织方式以及物理地址的映射
文件数据的保存以及物理地址的映射文件系统一个重要功能是实现文件的保存以及读写。每个文件系统有不同的保存和读写方式,而F2FS则是通过Node-Data的形式将数据组织起来。其中最重要的结构就是f2fs_node结构,它实现了文件数据的组织和管理。f2fs_node的结构以及作用F2FS每一个文件,根据文件大小的不同,对应了一个或者多个f2fs_node结构,它实际存在于磁盘当中,并每一个f2...原创 2019-07-03 19:43:37 · 4772 阅读 · 0 评论 -
F2FS源码分析-2.2 [F2FS 读写部分] F2FS的一般文件写流程分析
F2FS的写流程写流程介绍F2FS的写流程主要包含了以下几个子流程:调用vfs_write函数调用f2fs_file_write_iter函数: 初始化f2fs_node的信息调用f2fs_write_begin函数: 创建page cache,并填充数据写入到page cache: 等待系统触发writeback回写到磁盘调用f2fs_write_end函数: 将page设置为最...原创 2019-07-03 19:45:45 · 5312 阅读 · 6 评论 -
F2FS源码分析-2.3 [F2FS 读写部分] F2FS的一般文件读流程分析
F2FS的读流程读流程介绍F2FS的读流程包含了以下几个子流程:vfs_read函数generic_file_read_iter函数: 根据访问类型执行不同的处理generic_file_buffered_read: 根据用户传入的文件偏移,读取尺寸等信息,计算起始位置和页数,然后遍历每一个page,通过预读或者单个读取的方式从磁盘中读取出来f2fs_read_data_page&a...原创 2019-07-03 19:47:16 · 2743 阅读 · 0 评论 -
VFS源码分析-Page Cache Writeback脏页回写机制
Page Cache Writeback机制在Linux系统中,当用户写入数据到文件时,如果没有特殊的标志,用户的数据会被缓存在page cache中,并在适当的时机一并写入到磁盘。这是因为磁盘的IO速度相对与内存而言非常缓慢,如果用户每执行一次写操作就产生一次与磁盘交互的IO,就会大大降低系统的性能。因此Linux会将用户数据缓存在cache中,并通过writeback机制,在适当的时机合并最...原创 2019-07-19 23:49:18 · 1721 阅读 · 1 评论 -
VFS源码分析-Readahead预读机制
Readahead预读机制由于内存的速度比磁盘速度快很多,如果每一次访问文件数据都要从磁盘读取一次数据,就会导致非常严重的时延。因此Linux为了提高性能,通过page cache机制,将多个用户数据缓存在内存当中,从而避免多次再磁盘读取。Readahead预读机制正是将用户数据缓存到内存的方法之一。Readahead机制的介绍Readahead预读机制是Linux针对顺序读的性能优化机制。...原创 2019-07-20 19:07:57 · 1606 阅读 · 0 评论 -
F2FS源码分析-4.1 [F2FS GC部分] 垃圾回收机制源码分析
F2FS的GC流程垃圾回收(Garbage Collection)在F2FS中,主要作用是回收无效的block,以供用户重新使用。在详细介绍GC之前,需要先分析一下为什么需要GC。Append-Only Logging文件系统的特征F2FS是一个基于Append-Only Logging的文件系统,而垃圾回收则是Append-Only Logging文件系统一个非常重要的特征,因为其独特的数...原创 2019-09-03 23:15:45 · 4232 阅读 · 6 评论 -
F2FS源码分析-4.2 [F2FS GC部分] Victim Segment的选择策略
victim segment的选择在垃圾回收流程分析这一节提及到了gc会通过__get_victim函数去选择一个需要被gc的segment。怎么样的segment才适合被gc,而F2FS是如何实现这一个流程的呢? 本节对这部分源码进行分析。我们首先分析__get_victim函数,如下所示:static int __get_victim(struct f2fs_sb_info *sbi, ...原创 2019-09-03 23:17:12 · 1305 阅读 · 0 评论 -
F2FS源码分析-1.4 [F2FS 元数据布局部分] Segment Infomation Table-SIT结构
Segment Infomation Tabel-SIT结构Segment Infomation Tabel,简称SIT,是F2FS用于集中管理segment状态的结构。它的主要作用是维护的segment的分配信息,它的作用使用两个常见例子进行阐述:用户进行写操作,那么segment会根据用户写入的数据量分配特定数目的block给用户进行数据写入,SIT会将这些已经被分配的block标记为"...原创 2019-10-10 21:13:35 · 2744 阅读 · 5 评论 -
F2FS源码分析-1.1 [F2FS 元数据布局部分] F2FS文件系统的总体结构
总体介绍F2FS全称为Flash Friendly File System,是专门为闪存设备设计的一个日志追加型文件系统(Append Logging File System)。相对于传统的日志型文件系统,F2FS在wandering tree和gc的高时间开销等问题,有一定的改进和优化。wandering tree问题: 传统的LFS,在文件数据被更新或者写入到日志的末端的时候,指向文件...原创 2019-07-03 19:32:25 · 7070 阅读 · 2 评论