自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 Crash Consistency on File Systems: 文件系统一致性保证 Journaling File System & Log-structured File System

文件系统一致性原理分析

2022-12-16 20:33:16 885

原创 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 1112 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 717

原创 利用Android NDK编译FIO工具

第一步: 安装Android NDKNDK的安装一般是通过Android Studio上进行,可以参考其他文章,默认情况下在Ubuntu安装的路径是Android/Sdk/目录下,例如安装API版本是22的NDK路径是:/home/UserName/Android/Sdk/ndk/22.0.7026061。而对应的编译工具链的路径是/home/UserName/Android/Sdk/ndk/22.0.7026061/toolchains/llvm/prebuilt/linux-x86_64/bin。第

2021-02-08 17:04:44 966

原创 F2FS源码分析系列文章目录

一、文件系统布局以及元数据结构总体结构Superblock区域Checkpoint区域Segment Infomation Table区域(SIT)Node Address Table区域(NAT)Segment Summary Area区域(SSA)二、文件数据的存储以及读写F2FS文件数据组织方式一般文件写流程一般文件读流程目录文件读流程(未完成)目录文件写流程(未完成)三、文件与目录的创建以及删除(未完成)一般文件的创建(未完成)一般目录的创建(未完成)一般文

2020-07-03 11:25:17 5763 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 1037

原创 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 935

原创 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 2822 2

原创 内存管理源码分析-内核页表的创建以及索引方式(基于ARM64以及4级页表)

简介页表的主要作用是完成虚拟地址到物理地址的转换,更详细的介绍可以参考这个优秀的博客,很好地介绍了页表的理论。Linux如何实现这个页表理论呢?以及如何进行寻址呢?本文将会结合代码,从代码出发,基于ARM64的架构,分析Linux从源码上如何实现页表理论。从一个页的地址说起对于ARM64的架构,一个虚拟地址的大小是64bit。但是实际上并不是全部64bit都是用来寻址的,其中一部分bit会基...

2020-05-07 23:44:12 1281

原创 Android文件访问权限的管理机制以及SDCardFS

Android文件访问权限的管理机制以及SDCardFS1. 原生Linux文件访问权限控制原生的Linux操作系统是通过拥有者 ID(uid) 和群组 ID(gid)对文件的访问权限进行管理,如:user0@user0:testLinuxPermission$ ls -l 访问权限 uid gid 文件名-rw-rw---- 1 r...

2020-04-25 02:56:33 5732 1

原创 内存管理源码分析-mmap函数在内核的运行机制以及源码分析

mmap函数的介绍mmap函数的主要作用是可以将一个文件或者设备的内容映射到内存当中,用户就可以通过一些内存操作方式(如memcpy、memset)对文件或者设备进行直接的操作。这种操作可以减少一些IO的开销,如通过传统的读写文件的方式,可能会频繁的触发系统调用导致IO效率的降低。需要注意的是mmap函数的内存分配方式是页对齐的,即使用户只需要2字节的数据,mmap函数也会分配一个页的内存空间给...

2020-02-27 11:42:17 1621

原创 安装Systemtap到Android中

准备限制:目前systemtap只能应用在32位设备当中 测试机器:nexus 6, 32位, 内核版本3.10.40克隆编译安装android内核在android使用systemtap需要打开内核的某一些选项: CONFIG_DEBUG_INFO CONFIG_KPROBES CONFIG_RELAY CONFIG_DEBUG_FS CONFIG_MODULES

2019-12-17 16:41:30 542

原创 基于nexus6修改android内核

Android 内核修改使用到的设备: nexus 6,必须含有root权限。 刷内核须谨慎,请备份重要信息,尽量不要使用自己使用的手机进行测试一、克隆源代码:git clone https://android.googlesource.com/kernel/msmnexus系列的内核源码可以在google的官方内核源码库克隆。二、根据自己机型checkout到合适的版本如nexus 6对应的型号

2019-12-17 16:40:37 1271 2

原创 块设备层源码分析-1 通用块层

什么是submit_bioLinux的IO一般是通过sys_call从用户层传入,然后经过VFS层,再经过通用块层、IO调度器,最后经过驱动传送到具体的物理设备当中。一般的块设备层分层次结构图如下:submit_bio是沟通文件系统和通用块层的接口,文件系统将用户写入的数据进行处理之后,将数据包装成一个bio结构,提交给通用块层进行处理。...

2019-10-14 18:32:04 846 1

原创 F2FS源码分析-5.2 [数据恢复流程] 后滚恢复和Checkpoint的作用与实现

Checkpoint的作用与实现后滚恢复即恢复到上一个Checkpoint点的元数据状态,因此F2FS需要在特定的时刻将Checkpoint的数据写入到磁盘中。Checkpoint的时机CP是一个开销很大的操作,因此合理选取CP时机,能够很好地提高性能。CP的触发时机有:前台GC(FG_GC)FASTBOOTUMOUNTDISCARDRECOVERYTRIM周期进行因此F...

2019-10-10 21:38:18 2008

原创 F2FS源码分析-5.1 [数据恢复流程] 数据恢复的原理以及方式

F2FS文件系统的数据恢复数据恢复的简介F2FS数据恢复的核心结构是Checkpoint结构,它保存了很多元数据用于维护系统一致性。数据恢复方式有两种,分别是后滚恢复(Roll-Back Recovery),前滚恢复(Roll-Forward Recovery)。Checkpoint的作用从F2FS的磁盘布局可以了解到,F2FS有一个元数据区域,用于集中管理磁盘所有的block的信息,因此...

2019-10-10 21:37:09 3032

原创 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 1584 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 2264

原创 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 2489

原创 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 2673 5

原创 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 1278

原创 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 4061 6

原创 VFS源码分析-Readahead预读机制

Readahead预读机制由于内存的速度比磁盘速度快很多,如果每一次访问文件数据都要从磁盘读取一次数据,就会导致非常严重的时延。因此Linux为了提高性能,通过page cache机制,将多个用户数据缓存在内存当中,从而避免多次再磁盘读取。Readahead预读机制正是将用户数据缓存到内存的方法之一。Readahead机制的介绍Readahead预读机制是Linux针对顺序读的性能优化机制。...

2019-07-20 19:07:57 1582

原创 VFS源码分析-Page Cache Writeback脏页回写机制

Page Cache Writeback机制在Linux系统中,当用户写入数据到文件时,如果没有特殊的标志,用户的数据会被缓存在page cache中,并在适当的时机一并写入到磁盘。这是因为磁盘的IO速度相对与内存而言非常缓慢,如果用户每执行一次写操作就产生一次与磁盘交互的IO,就会大大降低系统的性能。因此Linux会将用户数据缓存在cache中,并通过writeback机制,在适当的时机合并最...

2019-07-19 23:49:18 1638 1

原创 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 2672

原创 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 5157 6

原创 F2FS源码分析-2.1 [F2FS 读写部分] F2FS文件数据组织方式以及物理地址的映射

文件数据的保存以及物理地址的映射文件系统一个重要功能是实现文件的保存以及读写。每个文件系统有不同的保存和读写方式,而F2FS则是通过Node-Data的形式将数据组织起来。其中最重要的结构就是f2fs_node结构,它实现了文件数据的组织和管理。f2fs_node的结构以及作用F2FS每一个文件,根据文件大小的不同,对应了一个或者多个f2fs_node结构,它实际存在于磁盘当中,并每一个f2...

2019-07-03 19:43:37 4653

原创 F2FS源码分析-1.3 [F2FS 元数据布局部分] Checkpoint结构

Checkpoint结构Checkpoint是维护F2FS的数据一致性的结构,它维护了系统当前的状态,例如segment的分配情况,node的分配情况,以及当前的active segment的状态等。F2FS在满足一定的条件的情况下,将当前系统的状态写入Checkpoint中,万一系统出现突然宕机,这个是F2FS可以从Checkpoint中恢复到上次回写时的状态,以保证数据的可恢复性。F2FS维...

2019-07-03 19:39:49 3804 9

原创 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 3055

原创 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 6852 2

原创 userdata.img是如何从AOSP中构造出来的-源码分析

AOSP是如何构造userdata.img在AOSP中,userdata.img的制作命令如下,可以知道make的target是userdataimage。make userdataimage -j4第一步: 执行AOSP根目录的Makefile内容如下:include build/make/core/main.mk跳转到main.mk进行处理。第二步: build/make/c...

2019-06-24 14:17:06 2971

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除