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

问题描述 投票:1回答:3

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

io disk hard-drive raid lvm
3个回答
4
投票

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

-i, --stripes Stripes

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

-I, --stripesize StripeSize

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

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

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


0
投票

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


0
投票

我的贡献,当LVM与两个快速SSD(每个读取速度超过500MiB / s)和4KiB到1MiB条带大小一起使用时,以及为什么我认为速度奇怪的松动正在发生。

案例A:两个dd命令行并行运行,有两个控制台,每个控制台从不同的SSD读取主板SATA(非共享)通道;结果是速度是SSD速度的总和。

案例B:在LVM中使用两个SSD,带有4KiB条带(类似于RAID0),dd命令行运行以从条带逻辑卷读取;结果是速度低于你从一个SSD获得的速度...真的很奇怪!但我认为它有一个解释。

情况C:在LVM中使用两个带有1MiB条带的SSD(类似于RAID0),并运行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发送数据的时间之间的关系时间。

128 KiB条纹的时间轴(夸大效果以使问题可见):

   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按顺序发送请求到每个磁盘,一个接一个,循环diks,(请求1到A,请求2到B,请求3到A,依此类推)。

如果请求时间占用了从SSD到RAM的数据总时间的很大一部分,也就是请求时间> =读取时间,则没有同步数据发送到ram,因此组合速度将低于仅从其中一个读取。

我认为LVM没有向每个磁盘发送条带列表,我认为LVM只是按顺序向每个磁盘发送一个条带。

因此,如果LVM要求SSD_A获取某些条纹(不仅仅是ony),那么性能的改进可能很大,然后要求SSD_A获取一些条纹(不仅仅是ony),让我们看一下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)我用两个SSD获得了更低的读取速度只使用其中一个。

希望这有一天能够改进LVM并帮助人们不要对LVM没有改进快速SSD感到生气。

注意:快速SSD与secuential读取无关>> 500MiB / s,它与按顺序为4KiB块服务的速度有关,逐个发送请求(我的给出> 35MiB / s,而大多数SSD只会给在4KiB的1MiB / s,qeue深度为1)。

© www.soinside.com 2019 - 2024. All rights reserved.