linux文件系统F2FS,文件系统F2FS也将造福SSD
F2FS有什么背景让华为大肆宣扬呢?
F2FS (Flash Friendly File System) 是三星做的一个开源的针对于flash
memory的文件系统,已经被Linux merge到了kernel中,专门为基于 NAND 的存储设备设计的新型开源 flash
文件系统。特别针对NAND 闪存存储介质做了友好设计。F2FS 于2012年12月进入Linux 3.8
内核。目前,F2FS仅支持Linux操作系统。
由三星在NAND闪存上使用,它的特点是相较EXT3/4分区格式,显著提高了4K性能,也就是小文件的读取速度。
【F2FS与SSD的缘分】
针对SSD的各种特性,F2FS文件系统做了一些针对性的优化。
1)采用Log-structured File
System的形式。因为这种形式把整个存储设备当作一个环形log一样顺序的写,这符合SSD顺序写的特性。整个文件系统被分为了以segment为单位的区间,每个segment固定大小为2MB。一个section由多个连续的segment组成,一个zone由多个section组成。默认情况下section和zone的size被设定为一个segment的size,但可以随便改。
align with the zone size
|->
align with the segment size
_________________________________________________________________________
| | | Segment |
Node | Segment |
|
| Superblock | Checkpoint |
Info. | Address |
Summary | Main |
| (SB)
| (CP)
| Table (SIT) | Table (NAT) |
Area (SSA) | |
|____________|_____2______|______N______|______N______|______N_____|__N___|
. .
.
.
.
.
.__________________________________________
|_Segment_|_..._|_Segment_|_..._|_Segment_|
. .
._________._________
|_section_|__...__|_
. .
.________.
|__zone__|
2)解决Wandering Tree Problem。首先定义Wandering Tree
Problem:每一次写操作都要写入一个新的位置,在更新inode存储中,要更新direct
table的指针也需要重写,这个page也要写到新的block中,而上一级的indirect
table因此也需要重写,这样一连串的重写会一直走到树根。同时inode map和checkpoint
block也需要重写。他依然采用了经典的inode,但做了一个Node Address
Table(NAT),这个表是扁平化的,包含了所有node
block的位置,可以认为inode里存储的是逻辑地址,NAT转换为真实的物理地址。
3)Block分配。它将数据和node划分为cold、warm、hot三种类型,共计6种形式。
这些数据被分配在6个log中。他把appended
data当作cold,因为只写一次就好,把更新的data当作warm,因为这到后来需要garbage
collection。这就充分利用了SSD的特性:GC的时候,由于Warm中的data经常需要更新,因此里面包含了大量的invalid
page,这是桌重要找的地方。
4)Garbage Collection
两种策略:Greedy和Cost-benefit。Greedy就找invalid
pages最多的block来当victim,而Cost-benefit算法不但要考虑invalid pages,还要考虑segment
age,以延长SSD读写寿命。
附录:【关于inode】
inode是什么?
理解inode,要从文件储存说起。
文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。
操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个
sector组成一个 block。
文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。
每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。
更多内容,请关注微信公众号:存储随笔,ID:
Memory-logger,
linux文件系统F2FS,文件系统F2FS也将造福SSD相关推荐
- F2FS文件系统工具编译及使用方法
有问题 http://blog.chinaunix.net/uid-22497486-id-4075737.html 1· 用git下载f2fs文件系统tools的源代码.下载地址如下:http: ...
- F2FS文件系统架构与原理分析(五)——元数据组织及管理
from : http://blog.chinaunix.net/uid-28989651-id-3911126.html 1. 元数据区域 元数据区域包含以下几种元数据(参见博文:F2FS文件系统架 ...
- F2FS文件系统架构与原理分析(三) ——文件索引树
from : http://blog.chinaunix.net/uid-28989651-id-3902441.html 文件(Files).索引节点(Inodes).数据块索引(Indexing) ...
- Linux 知:文件系统
文章目录 1. 前言 2. 文件 2.1. 一切皆文件 2.2. 文件属性 2.3. 目录结构 2.4. 文件路径 3. 文件系统 3.1. 文件系统种类 3.2. 文件系统特性 3.2.1. 格式化 ...
- linux文件系统dentry_NFS 文件系统源代码剖析
NFS 文件系统概述 NFS(Network File System,网络文件系统)是一种基于网络的文件系统.它可以将远端服务器文件系统的目录挂载到本地文件系统的目录上,允许用户或者应用程序像访问本地 ...
- Linux 指令篇:文件系统--fstab
Linux 指令篇:文件系统-----FSTAB 指令:FSTAB 使用权限 : 超级使用者 使用方式 : 使用编辑器来修改 /etc/fstab (eg. vi /etc/fstab) 说明 : 存 ...
- 【转】Linux世界驰骋——文件系统和设备管理
http://www.linuxdiyf.com/viewarticle.php?id=2662 Linux系统的一个重要特征就是支持多种不同的文件系统,如ext.FAT.ext2.ext3.MINI ...
- linux系统中文件编程,Linux当中的文件系统
1. 设备专用文件(设备文件) 设备专用文件与系统的某个设备相对应.在内核中,每种设备类型都有阈值向对应的设备驱动程序,用来处理设备的所有I/O请求.可以将设备划分为字符设备和块设备两种. 每个设备文 ...
- Linux 操作系统原理 — 文件系统 — 管理与优化
目录 文章目录 目录 磁盘空间管理 磁盘配额 文件系统备份 文件系统的一致性 文件系统性能 高速缓存 块提前读 减少磁盘臂运动 磁盘碎片整理 磁盘空间管理 文件通常存在磁盘中,所以如何管理磁盘空间是一 ...
- Linux 操作系统原理 — 文件系统 — 存储布局
目录 文章目录 目录 磁盘分区 MBR 与分区表 创建 MBR 分区 创建 GPT 分区 分区的格式化 分区的特性 引导块 空闲空间块 inode 区块.data block 区块与超级块 LVM 与 ...
最新文章
- vivado2017.4安装教程
- Cognos CFG-ERR-0103 无法启动 IBM Cognos 服务
- 大唐波斯将军 机器人_你的工作会被机器人取代吗?
作者:大唐波斯将军2015-04-08 09:34...
- The Code Is The Model
- 对promise.all底层的实现的研究
- 递推(hdu2563)
- python学生管理系统用类写_python面向对象——学校学生教职工管理系统类的实例...
- C语言会生成字节码文件吗,什么是字节码文件?
- python3.5手册下载_python3.5.2官方帮助文档 参考手册(CHM版)
- 微信小程序--Todos案例
- Element组件 Drawer 抽屉的关闭问题
- 衡量度量过程性能的几个指标
- 无代码白话版通俗的理解机器学习如何对未知的数据进行预测
- 《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——1.4 角色模型...
- 【智哪儿评测】轻松玩转智能家居,萤石B1智家护卫传感套装评测
- 转换率是什么?如何提升转换率(CVR)?
- 使用.NET Micro ORM “Symbiotic”的简单 CRUD
- MISC 入门隐写之用眼睛去倾听
- 戴森设计大奖,以可持续化设计改变世界
- Google首席软件工程师Joshua Bloch谈如何设计一款优秀的API