Android技术讨论

Android修改Mount参数提高IO效率的缘由

2018-04-20  本文已影响356人  Persisting

针对项目,特别是低端项目使用的不怎么好的emmc,为了提高userdata和system分区读写的IO效率,大多在fstab一个文件里面修改这两个分区的挂载属性。

修改前:

/dev/block/bootdevice/by-name/system        /system      ext4    ro,barrier=1,discard                                wait

/dev/block/bootdevice/by-name/userdata      /data        ext4    nosuid,nodev,barrier=1,noauto_da_alloc,discard      wait,check,forceencrypt=footer

修改后:

/dev/block/bootdevice/by-name/system        /system      ext4    ro,barrier=0,discard                                wait

/dev/block/bootdevice/by-name/userdata      /data        ext4    nosuid,noatime,nodev,barrier=0,noauto_da_alloc,discard      wait,check,encryptable=footer

在上面的修改中主要涉及到几个属性barrier,noatime,encrypt,下面主要解释下为何这么修改:


barrier:

  Linux日志和barrier功能

  要理解barrier,你首先需要理解文件系统日志功能。常用的文件系统使用日志功能来保证文件系统的完整性。该功能背后的思路很简单:在写入新的 数据块到磁盘之前,会先将元数据写入日志。

  预先将元数据写入日志可以保证在写入真实数据前后一旦发生错误,日志功能能很容易地回滚到更改之前的状态。这个 方法确保了不会发生文件系统崩溃的情况。

  单独使用日志功能不能保证没有任何差错。现在的磁盘大都有大容量的缓存,数据不会立即写入到磁盘中,而是先写入到磁盘缓存中。到这一步,磁盘控制器 就能更加高效地将其复制到磁盘中。

  这对性能来说是有好处的,但是对日志功能来说则相反。为了保证日志百分之百可靠,它必须绝对保证元数据在真实数据写入之 前被预先写入。这就是我们要介绍文件系统barrier的原因。

  我们很容易理解使用barrier的根本原因:barrier本身禁止在barrier之后写入数据,真实的数据块将在barrier被写入之前完 全写入磁盘。使用barrier可以确保文件系统的完整性,

  因为barrier功能 在EXT4文件系统中是默认启用的(除非你的操作系统更改了这个默认设置)。

使用barrier保护的风险之一是,在系统中断时,数据会留在缓存中,而永不会写入文件系统。一个简单的电池备份控制器可以避免这个问题。当服务器使用的这个控制器出故障了,磁盘控制器    仍然能保证变更操作,这充分排除了barrier使用的需要。  使用barrier的另一个不利之处在于,你需要付出降低性能的代价。如果你需要顶级的性能,那么你可以用挂载选项-o barrier=0来关闭barrier功能,比如:    mount /dev/sda2 -o barrier=0  /data。 文件系统barrier功能非常有用,但是不能和设备映射器配合工作。如果你需要使用这类设备,但是又想要保证文件系统完整性,那么你可以用电池备 份磁盘控制器。如果你的硬件不支持这个,    那么你只能避免使用设备映射器,这样才能用barrier功能来保障文件系统完整性。还有,如果你希望得到更好的 系统性能,最好也不要开启barrier功能,它会降低系统运行速度。具体参考:http://blog.sina.com.cn/s/blog_6200c1440100w4mp.html

noatime:

  首先提到atime,Linux文件系统在文件被访问、创建、修改等的时候记录下了文件的一些时间戳,比如:文件创建时间、最近一次修改时间和最近一次访问时间。因为系统运行的时候要访问大量

      文件,如果能减少一些动作(比如减少时间戳的记录次数等)将会显著提高磁盘 IO 的效率、提升文件系统的性能

  所以Linux提供了noatime这个参数来禁止记录最近一次访问的时间戳。

encyptable:

  forceencrypt是强制加密意思,而encyptable是可加密,但默认不加密

还有很多mount参数,具体参考http://www.360doc.com/content/13/0608/14/12600778_291501907.shtml

上一篇下一篇

猜你喜欢

热点阅读