Write Through和Write Back是阵列卡Cache的两种使用方式,也称为透写和回写。

Write Through也是RAID阵列卡的默认模式。
当选用write through方式时,系统的写磁盘操作并不利用阵列卡的Cache,而是直接与磁盘进行数据的交互。而write Back方式则利用阵列Cache作为系统与磁盘间的二传手,系统先将数据交给Cache,然后再由Cache将数据传给磁盘。

在采用这两种不同的Cache使用方式时,对于系统性能有何影响呢,接下来我们就以对比实验来揭开这一谜题。 测试分两种模式,一是在在安装阵列卡后,采用它的缺省设置,此时阵列卡Cache采用的是Write Through,而ACCESS并非是RW,而是READ。另一测试模式则ACCESS采用的是RW,阵列卡Cache采用的是Write Back。


在阵列卡的使用配置中,大家可能更多的会考虑使用哪种阵列方式,而忽略了对阵列卡其它一些设置项的关注,而正是这种疏忽常常会带来很大的性能差异,接下来我们就以cache写入方式为例,来揭示在进行阵列卡配置时不同的设置对于系统性能产生的影响。

  此次进行对比分析时我们所使用的服务器平台为一台IBM System X3550 M3,该服务器配有两个至强5630处理器,6条4GB DDR3 1333内存。磁盘为4块2.5英寸,容量为146GB,带16MB缓存的万转硬盘,它所使用的阵列卡是一块IBM ServeRAID M5015,该阵列卡的设计规格与LSI MegaRAID SAS 9260-8i完全相同。

  接下来我们就来介绍在对比分析时,磁盘阵列卡的设置过程 。在服务器系统启动时,首先进入到服务器BIOS界面下,并选择System Settings项。

阵列卡缓存模式- 透写(Write Through)和回写(Write Back)_阵列卡 Cache
系统BIOS界面

   接下来选择Adapter UEFI Drivers项。

阵列卡缓存模式- 透写(Write Through)和回写(Write Back)_阵列卡 Cache _02
System Settings界面

  选择LSI EFI SAS Driver磁盘阵列卡。

 阵列卡缓存模式- 透写(Write Through)和回写(Write Back)_阵列卡 Cache _03
Adapters UEFI Drivers界面

  进入到磁盘阵列卡的配置界面。  

阵列卡缓存模式- 透写(Write Through)和回写(Write Back)_阵列卡 Cache _04
磁盘阵列卡配置界面

    在下边的配置界面中可以看到,我们利用该阵列卡及4块硬盘组建了一个RAID 5阵列。

阵列卡缓存模式- 透写(Write Through)和回写(Write Back)_阵列卡 Cache _05
RAID选择和配置界面

  在这里我们主要关注的是Default Write选项,该选项有Write Through、Always Write Back以及Write Back with BBU三种选择,其中Write Back with BBU是阵列卡配有Battery Backup模块元时的可选项,它的作用是用以在系统断电时保护Cache中的数据,避免断电造成中间数据的丢失。

  另外就是Access选项,该项用于规定在读、写和读写时使用缓存。该阵列卡缺省设置为读,用户可根据实际应用需要来选择,不过通常为了平衡系统的读写性能,最常采用的是RW模式。

   阵列卡缓存模式- 透写(Write Through)和回写(Write Back)_阵列卡 Cache _06
阵列Cache模式设置   


  Write Through和Write Back是阵列卡Cache的两种使用方式,也称为透写和回写。当选用write through方式时,系统的写磁盘操作并不利用阵列卡的Cache,而是直接与磁盘进行数据的交互。而write Back方式则利用阵列Cache作为系统与磁盘间的二传手,系统先将数据交给Cache,然后再由Cache将数据传给磁盘。

  在采用这两种不同的Cache使用方式时,对于系统性能有何影响呢,接下来我们就以对比实验来揭开这一谜题。 测试分两种模式,一是在在安装阵列卡后,采用它的缺省设置,此时阵列卡Cache采用的是Write Through,而ACCESS并非是RW,而是READ。另一测试模式则ACCESS采用的是RW,阵列卡Cache采用的是Write Back。

阵列卡缓存模式- 透写(Write Through)和回写(Write Back)_阵列卡 Cache _07
读取IOps

 阵列卡缓存模式- 透写(Write Through)和回写(Write Back)_阵列卡 Cache _08
读取吞吐量 

阵列卡缓存模式- 透写(Write Through)和回写(Write Back)_阵列卡 Cache _09
写入IOps

 阵列卡缓存模式- 透写(Write Through)和回写(Write Back)_阵列卡 Cache _10
写入吞吐量 

  从以上4张测试对比图我们可以看到一个有趣现象,那就是在两种不同的工作模式下,缺省设置与在RW且Write Back配置下相比,前者的读取性能要远高于后者,而写入性能则刚好相反,可谓泾渭分明。

  导致这一现象的原因主要来自两个方面,一是Access选择的不同,缺省模式下采用的是read,这直接提升了该模式下系统的读取性能。然而在写入时,由于缺少了阵列卡Cache的支持,系统要写数据到磁盘时,会直接进行磁盘写入,而与系统的I/O能力相比,磁盘的读写速度要慢出很多,这直接致使系统写盘的下降。

阵列卡缓存模式- 透写(Write Through)和回写(Write Back)_阵列卡 Cache _11
Netbench测试结果对比 

  Netbench测试结果主要反映的是系统被用作文件服务器时,能够为用户访问提供的数据吞吐量。由于该项重点考查的是服务器的磁盘读取性能,因此该服务器在缺省模式下比另一模式下有2.5倍的性能优势也就不足为奇。

阵列卡缓存模式- 透写(Write Through)和回写(Write Back)_阵列卡 Cache _12
SQL2005测试结果对比

   在SQL2005测试中,我们看到两种不同模式在性能结果上基本相当,这是该项测试主要考察的是在数据库的查询、添加、删除、修改等操作时服务器的处理能力,该项测试中更为偏重于对数据库的查询,而实际的写盘操作要远少于读盘操作,这就使得缺省模式下系统超强的读取性能弥补了它写盘较慢的不足。结果使得测试成绩相差不多。

  通过以上几项测试大家不难发现,在阵列卡的设置中,不仅仅是RAID方式会影响到存储子系统的读写性能,阵列卡中一个小小的设置往往会带来应用性能的巨大差异。因此在阵列卡的使用中,对于如何设置大家还真应该重视。