西弗斯

西弗斯

在 DL380p gen8 服务器上,使用 LVM 上的 XFS 和 6 个磁盘的 raid 1+0,相同的工作负载导致 RHEL 6 上的磁盘写入量比 RHEL 5 上的磁盘写入量增加了十倍,从而导致应用程序无法使用。

请注意,我并不是想尽可能地优化 co6 系统,而是想了解为什么 co6 的行为如此不同,并解决这个问题。

vmstat/iostat

我们有一个 MySQL 复制设置,使用 mysql 5.5。使用 RHEL 6 作为操作系统的 gen8 服务器上的 Mysql 从属性能不佳,使用 vmstat 和 iostat 进行检查表明,这些服务器的页面输出活动是其他服务器的十倍,对磁盘子系统的写入量是其他服务器的十倍。blktrace 显示这些写入不是由 mysql 发起的,而是由内核发起的。

Centos 5:

[dkaarsemaker@co5 ~]$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   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-----
 r  b   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 的第 8 代服务器和使用 RHEL 5 或 6 的第 7 代服务器没有显示此问题。此外,使用 ext3 作为文件系统(而不是我们的默认 xfs)的 RHEL 6 没有显示此问题。问题似乎确实出在 XFS、第 8 代硬件和 centos 6 之间。RHEL 6 也显示此问题。

编辑 29/04:我们在 G8 机器上添加了 qlogic HBA。在光纤通道存储上使用 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。我们似乎无法更改此设置,无论是在 mkfs 中还是使用 noalign 挂载选项。我们也不知道这是否是原因。

大页面

其他在 rhel 6 上遇到 XFS 问题的人表示,禁用大页面(尤其是透明大页面)可能会有所帮助。我们禁用了两者,但问题并没有消失。

我们已经尝试并观察了很多方法,但以下方法均无济于事:

  • 使用 numactl 影响内存分配。我们注意到 g7 和 g8 具有不同的 numa 布局,没有看到任何影响
  • 较新的内核(最新到 3.6)似乎无法解决这个问题。使用 fedora 17 也没有解决这个问题。
  • iostat 并未报告写入事务增加了十倍,仅报告写入的字节数增加了十倍
  • 使用不同的 I/O 调度程序没有效果。
  • 安装相关文件系统 noatime/nobarrier/nopdiratime 没有帮助
  • 更改 /proc/sys/vm/dirty_ratio 没有效果
  • 这在基于 2640 和 2670 CPU 的系统上都会发生
  • hpsa-3.2.0 无法修复该问题

答案1

XFS 和 EL6 已经陷入了糟糕的状态...由于 Red Hat 内核中出现了一些上游功能/更改,我暂时放弃了 EL6 系统上的 XFS...

这是一个惊喜,并引起了一些恐慌:为什么我的 XFS 文件系统突然占用更多空间并且充满稀疏文件?

自 2012 年 11 月以来,较新内核中发布的 XFS 版本2.6.32-279.11.1.el6存在令人烦恼的负载和性能问题,这源于 Red HatBugzilla 860787从那时起,我的表现就变得难以预测,并且运行队列高于平均水平。

对于新系统,我使用 ZFS 或 ext4。对于旧系统,我将其冻结在2.6.32-279.11.1.el6

尝试使用以下命令回滚到该版本:

yum install kernel-2.6.32-279.11.1.el6.x86_64

除上述内容外,由于您使用的 RAID 控制器类型,典型的优化顺序如下:

挂载 XFS 文件系统noatime。您还应该利用调整框架和:

tuned-adm profile enterprise-storage

将 readahead、nobarrier 和 I/O elevator 设置为良好的基线。


编辑:

关于 XFS 文件系统优化的建议有很多。过去十年来,我一直只使用该文件系统,并且由于操作系统发生了根本性变化,因此不得不偶尔调整参数。我没有遇到过像您这样的性能急剧下降的情况,但我也不使用 LVM。

我想这是期望 EL5 的行为与 EL6 相同是不合理的,考虑到不同的内核生成、编译默认值、调度程序、包等。

什么会此时做什么?

  • 我会检查 mkfs.xfs 参数以及您如何构建系统。您是在安装期间使用 XFS 分区还是在安装后创建分区?我在主操作系统安装后创建 XFS 文件系统,因为我对给定的参数有更大的灵活性。

  • 我的mkfs.xfs创建参数很简单:mkfs.xfs -f -d agcount=32 -l size=128m,version=2 /dev/sdb1例如。

  • 我的安装选项是:noatime,logbufs=8,logbsize=256k,nobarrier我将允许XFS 动态预分配本地运行,不会像这里一样受到限制。有了它,我的表现有所提高。

  • 所以我不使用 LVM。特别是在硬件 RAID 之上...尤其在 HP Smart Array 控制器上,该设备本身具有一些类似 LVM 的功能。但是,使用 LVM,您无法访问fdisk原始分区创建。从 EL5 到 EL6 的一个变化是安装程序中的分区对齐以及对 fdisk 的更改,以在柱面边界上设置起始扇区。

  • 确保您在当前修订级别上运行 HP Smart Array 控制器和驱动器。此时,更新全部的服务器当前适用于 ProLiant 固件版本的 HP Service Pack。这是一张可启动 DVD,它将升级系统中检测到的所有组件。

  • 我会检查 RAID 控制器设置。将 的输出粘贴到 Pastebin 中hpacucli ctrl all show config detail这是我的。您希望缓存比率偏向于写入而不是读取。75:25 是常态。默认对于这个应用程序来说,256K 的大小应该足够了。

  • 我可能会尝试不使用 LVM 来进行此操作。

  • sysctl.conf你的参数是什么?

答案2

我们遇到了类似的问题,并发现这是由于 XFS 日志版本更改造成的。版本 2 日志遵循 mkfs.xfs 使用的条带宽度设置。如果您进行了大量 fsync,您的 RAID 卡将无法再伪造这些日志写入。您可以通过格式化分区而不设置任何 swidth 来测试它(与 RAID 1+0 没有任何区别)。您可以使用 blktrace/seekwatcher 进行验证,看看它是否涉及大量日志更新。

相关内容