在rax 1 + 0和6个磁盘之上的LVM之上使用XFS的DL380p gen8服务器上,与RHEL 5相比,相同的工作负载导致RHEL 6的磁盘写入增加了十倍,导致应用程序无法使用。
请注意,我并不是在尽可能多地优化co6系统,而是在了解co6为什么如此不同以及如何解决这个问题。
我们有一个MySQL复制设置,使用MySQL 5.5。 使用RHEL 6作为操作系统的gen8服务器上的Mysql从服务器执行得不好,使用vmstat和iostat进行检查显示,这些服务器执行了页面输出活动的十倍,以及写入磁盘子系统的十倍。 blktrace表明这些写操作不是由mysql启动的,而是由内核启动的。
Centos 5:
[dkaarsemaker@co5 ~]$ vmstat 1 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ rb swpd free buff cache si so bi bo in cs us sy id wa st 3 0 12 252668 102684 10816864 0 0 8 124 0 0 9 1 90 0 0 1 0 12 251580 102692 10817116 0 0 48 2495 3619 5268 6 1 93 0 0 3 0 12 252168 102692 10817848 0 0 32 2103 4323 5956 6 1 94 0 0 3 0 12 252260 102700 10818672 0 0 128 5212 5365 8142 10 1 89 0 0 [dkaarsemaker@co5 ~]$ iostat 1 Linux 2.6.18-308.el5 (bc290bprdb-01.lhr4.prod.booking.com) 02/28/2013 avg-cpu: %user %nice %system %iowait %steal %idle 8.74 0.00 0.81 0.25 0.00 90.21 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn cciss/c0d0 277.76 399.60 5952.53 2890574849 43058478233 cciss/c0d0p1 0.01 0.25 0.01 1802147 61862 cciss/c0d0p2 0.00 0.01 0.00 101334 32552 cciss/c0d0p3 277.75 399.34 5952.52 2888669185 43058383819 dm-0 32.50 15.00 256.41 108511602 1854809120 dm-1 270.24 322.97 5693.34 2336270565 41183532042 avg-cpu: %user %nice %system %iowait %steal %idle 7.49 0.00 0.79 0.08 0.00 91.64 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn cciss/c0d0 300.00 32.00 4026.00 32 4026 cciss/c0d0p1 0.00 0.00 0.00 0 0 cciss/c0d0p2 0.00 0.00 0.00 0 0 cciss/c0d0p3 300.00 32.00 4026.00 32 4026 dm-0 0.00 0.00 0.00 0 0 dm-1 300.00 32.00 4026.00 32 4026 avg-cpu: %user %nice %system %iowait %steal %idle 4.25 0.00 0.46 0.21 0.00 95.09 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn cciss/c0d0 507.00 160.00 10370.00 160 10370 cciss/c0d0p1 0.00 0.00 0.00 0 0 cciss/c0d0p2 0.00 0.00 0.00 0 0 cciss/c0d0p3 507.00 160.00 10370.00 160 10370 dm-0 0.00 0.00 0.00 0 0 dm-1 507.00 160.00 10370.00 160 10370 avg-cpu: %user %nice %system %iowait %steal %idle 5.33 0.00 0.50 0.08 0.00 94.09 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn cciss/c0d0 318.00 64.00 4559.00 64 4559 cciss/c0d0p1 0.00 0.00 0.00 0 0 cciss/c0d0p2 0.00 0.00 0.00 0 0 cciss/c0d0p3 319.00 64.00 4561.00 64 4561 dm-0 0.00 0.00 0.00 0 0 dm-1 319.00 64.00 4561.00 64 4561
在Centos 6上,页面输出和磁盘写入增加了十倍:
[root@co6 ~]# vmstat 1 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- rb swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 361044 52340 81965728 0 0 19 1804 36 110 1 1 98 0 0 0 0 0 358996 52340 81965808 0 0 272 57584 1211 3619 0 0 99 0 0 2 0 0 356176 52348 81966800 0 0 240 34128 2121 14017 1 0 98 0 0 0 1 0 351844 52364 81968848 0 0 1616 29128 3648 3985 1 1 97 1 0 0 0 0 353000 52364 81969296 0 0 480 44872 1441 3480 1 0 99 0 0 [root@co6 ~]# iostat 1 Linux 2.6.32-279.22.1.el6.x86_64 (bc291bprdb-01.lhr4.prod.booking.com) 02/28/2013 _x86_64_ (32 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 1.08 0.00 0.67 0.27 0.00 97.98 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 373.48 1203.02 115203.05 11343270 1086250748 dm-0 63.63 74.92 493.63 706418 4654464 dm-1 356.48 1126.72 114709.47 10623848 1081596740 avg-cpu: %user %nice %system %iowait %steal %idle 0.25 0.00 0.19 0.06 0.00 99.50 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 330.00 80.00 77976.00 80 77976 dm-0 0.00 0.00 0.00 0 0 dm-1 328.00 64.00 77456.00 64 77456 avg-cpu: %user %nice %system %iowait %steal %idle 0.38 0.00 0.19 0.63 0.00 98.81 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 570.00 1664.00 128120.00 1664 128120 dm-0 0.00 0.00 0.00 0 0 dm-1 570.00 1664.00 128120.00 1664 128120 avg-cpu: %user %nice %system %iowait %steal %idle 0.66 0.00 0.47 0.03 0.00 98.84 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 317.00 448.00 73048.00 448 73048 dm-0 34.00 0.00 272.00 0 272 dm-1 309.00 448.00 72776.00 448 72776
使用RHEL 5的Gen 8服务器和使用RHEL 5或6的Gen 7服务器不会显示此问题。 而且,使用ext3作为文件系统而不是默认的xfs的RHEL 6不会显示问题。 这个问题似乎在XFS,gen8硬件和centos 6之间。RHEL 6也显示了这个问题。
编辑29/04:我们添加了qlogic HBA的G8机器。 在光纤通道存储上使用XFS不会显示问题。 所以这绝对是xfs / hpsa / p420i之间交互的地方。
rhel 8中较新的xfs似乎能够检测到底层的条带宽度,但只能在使用hpsa驱动程序的p420i控制器上,而不能在使用cciss的p410i控制器上使用。
xfs_info输出:
[root@co6 ~]# xfs_info /mysql/bp/ meta-data=/dev/mapper/sysvm-mysqlVol isize=256 agcount=16, agsize=4915136 blks = sectsz=512 attr=2 data = bsize=4096 blocks=78642176, imaxpct=25 = sunit=64 swidth=192 blks naming =version 2 bsize=4096 ascii-ci=0 log =internal bsize=4096 blocks=38400, version=2 = sectsz=512 sunit=64 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
在上面标记为OK的所有设置中,sunit / swidth都是0。 我们似乎无法改变这个,不pipe是在mkfs还是使用noalign挂载选项。 我们也不知道这是否是原因。
其他人在Rhel 6上遇到XFS问题的时候说,禁用大页面,特别是透明的大页面可能是有益的。 我们两个都失灵了,问题没有消失。
我们已经尝试并观察了很多东西,以下都没有帮助:
XFS和EL6已经陷入了一个丑陋的状态…我暂时放弃了EL6系统上的XFS,这是因为有几个上游function/变化进入了Red Hat内核。
这是一个惊喜,并引起了一些恐慌: 为什么我的XFS文件系统突然消耗更多的空间和充满稀疏的文件?
自2012年11月以来,在2.6.32-279.11.1.el6以上版本的内核中运行的XFS版本具有恼人的负载和性能问题,这些问题源自Red Hat Bugzilla 860787 。 从那以后,我的performance难以预料,排队比平均水平高。
对于新的系统,我使用ZFS或者只是ext4。 对于较老的系统,我将它们冻结在2.6.32-279.11.1.el6 。
尝试回滚到该版本:
yum install kernel-2.6.32-279.11.1.el6.x86_64
除上述之外,由于您使用的RAID控制器types,典型的优化顺序是:
noatime安装您的XFS文件系统。 您还应该使用Tuned框架 :
tuned-adm profile enterprise-storage
设置readahead,nobarrier和I / O电梯到一个好的基线。
编辑:
有很多关于XFS文件系统优化的build议。 我在过去的十年里专门使用了这个文件系统,并且偶尔会调整参数,作为操作系统发生的根本性变化。 我没有经历像你这样戏剧性的性能下降,但是我也不使用LVM。
我认为期望EL5能够像EL6一样工作是不合理的 ,因为不同的内核代码,编译的默认值,调度程序,软件包等等。
我在这一点上会做什么?
我将检查mkfs.xfs参数以及如何构build系统。 在安装过程中使用XFS分区还是在事后创build分区? 我在主操作系统安装之后创buildXFS文件系统,因为我在给定的参数中有更多的灵活性。
我的mkfs.xfs创build参数很简单:例如mkfs.xfs -f -d agcount=32 -l size=128m,version=2 /dev/sdb1 。
我的挂载选项是: noatime,logbufs=8,logbsize=256k,nobarrier我会允许XFSdynamic预分配本地运行,而不是像你在这里限制它。 我的performance有所改善。
所以我不使用LVM 。 特别是在硬件RAID之上…… 尤其是在HP Smart Array控制器上,其中有一些设备本地的类似LVM的function。 但是,使用LVM,您无权访问fdisk以创build原始分区。 从EL5改变到EL6的一件事是安装程序中的分区alignment,并更改为fdisk以在圆柱体边界上设置起始扇区。
确保您在当前版本级别运行HP Smart Array控制器和驱动器。 此时,将整个服务器更新到最新的HP Service Pack for ProLiant固件版本是很有意义的。 这是一个可启动的DVD,可以升级系统中所有检测到的组件。
我会检查RAID控制器设置。 hpacucli ctrl all show config detail输出的hpacucli ctrl all show config detail 。 这是我的。 您希望caching比率偏向于写入与读取。 75:25是常态。 256K的默认条带大小应该适用于这个应用程序。
我可能会尝试没有LVM。
什么是你的sysctl.conf参数?
我们有类似的问题,并发现这是由于XFS日志版本的变化。 版本2日志符合与mkfs.xfs一起使用的条带宽度集。 如果你做了很多的fsync,你的RAID卡不能伪造这些日志写入了。 您可以通过格式化分区来testing它,而不使用任何宽度设置(与RAID 1 + 0没有任何区别)。 你可以使用blktrace / seekwatcher来validation它是否涉及大量的日志更新。