当我在一个LV下有多个磁盘时,lvm的性能如何?

时间:2015-08-25 18:25:37

标签: io disk hard-drive raid lvm

我在一个VG下有三个磁盘和三个PV(基于三个磁盘),然后我在VG上创建了一个LV并将LV挂载到文件夹/ bigdisk。即将三个硬盘组合到一个文件夹/ bigdisk。我的问题是,当我向/ bigdisk写入数据时,数据是否会同时条带化为三个磁盘?即三个磁盘是否同时为输入操作提供服务以获得更好的I / O性能,就像r​​aid0一样?

3 个答案:

答案 0 :(得分:4)

默认情况下,lvcreate会创建一个不会跨越PV的条带化线性LV;它简单地将PV连接在一起。但是,您可以使用--stripes--stripesize选项在创建LV时配置条带化。来自man的{​​{1}}页:

  

lvcreate

     

给出条纹数量。这等于分散逻辑卷的物理卷数。

     

-i, --stripes Stripes

     

给出条带粒度的千字节数。对于LVM1格式的元数据,StripeSize必须为2 ^ n(n = 2到9)。对于LVM2格式的元数据,条带大小可能是2的较大幂,但不得超过物理范围大小。

-I, --stripesize StripeSize创建的VG的默认物理范围大小为4 MiB,因此在默认配置下,条带大小可以设置在4 KiB和4 MiB之间。

条带化由内核device mapper处理。您可以使用vgcreate检查低级配置。

答案 1 :(得分:0)

我测试了性能:我使用scp将一个大文件从其他服务器复制到lvm服务器。并使用iostat进行监控。我发现只有一个磁盘同时工作。所以答案是LVM不会剥离数据,而写/读操作是串行不并行的。

答案 2 :(得分:0)

我的贡献是,当LVM与两个快速SSD(每个读取速度超过500MiB / s)和4KiB到1MiB的条带大小一起使用时,为什么我认为速度发生了怪异的变化。

情况A:两个dd命令行并行运行,带有两个控制台,每个控制台从具有主板SATA(非共享)通道的不同SSD读取数据;结果就是速度等于SSD速度的总和。

情况B:在具有4KiB条带(类似于RAID0)的LVM中使用两个SSD,并运行dd命令行以从条带化逻辑卷读取数据;结果是速度比您从一个SSD上获得的速度还要低。。。真的很奇怪!但我认为它有一个解释。

情况C:在LVM中使用两个具有1MiB条带(类似于RAID0)的SSD,并运行dd命令行以从条带化逻辑卷读取数据;结果是速度比仅使用一个SSD快1.3倍……真是太奇怪了!但我认为它有一个解释。

案例D:使用两个旧的快速(100MiB / s)普通硬盘驱动器(磁性硬盘,刺钉硬盘)进行测试,LVM的条带化速度接近1.8到1.9倍

那么,为什么在使用SSD时LVM剥离如此缓慢?我将尝试解释我是否希望它与事件的时限发生。

我将在该时间表中使用传奇:

  • P =系统要求SSD向ram发送数据(又名读取命令顺序)
  • r = SSD正在将数据发送到RAM
  • _ =仅用于分隔事物
    • =同时从两个SSD发送到ram的数据

4KiB条带的时间轴(通过夸大效果使问题可见):

   SSD A: ppppppRR____ppppppRR_____ppppppRR_ ... and so on ...
   SSD B: ______ppppppRR____ppppppRR_        ... and so on ...
        : no simultaneos read occurs at all  ... and so on ...

因此,正如您所看到的,大多数情况下,两个SSD均不执行任何操作,因此根本不会进行并发读取。我夸大了发送到磁盘的请求时间与磁盘将数据发送到ram的时间之间的关系时间。

128KiB条带的时间轴(通过夸大效果使问题可见):

   SSD A: ppppppRRRRRRRRRRppppppRRRRRRRRRRppppppRRRRRRRRRR       ... and so on ...
   SSD B: ______ppppppRRRRRRRRRRppppppRRRRRRRRRRppppppRRRRRRRRRR ... and so on ...
        : ____________****____________****____________****______ ... and so on ...

如您所见,两个SSD都在部分时间同时向ram发送数据,但是同时读取是在短时间内进行的;这是因为发送到磁盘的请求时间与磁盘将数据发送到ram的时间之间的关系时间。

1MiB条带的时间表(效果被夸大以使问题可见):

   SSD A: pRRRRRRRRRRRRRRRRRRRRpRRRRRRRRRRRRRRRRRRRR  ... and so on ...
   SSD B: _pRRRRRRRRRRRRRRRRRRRRpRRRRRRRRRRRRRRRRRRRR ... and so on ...
        : __*******************__*******************_ ... and so on ...

如您所见,大多数情况下,两个SSD都同时向ram发送数据,因此同时读取需要很长时间。这是因为发送到磁盘的请求时间与磁盘将数据发送到ram的时间之间的关系时间。

我认为LVM可能是按顺序将请求依次发送到每个磁盘,循环检测(请求1到A,请求2到B,请求3到A,依此类推)。 / p>

如果请求时间占了将数据从SSD传输到RAM的总时间的很大一部分,也就是请求时间> =读取时间),则不会同时发送数据到ram,因此组合速度将比仅从中读取数据要低其中之一。

我认为LVM不会将条带列表发送到每个磁盘,我想LVM只会按顺序将条带发送到每个磁盘。

因此,如果LVM向SSD_A请求一些条带(不只是一对),然后向SSD_A请求一些条带(不仅仅一对),那么性能上的极大改进就可以让我们在4KiB条带的时间轴中看到(效果被夸大以使问题可见):

   SSD A: p1-4RRRRRRRRp1-4RRRRRRRRp1-4RRRRRRRRp1-4RRRRRRRR     ... and so on ...
   SSD B: ____p1-4RRRRRRRRp1-4RRRRRRRRp1-4RRRRRRRRp1-4RRRRRRRR ... and so on ...
        : ________****________****________****________****____ ... and so on ...

可以看出,通过发送由四个条带组成的请求,发送请求的时间是完全相同的,但是每次SSD读取到RAM的传输都将花费更长的时间,因此读取可以同时发生,请查看是否代替请求四个条纹将要求八个:

   SSD A: p1-8RRRRRRRRRRRRRRRRp1-8RRRRRRRRRRRRRRRR     ... and so on ...
   SSD B: ____p1-8RRRRRRRRRRRRRRRRp1-8RRRRRRRRRRRRRRRR ... and so on ...
        : ________************________************____ ... and so on ...

在大多数情况下,两个SSD都将同时向RAM发送数据。

我根本不是专家,我没有研究LVM的代码,我刚刚用两个SSD测试了dd命令,只是更改了条带大小,然后看到条带大小较小(4KiB),我得到了与仅单独使用一个固态硬盘相比,两个固态硬盘的读取速度较低。

希望这有助于改善LVM的一天,并帮助人们避免对LVM不改善快速SSD感到不满。

注意:快速SSD与> 500MiB / s的机密读取无关,它与它可以按顺序服务4KiB块的速度有多大关系,请求被一个接一个地发送(我给的速度> 35MiB / s,而大多数SSD会在4KiB时给出的速度接近1MiB / s,qeue深度为1。