SAS RAID5的正常速度

不明白为什么写在RAID5上的10xHDD SAS写速度太慢了。 读caching:启用写caching:禁用(服务器没有电池)条大小:512k

----------------------------------------------------------------------- CrystalDiskMark 3.0.1 x64 (C) 2007-2010 hiyohiyo Crystal Dew World : http://crystalmark.info/ ----------------------------------------------------------------------- * MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s] Sequential Read : 371.345 MB/s Sequential Write : 22.066 MB/s Random Read 512KB : 1710.567 MB/s Random Write 512KB : 18.550 MB/s Random Read 4KB (QD=1) : 78.245 MB/s [ 19102.9 IOPS] Random Write 4KB (QD=1) : 0.654 MB/s [ 159.6 IOPS] Random Read 4KB (QD=32) : 538.820 MB/s [131547.9 IOPS] Random Write 4KB (QD=32) : 2.214 MB/s [ 540.5 IOPS] Test : 50 MB [E: 0.0% (0.4/16740.0 GB)] (x2) Date : 2016/09/28 12:35:44 OS : Windows NT 6.2 Server Standard Edition (full installation) [6.2 Build 9200] (x64) -------- 

在ESXi6U2的虚拟机中的相同操作系统中进行testing的结果相同。 控制器:逻辑SAS(创buildVM时的默认设置)。

使用硬件RAID控制器:Adpatec 8405。

为什么太慢? 感谢任何解决scheme。

无论使用写caching还是不使用,都绝对不要使用RAID-5。 任何RAID都可以在没有电池缓冲的情况下进行写入。 另外,使用电池缓冲器时,会大大提高写入性能。

但是,如果您完全坚持不使用电池缓冲,请尝试降低条纹大小。 512k看起来很大,如果你大多做随机,小IO。 在3x HDD大小的arrays上,您需要编写1兆字节的连续块来饱和IOpath。 由于读取 – 修改 – 写入循环,造成较小的IO导致写入放大。 这意味着,您的arrays读取1 MB的networking数据,修改4k,并且需要再次写入1 MB。 增加寻找开销解释了为什么即使512k性能如此之低(放大因子是2,重写数据需要等待几乎一盘的盘旋,每1M写入数据增加8ms IO等待)。 实际上,你只能以这种方式每16ms传输512k,这就是你得到的:小于32MB / s(如果你的磁盘有8ms访问时间)。 我甚至build议平均访问时间是你最大的问题在这里。 获得一个电池缓冲的caching,没有办法绕过它。 并使用SSD CacheCade来减less查找开销。

您可以通过使用UPS和回写式caching来解决问题,但在控制器上没有BBU,caching可能仍然受到应用程序caching刷新和写入屏障的影响,这样仍然会导致性能下降。

如果你不能预测你的应用程序的写入模式,我会把条带大小降低很多,特别是如果你要使用很多的主轴。

为什么写caching被禁用? 如果您在RAID控制器上有电池(没有find信息),您可以激活回写模式。

那么RAID 50呢? 你放松磁盘空间,但真的提高了表演。

我认为10个磁盘上的RAID 5是通过校验计算减慢的,但我不是专家。

它典型的RAID5问题。 需要写入caching以避免读取 – 修改 – 写入周期。 它降低了性能,有时非常强烈。 https://en.wikipedia.org/wiki/Read-modify-write我有一些这种types的RAID,没有caching它写得很慢。

另一个想法:你可以configuration内核调度器: https : //www.kernel.org/doc/Documentation/block/queue-sysfs.txt

使用noop调度器而不是cfq。 RAID控制器有自己的调度程序,所以在写入设备之前,你的数据包被调度了2次。

设置它:echo'noop'> / sys / block / DEVICENAME / queue / scheduler

你可以通过在debian上使用sysfsutils包来使其持久化。

又一个想法:增加你的RAM。 Linux会自动使用它来caching文件。 我知道这只是解决问题,但如果你的写作时间短,这可能是最好的方法。

  1. 是的,绝对正确。 至less我需要启用“写回caching”和“回写”选项来提高随机数据写入命令的性能。

写入caching的结果:

 ----------------------------------------------------------------------- CrystalDiskMark 3.0.1 x64 (C) 2007-2010 hiyohiyo Crystal Dew World : http://crystalmark.info/ ----------------------------------------------------------------------- * MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s] Sequential Read : 1950.515 MB/s Sequential Write : 3545.783 MB/s Random Read 512KB : 2932.946 MB/s Random Write 512KB : 2980.421 MB/s Random Read 4KB (QD=1) : 79.481 MB/s [ 19404.4 IOPS] Random Write 4KB (QD=1) : 78.543 MB/s [ 19175.5 IOPS] Random Read 4KB (QD=32) : 551.817 MB/s [134721.0 IOPS] Random Write 4KB (QD=32) : 519.086 MB/s [126729.9 IOPS] Test : 50 MB [E: 0.0% (0.4/16740.0 GB)] (x2) Date : 2016/09/28 14:25:09 OS : Windows NT 6.2 Server Standard Edition (full installation) [6.2 Build 9200] (x64) 

两个结果都是采用Adaptec 8405在相同的10xHHD RAID5上进行的。部门:规格4k条带大小:512k

  1. 我想,有时候一个通道的SAS控制器对I / O来说是不够的。 使用单通道或扩展。
  2. RAID50是增加速度的选项。

RAID50在同一硬件上的结果:

 ----------------------------------------------------------------------- CrystalDiskMark 3.0.1 x64 (C) 2007-2010 hiyohiyo Crystal Dew World : http://crystalmark.info/ ----------------------------------------------------------------------- * MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s] Sequential Read : 1799.496 MB/s Sequential Write : 3423.066 MB/s Random Read 512KB : 2450.107 MB/s Random Write 512KB : 2627.551 MB/s Random Read 4KB (QD=1) : 77.889 MB/s [ 19016.0 IOPS] Random Write 4KB (QD=1) : 76.530 MB/s [ 18684.0 IOPS] Random Read 4KB (QD=32) : 519.356 MB/s [126796.0 IOPS] Random Write 4KB (QD=32) : 522.408 MB/s [127541.0 IOPS] Test : 50 MB [E: 0.0% (0.6/14879.9 GB)] (x2) Date : 2016/09/29 6:41:13 OS : Windows NT 6.2 Server Standard Edition (full installation) [6.2 Build 9200] (x64) 

无论如何,我仍然在寻找解决scheme,尽可能地提高写入速度。

有关条纹的深度信息(感谢hurikhan77):

'不应该使用RAID-5而不使用电池 – 不pipe是否使用写入caching。 任何RAID都可以在没有电池缓冲的情况下进行写入。 另外,它会提高写入性能。

但是,如果您完全坚持不使用电池缓冲,请尝试降低条纹大小。 512k看起来很大,如果你大多做随机,小IO。 在3x HDD大小的arrays上,您需要编写1兆字节的连续块来饱和IOpath。 由于读取 – 修改 – 写入周期,造成较小的IO导致写入放大。 这意味着,您的arrays读取1 MB的networking数据,修改4k,并且需要再次写入1 MB。 增加寻找开销解释了为什么即使512k性能如此之低(放大因子是2,重写数据需要等待几乎一盘的盘旋,每1M写入数据增加8ms IO等待)。 实际上,你只能以这种方式每16ms传输512k,这就是你得到的:小于32MB / s(如果你的磁盘有8ms访问时间)。 我甚至build议平均访问时间是你最大的问题在这里。 获得一个电池缓冲的caching,没有办法绕过它。 并使用SSD CacheCade来减less查找开销。

写入速度较慢的原因是由于RAID5在写入小于全条纹的元素时如何pipe理input数据。 在这种情况下,控制器被迫执行重复的读 – 修改 – 写模式,以便正确写入input数据,从而消除性能。

在你的具体情况下,这个问题由两个因素加剧:

  • 没有写caching ,可用于将多个小写入合并为一个更大的全条带写入
  • 大的条带大小(512 KB) ,这意味着很less的写入(如果有的话)将足够大,以暗示全条纹写入(避免错误的读取 – 修改 – 写入情形)。

你能做些什么来缓解这个问题?

  • 添加电池并启用写入caching:顺序写入和一些随机写入也将立即更快(因为控制器可以将多个小的连续写入更大的写入)
  • 将条带大小减小到32/64 KB:对于较小的条带,写入的百分比可以是全带宽写入,并且避免读取 – 修改 – 写入操作。