我们有一台应用服务器,其中有 2 个 Fusion-IO SSD 放入一个卷组,形成一个卷。该卷内有 128 个文件,每个文件 40GB,可通过内存映射访问。
查看 iostat 时,我们发现工作负载在两个磁盘上的分布并不均匀。差异为 25%。
导致此问题的原因可能是什么?我该如何调查此问题?
>lsblk
NAME MAJ:MIN RM SIZE RO MOUNTPOINT
...
fioa 253:0 0 2.9T 0
└─instvg-instant (dm-17) 252:17 0 5.8T 0 /instant
fiob 253:16 0 2.9T 0
└─instvg-instant (dm-17) 252:17 0 5.8T 0 /instant
>iostat -xk -d fioa -d fiob
Linux 3.0.101-0.47.52-default (...) 08/10/2015 _x86_64_
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
fioa 0.00 0.00 1295.05 3116.02 65326.45 16359.80 37.04 0.29 0.07 0.01 3.82
fiob 0.00 0.00 1847.35 4090.05 88087.96 21608.44 36.95 0.42 0.02 0.01 5.98
答案1
我需要输出来lvs -o +devices,segtype
确认这一点,但我最好的猜测是,您只是将 LV 线性地分散到两个 PV 上。从负载平衡的角度来看,这是一个坏主意,因为文件系统往往会从头到尾填满,并且文件系统的前半部分在一个 PV 上,后半部分在另一个 PV 上。因此,在文件系统半满之前,几乎所有 I/O 都会转到第一个 PV。
要解决此问题,需要将 LV 创建为striped
卷,而不是linear
。这可以通过-i 2
传递给 来完成lvcreate
。将 LV 转换为条带是可能的,但前提是您有大量的空闲空间,而您似乎没有。这将交替将 LV 的块放到两个 PV 上,这样(例如)第一个 8KiB 数据将放在第一个 PV 上,下一个 8KiB 放在第二个 PV 上,下一个 8KiB 放在第一个 PV 上,依此类推。
话虽如此,你的 I/O 配置文件不是可怕失去平衡。您永远不会在两个 PV 上获得相同的 I/O,因为发送到 PV 的请求不会完全平衡。