f2fs 系列之七:page cache相关操作和接口

同ext4 一样, f2fs 把不需要sync的写通过page cache的接口落盘。为此,有必要了解f2fs中 page cache相关的接口。

以读为例:

do_read_inode依据inode节点号,将inode所在的磁盘block读到页缓存,该block恰好对应着页缓存中的一个page,对page进行F2FS_INODE转换,转换成f2fs_inode结构。最后使用f2fs_inode 对inode初始化。
我们接着深入get_node_page函数,看看f2fs是如何读取磁盘block的。

__get_node_page函数。
该函数首先调用grab_cache_page查找address_space中是否有inode索引节点号对应的page,如果没有则创建一个新的page插入到页缓存中。紧接着调用read_node_page从磁盘中读取inode对应的block,将block数据放到刚刚创建的page中,最后返回读取到的page。

进入read_node_page。
该函数首先构造bio所需的信息,将信息填充在f2fs_io_info中,并调用get_node_info获得node信息,放到node_info中。最后调用f2fs_submit_page_bio提交bio请求,从磁盘中读取block到page中。

f2fs有三种inode,meta_inode,node_inode和普通的文件inode,前两种inode只存在于vfs层,且数量只有一个。meta_inode对应于SIT,NAT,SSA,checkpoint和super block这些文件系统元数据,node inode对应于main area的node segment的数据,普通文件inode读写的区域对应于main area的data segment。所以,所有的f2fs数据的读写都是通过vfs层的inode的。这些inode的保存在f2fs_sb_info中,在文件系统初始化时f2fs_fill_super生成。再看inode的初始化过程,在函数inode.c/f2fs_iget中:

原文地址:http://blog.51cto.com/xiamachao/2349595

时间: 2024-10-13 21:51:02

f2fs 系列之七:page cache相关操作和接口的相关文章

文件系统学习之八:SVR4中的Page Cache

在SVR4中,所有文件的读写都会经过Page Cache.不同于有固定长度的物理cache,或者buffer cache, 或者DNLC. PageCache和其他cache的区别在于:它可以根据软件需求换进或者换出.另外也和buffer cache不同:buffer cache用设备和块号来索引cache,而page cache用vnode和offset来索引. page cache的构成 一个支持seg_map操作(比如当前段的缺页异常处理)的段: 一个具有多种用途的空闲页表链表(list)

linux系统命令学习系列8-文件相关操作touch,rm,mv,cat,head,tail命令

上节内容: 1. 系统和目录管理 2. Pwd命令 3. .和..目录 4. 相对路径和绝对路径 作业:进入opt路径,分别使用相对路径方法和绝对路径方法进入到其实任意一个子目录 cd /opt 相对路径 cd rh 绝对路径 cd /opt/rh 文件相关操作: 1. 创建文件:touch命令 最简单使用方法:touch 文件名,创建或修改文件的访问和修改时间为当前时间,如果文件不存在直接创建空文件 首先我们创建一个文件test.txt,执行touch test.txt 可以看到我创建了一个文

page cache 与free

我们经常用free查看服务器的内存使用情况,而free中的输出却有些让人困惑,如下: 先看看各个数字的意义以及如何计算得到: free命令输出的第二行(Mem):这行分别显示了物理内存的总量(total).已使用的 (used).空闲的(free).共享的(shared).buffer(buffer大小). cache(cache的大小)的内存.我们知道Total.free.buffers.cached这几个字段是从/proc/meminfo中获取的,而used = total – free.S

SCCM2012 R2实战系列之七:软件分发

在上一章节中,我们完成了SCCM 2012客户端代理软件的安装,现在就可以为客户端来部署应用程序了. SCCM2012增加了应用程序分发,同时保留了SCCM 2007里的包分发.应用程序分发可以直接对msi的程序进行部署,exe的程序可以通过包的分发来做.在本次应用程序分发中,我们将对"Adobe Reader X_10.1.0"进行分发.1. 前提条件确认在应用程序分发前,先对一些必备条件进行再次的确认.如果已经看过之前客户端代理安装的文档,这些操作是已经配置好的.首先在客户机的控制

计算机底层知识拾遗(六)理解页缓存page cache和地址空间address_space

在这篇计算机底层知识拾遗(五)理解块IO层 中讲了块缓存buffer cache块缓存,这篇说说页缓存page cache以及相关的地址空间address_space的要点. 在Linux 2.4内核中块缓存buffer cache和页缓存page cache是并存的,表现的现象是同一份文件的数据,可能即出现在buffer cache中,又出现在页缓存中,这样就造成了物理内存的浪费.Linux 2.6内核对两个cache进行了合并,统一使用页缓存在做缓存,只有极少数的情况下才使用到buffer

SCCM2012 R2实战系列之七:软件分发(exe)

在上一章节中,我们完成了SCCM 2012客户端代理软件的安装,现在就可以为客户端来部署应用程序了. SCCM2012增加了应用程序分发,同时保留了SCCM 2007里的包分发.应用程序分发可以直接对msi的程序进行部署,exe的程序可以通过包的分发来做.在本次应用程序分发中,我们将对"Adobe Reader X_10.1.0"进行分发. 1. 前提条件确认 在应用程序分发前,先对一些必备条件进行再次的确认.如果已经看过之前客户端代理安装的文档,这些操作是已经配置好的. 首先在客户机

[转] 从free到 page cache

[转自 https://www.cnblogs.com/hustcat/archive/2011/10/27/2226995.html ] Free 我们经常用free查看服务器的内存使用情况,而free中的输出却有些让人困惑,如下: 图1-1 先看看各个数字的意义以及如何计算得到: free命令输出的第二行(Mem):这行分别显示了物理内存的总量(total).已使用的 (used).空闲的(free).共享的(shared).buffer(buffer大小). cache(cache的大小)

白话经典算法系列之七 堆与堆排序

堆排序与高速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法.学习堆排序前,先解说下什么是数据结构中的二叉堆. 二叉堆的定义 二叉堆是全然二叉树或者是近似全然二叉树. 二叉堆满足二个特性: 1.父结点的键值总是大于或等于(小于或等于)不论什么一个子节点的键值. 2.每一个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆). 当父结点的键值总是大于或等于不论什么一个子节点的键值时为最大堆.当父结点的键值总是小于或等于不论什么一个子节点的键值时为最小堆.下图展示一个最小堆

【从头开始写操作系统系列】页表以及相关的描述符详解

在之前的文章中,我们介绍过 GDT(全局描述符表)以及一致代码段和非一致代码段,这篇文章我们再回到描述符,这次我们来以 ARM 架构为例了解一下页表描述符. 在这篇文章中,我们会看到以下内容: 页表是什么? 一级页表的地址变换过程 由一级描述符来获取二级描述符或者段地址的过程 页表 页表是什么? 页表是一种特殊的数据结构,放在系统空间的页表区,存放逻辑页与物理页帧的对应关系. 每一个进程都拥有一个自己的页表,PCB表中有指针指向页表. (来自百度百科) 通俗的来讲,页表的内容就是一个描述符(关于