在 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 进行验证,看看它是否涉及大量日志更新。