xfs 格式的逻辑卷中磁盘使用率不均匀

xfs 格式的逻辑卷中磁盘使用率不均匀

我们有一个具有 66TB 可用空间的备份服务器,设置如下:

12 个 6TB RAID10 阵列 -> 12 个 PV -> 1 个 VG -> 1 个 LV -> xfs

此文件系统专门用于备份(通过 BackupPC)。它接收相当多的 I/O,但绝对不会多到硬件无法处理。但是,我们经历了许多失败的备份,我最近注意到,即使在挂载上写入一个 10 行的文件也需要 20 多秒。运行 iostat 可以显示原因:

[root@lolno BackupPC]# iostat 
Linux 2.6.18-194.17.1.el5 (lolno)      06/27/2012

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          19.93    0.00    9.53   31.95    0.00   38.59

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               5.34       115.29        43.07  874600222  326773590
sda1              0.00         0.00         0.00       3586        126
sda2              5.34       115.29        43.07  874594516  326773464
sdb             207.33      3544.02      1594.70 26886233184 12097955904
sdc              11.39       844.42      1033.16 6406058328 7837945704
sdd              11.20       622.92       481.77 4725691832 3654875728
sde              15.84      1812.99      1661.13 13754015304 12601927592
sdf              14.86      1483.24       888.80 11252361120 6742733600
sdg              11.67      1020.94       746.05 7745220408 5659828008
sdh              22.60      1127.12      1424.24 8550776952 10804834600
sdi              12.66      1176.71      1043.97 8926929272 7919898000
sdj              13.50      1140.80       912.27 8654489384 6920787296
sdk              13.14      1314.36      1041.48 9971220872 7901060992
sdl              11.16       674.53       366.49 5117257008 2780306920
sdm              10.82       829.36       604.99 6291851320 4589685592
dm-0              2.82        24.81         9.80  188208594   74373432
dm-1              0.00         0.00         0.00        680          0
dm-2              2.52        50.08         5.81  379928338   44067760
dm-3              8.48        40.40        27.46  306454472  208332272
dm-4            364.33     15591.41     11799.05 118282051176 89511839936

如您所见,I/O 并未均匀分布在磁盘/PV 之间,而是绝大部分都集中在单个磁盘上。这是什么原因造成的?

有关该系统的更多信息:

它运行的是 CentOS 5.5,内核为 2.6.18-194.17.1.el5

[root@lolno BackupPC]# xfs_info /data 
meta-data=/dev/mapper/backup_vg1-BackupLV isize=256    agcount=66, agsize=268435455 blks 
         =                       sectsz=4096  attr=0 
data     =                       bsize=4096   blocks=17581608960, imaxpct=25 
         =                       sunit=0      swidth=0 blks, unwritten=1 
naming   =version 2              bsize=4096   
log      =internal               bsize=4096   blocks=32768, version=2 
         =                       sectsz=4096  sunit=1 blks, lazy-count=0 
realtime =none                   extsz=4096   blocks=0, rtextents=0 


[root@lolno BackupPC]# lvdisplay -v /dev/backup_vg1/BackupLV
        Using logical volume(s) on command line
    --- Logical volume ---
    LV Name                /dev/backup_vg1/BackupLV
    VG Name                backup_vg1
    LV UUID                L8i09U-lVxh-1ETM-mNRQ-j3es-uCSI-M1xz45
    LV Write Access        read/write
    LV Status              available
    # open                 1
    LV Size                65.50 TB
    Current LE             17169540
    Segments               12
    Allocation             inherit
    Read ahead sectors     auto
    - currently set to     256
    Block device           253:4

我的第一个想法是,这与 xfs 中缺少条带化有关,但根据http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/xfsmain.html#xfscreating

“在 lvm 或 md 卷上创建文件系统时,mkfs.xfs 会选择最佳几何形状。”

那么是不是这件事情没有发生呢,还是有其他事情发生呢?

答案1

agcount=66您可以看到,您有 66 个分配组(因此有 66 个潜在 IO 线程),但只有 12 个物理块设备。

XFS 将尝试将每个新目录放入不同的 AG,因此如果您对同一个目录执行大量 IO,则可能会对存储在一个块设备上的一个 AG 执行单线程 IO。

即使您对不同的 AG 执行 IO,这 66 个 AG 中的几个也位于同一个块设备上,这也是可行的。66/12=5.5,因此您最多可以有 5 个 IO 线程将 5 个 AG 的数据写入一个底层块设备。

从中sunit=0 swidth=0您可以看到文件系统根本不知道底层的 RAID 阵列。

我认为你的文件系统制作不正确。mkfs.xfs其实并不是那么聪明。

阅读 XFS 文档,了解文件系统的结构以及现有数据最终如何分布在这些结构中。这是一个出奇容易理解的文件系统。

在这里您处于一个很有利的位置,因为您实际上有数据可供查看,而不是使用应用程序开发人员提供的一些会随着时间而改变的虚构规范。

重新制作文件系统,以更好地适应您的数据、块设备和 RAID 布局。特别是“如何计算正确的 sunit,swidth 值以获得最佳性能”常见问题解答中的问题将对您有用,但这绝对不是您唯一需要关注的事情:

相关内容