为什么 DM 多路径设备的等待时间比底层设备的等待时间长?

pdp*_*pdp 20 performance iowait device-mapper

我们有一个基于 CentOS 6.4 的服务器连接到 Hitachi HNAS 3080 存储,并观察到内核以只读模式重新挂载文件系统:

5 月 16 日 07:31:03 GNS3-SRV-CMP-001 内核:[1259725.675814] EXT3-fs (dm-1):错误:以只读方式重新挂载文件系统

这发生在几次 I/O 错误并且据报道设备的所有路径都出现故障之后:

5 月 16 日 07:31:03 GNS3-SRV-CMP-001 多路径:mpatha:剩余活动路径:0

我一直在查看 sar 日志,可以看到很少有非常大的(2 秒)等待时间:

07:40:00       dev8-0     17.91    112.04     98.03     11.73      0.00      0.20      0.07      0.12
07:40:00      dev8-16      0.23      1.85      0.00      8.00      0.00      3.71      3.71      0.09
07:40:00      dev8-32     91.50   8338.76   5292.93    148.98      8.38     91.60      9.76     89.35
07:40:00     dev252-0     91.27   8336.91   5292.93    149.34     17.79    194.88      9.79     89.38
07:40:00     dev252-1    674.80   8168.16   5292.93     19.95   1473.53   2183.60      1.32     88.98
Run Code Online (Sandbox Code Playgroud)

07:30:00-07:40:00 之间的持续时间确实发生在文件系统以只读方式挂载的时间。然而,即使在正常情况下,一个重复的观察是底层设备的等待时间远低于多路径设备的等待时间。例如:

00:00:00          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
00:10:00       dev8-0     19.27    129.41     78.61     10.80      0.01      0.27      0.16      0.32
00:10:00      dev8-16      0.23      1.80      0.00      8.00      0.00      0.86      0.84      0.02
00:10:00      dev8-32     94.88  10285.16   3363.48    143.86      3.39     35.76      6.83     64.82
00:10:00     dev252-0     94.65  10283.34   3363.48    144.18      3.64     38.47      6.86     64.89
00:10:00     dev252-1    435.06  10087.12   3363.48     30.92    118.42    272.21      1.47     64.12
Run Code Online (Sandbox Code Playgroud)

dev8-0 恰好是本地磁盘,而 dev8-16 ( /dev/sdb) 和 dev8-32 ( /dev/sdc) 是dev252-0 ( ) 的底层磁盘/dev/mapper/mpatha。dev252-1 ( /dev/mapper/mpathap1) 是跨越整个多路径设备的单个分区。这里是输出multipath -ll

mpatha (2521501cbffffffffe96773b50ec30020) dm-0 BlueArc,NAS Platform
size=10T features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=enabled
| `- 9:0:0:0 sdc 8:32 active ready running
`-+- policy='round-robin 0' prio=1 status=active
  `- 8:0:0:0 sdb 8:16 active ready running
Run Code Online (Sandbox Code Playgroud)

为什么等待时间 for/dev/mapper/mpathap1/dev/mapper/mpathaor even /dev/sdbor高这么多/dev/sdc

小智 2

正如用户 the-wabbit 所建议的,正在进行请求合并。您可以在 avgrq-sz 列中看到平均请求大小 - 显示显着增加。

现在“等待”是在队列中花费的时间加上为这些请求提供服务所花费的时间。如果一个小请求(我们称之为“x”)与其他几个请求(y 和 z,在 x 之后发出)合并,那么 x 将

  • 在队列中等待与 y 合并
  • 在队列中等待 tu 与 z 合并
  • 等待 (x,y,z) 完成

这显然会对等待统计产生负面影响,主要是因为等待的计算方式,而实际上本身并不意味着存在问题。

现在让我们看一下 /dev/sdb (dev8-16)。您知道您没有使用那条路径吗?您的多路径配置中有两个优先级组,其中一个是

状态=已启用

状态=活动

你可能有

路径分组策略故障转移

在您的配置中(这是默认设置)。

如果您想防止两条路径都出现故障时出现 IO 错误,您可以尝试:

        特征“1queue_if_no_path”
在你的 multipath.conf 中

现在真正的问题仍然是,为什么两条路都会走下去?