Linux日志文件系统及性能分析(组图)
6) 键分配(key Assignment)接口 当把一个键分配给一个项时,键分配接口就会被触发。每一种项都有一个与其对应的键分配方法。
3.2 存储层
ReiserFS是以B+树来存储数据的,其结构如图:
图1:ReiserFS B+ 树
[upload=1]
在B+树中的各个结点中有一个称为项(Item)的数据结构。项是一个数据容器,一个项只属于一个结点,是结点管理空间的基本单位。如图所示,一个项包括以下内容:
1) Item_body:项的数据域
2) Item_key: 项的键值
3) Item_offset:数据域的起点在结点中的偏移量
4) Item_length: 数据域的长度
5) Item_Plugin_id:项接口ID。
图2: ReiserFS 项结构
[upload=2]
ReiserFS设计了多种不同的项以存储不同的数据,主要有以下几种:
1) static_stat_data: 静态统计数据,包括文件的所有者,访问权限,创建时间,最近修改时间,链接数等
2) cmpnd_dir_item: 包含各个目录项
3) extend_pointers: 指向一个盘区(extend)
4) node_pointers: 指向一个结点
5) bodies: 包含的是文件的小部分数据
3.3 ReiserFS日志
与ext3 一样,ReiserFS也有三种日志模式,即journal,ordered,writeback。同时,ReiserFS引入了两种日志优化方法: copy-on-capture和steal-on-capture。copy-on-capture:当一个事务要修改的块在另一个未提交的事务中时,就把这个块复制一份,这样这两个事务就可以并发进行了。steal-on-capture:当一个块被多个事务修改时,只有最晚提交的那个事务才把这个块实际写入文件系统,其他事务都不写这个块。
四、XFS
XFS 是一种高性能的64 位文件系统,由SGI 公司为了替代原有的EFS 文件系统而开发的。XFS 通过保持cache 的一致性、定位数据和分布处理磁盘请求来提供对文件系统数据的低延迟、高带宽的访问。目前SGI已经将XFS文件系统从IRIX移植到Linux。
4.1 分配组(allocation groups)
当创建 XFS 文件系统时,底层块设备被分割成八个或更多个大小相等的线性区域(region),用户可以将它们想象成块(chunk)或者线性范围(range),在 XFS 中,每个区域称为一个分配组。分配组是唯一的,因为每个分配组管理自己的索引节点(inode)和空闲空间,实际上是将这些分配组转化为一种文件子系统,这些子系统透明地存在于 XFS 文件系统内。有了分配组,XFS 代码将允许多个线程和进程持续以并行方式运行,即使它们中的许多线程和进程正在同一文件系统上执行大规模 IO 操作。因此,将 XFS 与某些高端硬件相结合,将获得高性能而不会使文件系统成为瓶颈。分配组在内部使用高效的 B+树来跟踪主要数据,具有优越性能和极大的可扩展性。
4.2 日志记录
XFS 也是一种日志记录文件系统,它允许意外重新引导后的快速恢复。象 ReiserFS 一样,XFS 使用逻辑日志;它不象 ext3 那样将文字文件系统块记录到日志,而是使用一种高效的磁盘格式来记录元数据的变动。就 XFS 而言,逻辑日志记录是很适合的;在高端硬件上,日志经常是整个文件系统中争用
评论