LSI RAID:写入缓存策略是否影响读取性能?

LSI RAID:写入缓存策略是否影响读取性能?

我有一台服务器,配有 LSI MegaRAID SAS 9260-4i 控制器、RAID-5 和 3 个 2 TB 磁盘。我做了一些性能测试(使用 iozone3),数字清楚地表明写入缓存策略也会影响读取性能。如果我将策略设置为 WriteBack,与 WriteThrough 相比,我的读取性能大约是前者的 2 倍。写入缓存如何影响读取性能?

以下是设置的详细信息:

megacli -LDInfo -L0 -a0

Adapter 0 -- Virtual Drive Information:
Virtual Drive: 0 (Target Id: 0)
Name                :
RAID Level          : Primary-5, Secondary-0, RAID Level Qualifier-3
Size                : 3.637 TB
Is VD emulated      : Yes
Parity Size         : 1.818 TB
State               : Optimal
Strip Size          : 512 KB
Number Of Drives    : 3
Span Depth          : 1
Default Cache Policy: WriteThrough, ReadAhead, Direct, No Write Cache if Bad BBU
Current Cache Policy: WriteThrough, ReadAhead, Direct, No Write Cache if Bad BBU
Default Access Policy: Read/Write
Current Access Policy: Read/Write
Disk Cache Policy   : Disabled
Encryption Type     : None
Bad Blocks Exist: No
Is VD Cached: No

启用 WriteBack 后(其他所有内容保持不变):

Default Cache Policy: WriteBack, ReadAhead, Direct, Write Cache OK if Bad BBU
Current Cache Policy: WriteBack, ReadAhead, Direct, Write Cache OK if Bad BBU

来自 iozone3 的一些数据:

 WriteThrough:
                                                    random  random
      KB  reclen   write rewrite    read    reread    read   write
 2033120      64   91963   38146   144980   139122   11795   21564
 2033120     128   83039   90746   118660   118147   21193   33686
 2033120     256   78933   40359   113611   114327   31493   51838
 2033120     512   71133   39453   131113   143323   28712   60946
 2033120    1024   91233   76601   141257   142820   35869   45331
 2033120    2048   58507   48419   136078   135220   51200   54548
 2033120    4096   98426   70490   119342   134319   80883   57843
 2033120    8192   70302   63047   132495   144537  101882   57984
 2033120   16384   79594   29208   148972   135650  124207   79281

 WriteBack:
                                                    random  random
      KB  reclen   write rewrite    read    reread    read   write
 2033120      64  347208  302472   331824   302075   12923   31795
 2033120     128  354489  343420   292668   322294   24018   45813
 2033120     256  379546  343659   320315   302126   37747   71769
 2033120     512  381603  352871   280553   322664   33192  116522
 2033120    1024  374790  349123   289219   290284   43154  232669
 2033120    2048  364758  342957   297345   320794   73880  264555
 2033120    4096  368939  339926   303161   324334  128764  281280
 2033120    8192  374004  346851   303138   326100  186427  324315
 2033120   16384  379416  340577   284131   289762  254757  356530

有关该系统的一些细节:

  • Ubuntu 12.04
  • 64 位
  • 内核 3.2.0(3.2.0-58-通用)
  • 测试时内存限制为 1 GB
  • iozone3 版本 397-2
  • 用于测试的分区: /dev/sda4 /var ext4 rw,relatime,user_xattr,barrier=1,data=ordered 0 0

答案1

通过使用写回缓存,您可以节省磁盘 IOPS。控制器可以将较小的写入分批处理为一个较大的写入。

因此,有更多的 IOPS 可用于读取。

这假设测试是并发的。如果给定的测试只是读取或写入,则这无关紧要。

答案2

这次测试在什么文件系统上运行?

我想到的是 atime。如果您的文件系统使用 atime 选项挂载,或者缺少 no/relatime 挂载选项,则每次读取都会获得一次写入。

(atime表示记录文件最后访问时间)

如果您发布输出可能会有所帮助

mount

并指定您在哪个设备上进行测试。

答案3

回写政策在使用 iozone 等测试时会对红色性能产生影响,因为这些基准测试工具通过读取先前写入的数据来测量读取性能。因此,当 iozone 开始读取测试时,一些数据仍然位于缓存中,从而使读取吞吐量高得多。这与文件大小无关,因为 raid 适配器不了解文件,甚至不知道文件系统。它所知道的只有 IO 和块。请记住 iozonr 我有一个 fs 基准测试工具,而 thug 完全抽象了硬件。也许使用 -J/-Y 您可以减轻写回策略的影响并了解您的读取性能……或者使用真正的 HDD 基准测试工具(hdparm?)

答案4

很可能在文件被写入时它也被作为连续的块写入磁盘上。

先前的解决方案没有考虑到的一件事是控制器上处理回写命令和写通命令的方式之间的差异。

回写意味着当控制器收到命令时,它会立即告诉操作系统处理程序该命令“成功”,并给出下一个命令。直写等待每个单独的命令报告成功后再处理下一个查询。

因此命令排队速度更快。然后阵列的预读设置将开始用连续的数据流填充缓存。

如果您观察随机写入和随机读取事件之间的非常小的百分比差异,您会发现具有更快命令排队的预读有很大帮助,这些差异基本上消除了预读的提升,尤其是在较小的块大小时。

另一个可能影响性能的因素是每次读取或写入操作涉及多少个不同磁头的切片大小和块大小。

相关内容