翻译:飞哥 (http://hi.baidu.com/imlidapeng)

版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明。

原文名称:《Linux Performance and Tuning Guidelines》

原文地址:http://www.redbooks.ibm.com/abstracts/redp4285.html

-------------------------------------------------------------------------------------------

1.3.1 虚拟文件系统
1.3.2 日志记录
1.3.3 Ext2
1.3.4 Ext3
1.3.5 ReiserFS
1.3.6 日志文件系统
1.3.7 XFS

-------------------------------------------------------------------------------------------

​Linux作为开源操作系统其中最大的优势就是支援多种文件系统。
​现代Linux内核几乎支援计算机系统中所有文件系统,从基本的FAT到高性能文件系统如日志文件系统【Journaling File System】(JFS)。
​由于Ext2、Ext3和ReiserFS为大多数Linux发行版的原生文件系统(ReiserFS只有使用在Novell SUSE Linux上才能获得商业支持),
​所以我们只集中讲解这些文件系统的相关特性,至于其它文件系统只会略作说明。

关于文件系统和硬盘子系统,参见4.6 “调优硬盘子系统”

​1.3.1 虚拟文件系统

虚拟文件系统(VFS)是一个位于用户进程与各种Linux文件系统之间的抽象接口层,
​它提供用于访问文件系统对象的通用对象模型(如i-node、文件对象、页缓存、目录条目等等)和方法,它对用户进程隐藏了各种文件系统间的差异。
​用户进程不需要知道使用的是哪个文件系统或不同的文件系统需要呼叫哪个系统调用。

​图1-14阐明了VFS的概念。


图1-14 VFS概念

​1.3.2 日志记录

在一个没有日志记录的文件系统中,当文件系统执行一个写操作时,首先内核会更改文件系统的元数据,然后才写入实际的用户数据。
​这样的操作对于保持数据完整性会产生很高的风险。
​当写操作正在更改文件系统元数据时系统突然崩溃,文件系统的一致性很可能遭到破坏。
​在下次重启时,fsck需要通过检查所有的元数据来修复一致性。
​但当系统的容量很大时,完成检查需要很长的时间才能完成。在此过程中系统是不可以使用的。

一个有日志记录的文件系统是通过在数据写入实际文件系统前先将变更的数据写入日志区【Journal Area】来解决这个问题。
​日志区可以被放置于文件系统中也可被放置于文件系统之外。被写入日志区的数据被称作日志记录【Journal Log】。
​它包含文件系统元数据的变化和实际的文件数据(如果支持)。

因为日志记录在写入实际用户数据到文件系统前需要写入journal log,相对于没有日志记录的文件系统这会导致性能上的开销。
​维护数据的高一致性会牺牲多少的性能开销,取决写入用户数据前有多少信息需要写入硬盘。
​我们将在1.3.4“Ext3”中讨论此课题。


图1-15日志记录概念

​1.3.3 Ext2

Ext2是Ext3文件系统的前身,一个快速、简单的文件系统。
​不像当今其它大多数文件系统一样,它并没有日志功能。

图1-16向我们展示了Ext2文件系统的数据结构。
​文件系统以引导扇区开始,紧接着是块组【Block Group】。
​因i-node表和存储用户数据的数据块【Data Block】可以位于磁碟片相邻位置,这样就可以减少寻道的时间,
​为了性能的提升整个文件系统被分为多个小块组。

​一个块组是由下面几项组成:

Super block :                  存储文件系统信息。Super block必须位于每个块组的顶部。
Block group descriptor:存储块组的相关信息。
Data block bitmaps:       用于管理未使用的数据块。
i-node bitmaps:              用户管理未使用的i-node。
i-node tables:                 存储i-node表。每个文件都有一个相应的i-node表,用来保存文件的元数据如:
​                                           文件模式、uid、gid、atime、ctime、mtime、dtime和数据块的指针。
Data blocks:                    存储实际的用户数据。


图1-16 Ext2文件系统数据结构

为了要找到组成文件的数据块,内核首先查找文件的i-node。
​当一个进程请求打开/var/log/messages时,内核解析文件路径并查找/(根目录)的目录项,获得其下的文件及目录信息。
​下一步内核继续查找/var的i-node并查看/var的目录项,它也包含其下的文件及目录信息。
​内核继续使用同样的方法直到找到所要文件的i-node。Linux内核使用文件对象缓存如目录项缓存或i-node缓存,来加快查找相应i-node的速度。

当Linux内核找到文件的i-node后,它将尝试访问实际的用户数据块。
​正像我们所讲述的,i-node保存有数据块的指针。通过指针内核可以获得数据块。
​对于大文件,Ext2提供了直接/间接的数据块参照。

​图1-17描绘了其是怎样运作的。


图1-17 Ext2文件系统直接/间接的数据块参照

不同的文件系统在文件系统结构和文件访问操作上存在着不同的差异,这让每个文件系统都各具特色。

​1.3.4 Ext3

当前Linux企业发行版中都支持第三扩展文件系统。
​它作为第二扩展文件系统的升级版本被广泛使用。尽管它有着与Ext2文件系统相似的基本结构,
​但与Ext2最大的不同之处就是其拥有日志记录功能。

​此文件系统亮点包括:

▶ 可用性:Ext3始终保持写入硬盘数据的一致性。当发生非正常关机(以外的电源故障或系统崩溃)时,服务器不需要花费时间去检查数据的一致性,从而将系统恢复时间从几小时缩短至几秒钟。

▶ 数据完整性:在mount命令时通过指定日志记录模式data=journal,所有数据包括文件数据及元数据都会被记录日志。

▶ 速度:通过指定日志记录模式data=writeback,你可以根据业务需要来决定选择速度还是完整性。在一个同时发生写操作非常频繁的环境中这是非常重要的。

▶ 复杂度:将一个已存在的Ext2文件系统升级到Ext3文件系统是很简单的,不需要重新格式化。
​                  通过执行tune2fs命令并修改/etc/fstab文件,你就可以很容易将Ext2升级到Ext3文件系统。
​                  此外Ext3文件系统可以被挂载为Ext2,但日志记录功能此时是不可用的。
​                  有许多第三方的产品提供调整Ext3文件系统的功能,例如PartitionMagic可以修改Ext3的分区。

​日志模式

Ext3支持3种日志模式

▶ 日志

此种模式提供了最高等级的数据一致性,文件数据和元数据都将被记录日志。它也会造成过多的性能开销。

▶ 顺序

在这种模式下只有元数据会被写入,然而在此之前首先保证文件数据已被写入。此模式为默认设定。

▶ 回写

此种模式是在牺牲数据一致性的情况下提供访问数据最快的速度。为保证数据的一致性,元数据任会被记录。然而实际的文件数据并不会被特殊处理,这就导致当系统崩溃后旧数据的出现。

​1.3.5 ReiserFS

ReiserFS是一种快速的日志文件系统,它可以优化硬盘空间的使用和加快故障恢复的速度。
​ReiserFS的开发很大程度上得益于Novell的支助。只有在Novell SUSE Linux上使用ReiserFS才可以得到商业支持。

​1.3.6 Journal File System

JFS是一个全64位文件系统,能支持大文件和分区。
​JFS起初是IBM为AIX所开发的,但现在已近可以在GPL下使用。
​JFS对于高性能计算(HPC)和数据库环境中的大分区和文件是非常理想的文件系统。
​如果想了解更多,参见http://jfs.sourceforge.net
注释:在Novel SUSE Linux Enterprise Server 10中,JFS不在被支持。

​1.3.7 XFS

eXtended File System(XFS)起初是Silicon Graphics公司为其IRIX系列系统开发的高性能日志文件系统
​。其功能特性与来自IBM的JFS非常相似,也支持大文件和分区,因此使用情境与JFS也十分相似。

《Linux性能及调优指南》1.3 Linux文件系统的更多相关文章

  1. 《Linux 性能及调优指南》写在后面的话

    感谢飞哥的翻译. 目前飞哥 (http://hi.baidu.com/imlidapeng)的网址已经不能访问了. <Linux 性能及调优指南>这本书的原文地址:http://www.r ...

  2. 《linux性能及调优指南》 3.5 网络瓶颈

    3.5 Network bottlenecks A performance problem in the network subsystem can be the cause of many prob ...

  3. 《Linux 性能及调优指南》2.3 监控工具

    翻译:飞哥 (http://hi.baidu.com/imlidapeng) 版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明. 原文名称:<Linux Performance a ...

  4. 《Linux 性能及调优指南》1.5 网络子系统

    翻译:飞哥 (http://hi.baidu.com/imlidapeng) 版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明. 原文名称:<Linux Performance a ...

  5. 《Linux 性能及调优指南》1.4 硬盘I/O子系统

    翻译:飞哥 (http://hi.baidu.com/imlidapeng) 版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明. 原文名称:<Linux Performance a ...

  6. 《Linux 性能及调优指南》3.1 确认瓶颈

    翻译:飞哥 ( http://hi.baidu.com/imlidapeng ) 版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明. 原文名称:<Linux Performance ...

  7. Linux性能及调优指南1.2之Linux内存架构

    本文为IBM RedBook的Linux Performanceand Tuning Guidelines的1.2节的翻译原文地址:http://www.redbooks.ibm.com/redpap ...

  8. 《Linux 性能及调优指南》1.6 了解Linux性能指标

    翻译:飞哥 (http://hi.baidu.com/imlidapeng) 版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明. 原文名称:<Linux Performance a ...

  9. Linux性能及调优指南(翻译)之Linux进程管理

    本文为IBM RedBook的Linux Performanceand Tuning Guidelines的1.1节的翻译原文地址:http://www.redbooks.ibm.com/redpap ...

随机推荐

  1. [转]HTML 简介

    HTML 实例 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...

  2. JAVA中将对象转为Map类型

    之前讲过将Map转为JAVA对象的文章,那么问题来了,如果要把JAVA对象转为Map,又该怎么操作呢?这里亲测了2个方法可行,但目前这2个方法都是基于简单JAVA Bean的情况(即Bean中不能嵌套 ...

  3. MongoDB之 的Rollback讲解及避免

    首先,rollback到底是什么意思呢?在关系型数据库中因为有事务的概念,操作数据后在没有commit之前是可以执行rollback命令进行数据回退的. 而在单实例mongodb中,写入就写入了,删除 ...

  4. Swoole来实现实时异步任务队列

    假如要发100封邮件,for循环100遍,用户直接揭竿而起,什么破网站!但实际上,我们很可能有超过1万的邮件.怎么处理这个延迟的问题?答案就是用异步.把“发邮件”这个操作封装,然后后台异步地执行1万遍 ...

  5. win764位系统上让32位程序能申请到4GB内存方法

    win764位系统上让32位程序能申请到4GB内存方法. 2016年09月18日 18:36:26 阅读数:1550 最近测试一个32位程序总是在1.2G左右内存时崩溃,怀疑是内存申请失败,本身32位 ...

  6. 《亲测》nginx webscoket ssl conf配置示例

    非crt证书,用的pem,其中 http://localhost:5003 是你要转发到的站点网址 配置的就是 server { listen 80; server_name smarthome.yi ...

  7. 【java】之深入理解JVM

    JVM规范定义的标准结构如下: 以上结构是JVM标准规范中定义的,但各厂家在实现时不一定会完全遵守, 1.JVM负责加载class文件并执行,因此,首先要掌握的是JDK如何将Java代码编译成clas ...

  8. Memcached 集群架构方面的问题 [z]

    集群架构方面的问题       memcached是怎么工作的? Memcached的神奇来自两阶段哈希(two-stage hash).Memcached就像一个巨大的.存储了很多<key,v ...

  9. centos7系列-给普通用户sudo权限

    对于linux用户来讲,普通用户的权限是有一定限制的,所以在有些操作的时候,是需要sudo权限的,那么如何在linux下赋予普通用户sudo权限呢?此处将讲解一下方法. 在login我们的系统后,如果 ...

  10. 无法清除cookie中的属性值之对解决问题的思考

    关于如何快速解决一个自己知识以外的问题的思考 做好任何事情都是讲究方法的,这是我健身之后的一个领悟,用正确的方式做事,自己的付出才能有价值. 首先分析问题: 比如我想清除cookie里面的token, ...