提升ZFS性能的10个简便方法

Copyright © 2009, The e. Publishing Dept. of Morpho Studio (Spruce Int. Found.® ) All rights reserved.

关于ZFS,最经常被提到的问题就是:“如何提升ZFS的性能?”
这不是说ZFS的性能不好,任何现有的文件系统在使用一段时间以后性能都会变差。事实上zfs可以是一个非常快速的文件系统。

ZFS具有最强的自我校正特性和ZFS后台算法的固有特性,能帮助你在无需昂贵的硬件控制器的情况下达到比大多数RAID控制器和RAID模组更好的性能。所以我们说ZFS是目前业界的第一个真正的RAID(廉价磁盘阵列)解决方案。

大多数我所见到的对ZFS性能问题,根本上都是源于对硬件性能的错误假设,或仅仅参照那些不切实际的物理定律做出的判定。

现在,我们应该来看一下10个可以提升ZFS性能的简便方法,这些每个人都能够使用,并不需要首先学成ZFS的专家。
为了便于阅读,这里先列出一个内容目录:

  • 文件系统性能基础
  • 性能预期,目标与策略
  • #1: 添加足够的内存
  • #2: 添加更多的内存
  • #3: 增加更多的内存获得重复数据消除技术带来的性能提升
  • #4: 使用固态硬盘(SSDs)提升读取性能
  • #5: 使用固态硬盘(SSDs)提升写入性能
  • #6: 使用镜像
  • #7: 增加更多的磁盘
  • #8: 保留足够的空闲空间
  • #9: 雇佣一个专家
  • #10: 深入调教——但是你必须清楚自己在做什么
  • 奖励:一些五花八门的设定实例
  • 轮到你了
  • 相关文章

在开始我们的性能主题之前,首先复习下基础知识:

文件系统性能基础

分清两类基本的文件系统操作是非常重要的:读 和 写

有人可能会说这是一个很简单甚至愚蠢的问题。但是你必须有耐心听我说完,作为FS文件系统的两个I/O 子系统,读和写的数据操作流程具有非常大的差异,这意味着提升读/写性能的方法是有差别的。

我们可以使用 zpool iostatiostat(1M) 命令来核查系统的读/写性能是否符合你的意见或预期。

然后,我们需要了解文件系统两类性能参数:

  • Bandwidth(带宽): 以MB/s (或 GB/s 如果你幸运的话)为衡量单位,这个参数告诉你单位时间内有多少数据通过文件系统(被读取或写入)。
  • IOPS: 每秒钟的IO 操作次数。

再次,这些不同的性能视角在进行性能优化时有不同的意义,你只需要了解自己面临的是哪一类特殊问题。 同时读/写都有两种不同的性能模式:

  • Sequential(顺序的): 可预测的,连续(/相邻)存储的数据块
  • Random(随机的): 不可预测了,无序的,难以连续操作/存取的数据块

这里有一个好消息,ZFS 通过称为copy-on-write的魔术(操作特性),自动将随机的写操作转化为连续的写操作。这是一类较少被其他文件系统较少顾及到的性能问题。

最后,对I/Os操作来说,你应该了一心两种操作直接的解差别:

  • Synchronous Writes(同步写): 只有在数据写入稳定的存储介质(stable storage如磁盘)之后,写操作才视为完成。在ZFS中,这类操作会通过ZFS Intent Log, or ZIL来执行. 这类操作最常发生在文件服务器和数据库服务器上,对磁盘的潜伏周期和IPOS性能最为敏感。
  • Asynchronous Writes(异步写): 在数据被提交到磁盘前,只要已被缓存到内存后就可返回(进行其他后续数据操作)的写操作结束。由此很容易获得性能提升,但是是以牺牲数据存储可靠性为代价的。如果在数据被后台程序真正写入到磁盘以前系统意外掉电,将有可能发生数据丢失,甚至是更为严重的问题,比如RAID5条带写入陷阱的问题(将导致整个条带数据的校验错误,所以对可靠性要求高的场合需要采用昂贵的后备电源方案)。

性能预期,目标与策略
马上就将开始今天的性能主题了,不过在开始之前,我们需要理清一些概念:

*确定实际的预期:ZFS是很棒的,是的。 但是你需要遵守物理学定律。 一个10000 rpm的一个磁盘不能实现超过每秒166次的随机IOPS,因为10000 prm(周/分钟) 除以60秒(每分钟)等于166。这表示磁头每秒钟只能在一个随机街区上方定位它自己的位置166次。 任何多于那个数的寻道和你的数据读/写其实不是随机的。磁盘随机读/写操作的最大理论IOPS数就是这么计算出来的。

与此类似,RAID-Z 意味对于每个RAID-Z磁盘组你只会获得相当于单个磁盘的IOPS性能,因为每个文件系统IO 将并行发生在一个RAID-Z磁盘组的全部磁盘上。

你得明确得知你到你的存储设备的物理限制和你期望的实际性能,在什么时候分析你性能并且确定性能目标。

*设定性能目标:究竟什么情况是" 太慢" ?  什么性能将是可接受的? 现在获得了多大的性能,并且你想要多大的性能?

设定性能目标很重要,因为他们告诉你什么时候你已经做到了。 总有方法提高性能,但是不惜任何代价提高性能是无用的。 知道什么时候你已经做到了,然后庆祝!

*系统性:我们试验这,然后我们试验那,我们用CP(1)来测量,即使我们的应用实际上是数据库。然后我们各处拧(调整参数),并且通常在我们知道它是什么之前,我们意识到:我们真的什么也不知道。

有系统是指确定怎样的方法测量我们想要的性能,设定系统当前的状态,然后用我们感兴趣的直接与实际应用有关的一种性能测定方式,并坚持在整个性能分析和优化过程中使用相同的方法。

否则,事情变得令人困惑,我们会丢失信号,我们将不能告诉自己是否到达了目标。

现在我们已经理解我们想要那一类的性能提升,我们了解基于今天的硬件我们可以期望实现的性能,我们确定一些实际的目标,并且对性能优化有一条有条不紊的方法,下面让我们开始今天的主题:

你可能感兴趣的:(职场,休闲,ZFS)