LVM是否会影响性能?


86

我必须将一些服务器迁移到Linux,我需要评估的一个重要方面是我的新主机系统必须具有弹性的存储容量。自然,做一些基础研究后,我遇到了LVM。

使用lvm是否会有性能损失?如果是这样,我该如何衡量?

我现在正在考虑的是将Linux作为带有LVM的主机操作系统,并在其之上运行虚拟化Linux盒(我是否也应该在来宾OS上添加LVM?)。

Answers:


102

LVM的设计可以使它避免真正陷入困境。从用户空间的角度来看,它看起来像磁盘顶部的另一层“虚拟内容”,并且可以自然地想象所有I / O现在都必须经过此过程,然后才能到达或离开真实区域。硬件。

但这不是那样。内核已经需要有一个映射(或实际上是多层的映射),该映射将高级操作(例如“将其写入文件”)连接到设备驱动程序,而设备驱动程序又连接到磁盘上的实际块。

使用LVM时,该查找已更改,仅此而已。(由于无论如何都必须发生,因此对性能的影响可以忽略不计。)当涉及到实际写入文件时,这些位将直接指向物理介质,就像否则。

在某些情况下,LVM可能会导致性能问题。您要确保LVM块与基础系统正确对齐,这在现代发行版中会自动发生。并且确保您不会使用受类似这样的 bug的旧内核。哦,使用LVM快照会降低性能(并且随着每个活动快照的增加,性能也会越来越差)。但大多数情况下,影响应该很小。

至于最后一个:如何测试?标准的磁盘基准测试工具是bonnie ++。用LVM制作一个分区,进行测试,将其擦除,然后(在同一位置,以保持其他因素相同)再次创建一个普通的文件系统并进行基准测试。它们应该接近相同。


17

LVM和其他所有事物一样,是好运。

在性能方面,LVM会稍有碍事,因为这是在位撞击磁盘(或可以从磁盘读取)之前必须进行的另一层抽象。在大多数情况下,这种性能下降几乎是无法衡量的。

LVM的优点包括以下事实:您可以向现有文件系统添加更多存储,而不必四处移动数据。大多数人都喜欢这样做。

以这种方式使用LVM的一个缺点是,如果您的额外存储跨磁盘(即涉及多个磁盘),则会增加磁盘故障将使您的数据消耗的可能性。如果您的文件系统跨越两个磁盘,但其中两个出现故障,则可能会丢失。对于大多数人来说,由于空间与成本的关系,这是可以接受的风险(即,如果这真的很重要,那么将有预算正确地做到这一点),而且正如他们所说,备份好的,对吗?

对我来说,不使用LVM的唯一原因是灾难恢复的定义不明确(至少没有)。无法将具有LVM卷且其上具有加扰的OS的磁盘简单地连接到另一台计算机,并从该计算机恢复数据。恢复LVM卷的许多说明似乎都包含诸如回溯并运行vgcfgbackup,然后将生成的/ etc / lvmconf文件复制到托管软管卷的系统之类的步骤。希望自从我上次不得不看这三到四年后,情况发生了变化,但是出于这个原因,我个人从不使用LVM。

那就是。

在您的情况下,我认为与主机系统相比,虚拟机将相对较小。对我来说,这意味着您以后更可能希望在VM中扩展存储;最好的做法是将另一个虚拟磁盘添加到VM,然后扩展受影响的VM文件系统。您没有跨多个磁盘漏洞,因为虚拟磁盘很可能位于主机系统上的同一物理设备上。

如果虚拟机对您完全不重要,那么您将以某种方式对主机系统进行RAID,这将降低以后扩展存储的灵活性。因此,可能不需要LVM的灵活性。

因此,我假设您不会在主机系统上使用LVM,但会安装VM以使用LVM。


6
@DM-您似乎已经略过提及LVM2物理卷可能是任何块设备,包括md-RAID。IE:pvcreate / dev / md0不管底层RAID类型/ dev / md0是什么。因此,如果您的/ dev / md0恰好是镜像物理磁盘的RAID阵列...丢失单个物理驱动器会影响您的LVM2组,这有点困难。另外:创建RAID阵列时,可以将LVM2逻辑卷用作介质端。两者均在设备映射器级别操作,均为设备输入/设备输出层。

1
您的恢复问题过多,在具有合理最新Linux发行版的计算机之间移动lvm阵列(例如,debian oldstable已经足够新)很简单
hildred 2014年

@ user13719:是的,您可以LVM任何块设备,但是实际上人们不这样做。他们最终只有一个LVM驱动器。然后,他们添加另一个驱动器,并使用LVM将现有文件系统扩展到新磁盘上。此时,任何一个磁盘的故障都将杀死LVM。
大卫·麦金托什

@hildred,上面是我所指的-我不知道有任何工具可以从跨越多个磁盘(块设备)且缺少一个磁盘的LVM中恢复数据。
David Mackintosh 2014年

2
这就像在说刀子不好,因为您可能在玩弄刀子时割伤自己……不这样做怎么办?使用它们来执行更适合的任务,例如切割蔬菜。
Chinoto Vokro '16

3

一般而言:如果添加新的复杂性层(“又要做更多事”),没有什么会更快。注意:您只能添加工作,而不能“更改”工作完成的方式。

您如何测量?好吧,您创建一个带有LVM的分区,一个没有LVM的分区,然后使用常规基准测试并运行它。就像在

http://www.umiacs.umd.edu/~toaster/lvm-testing/

看起来,对速度的影响很小。这似乎与运行基准测试的其他人的发现同步:

“使用LVM时,ext4比没有使用其他文件系统基准时要快”,Linux内核邮件列表线程

但是,仅靠自己进行基准测试,看看您要使用的硬件和操作系统是否表现相同,以及是否可以忽略额外一层复杂性(为您提供弹性存储)的影响(可能会略有影响)。

您是否应该将LVM添加到来宾操作系统:这取决于您是否还需要来宾操作系统具有弹性存储,不是吗?您的需求决定了您必须部署什么。


@akria,哎呀,它已被移走
hildred 2014年

您当然可以更改工作方式。例如,我可以通过GPS坐标,街道名称或本地地标为您提供前往某个位置的路线。不同的方式,但是您仍然必须走同样的路。查看纸质地图所需的时间与遵循手机说明的时间可能略有不同,但是与步行时间相比,最终可以忽略不计。
mattdm 2015年

我已经说过,对于lvm来说,增加工作的影响并没有真正的影响。我想知道,您的意思是什么?
akira 2015年

我要说的是“ 注意:您只添加工作,而不是“更改”工作方式 ”,这不是事实。
mattdm

@mattdm:很明显,如果您改变工作的完成方式(例如,另一种算法,另一种fs等),那么您将获得不同的结果。lvm不会改变fs的工作方式。你懂的。这就是为什么我想知道您的意思到底是什么?“增加一层”指的是“增加”,而不是“也改变另一件事”。你也知道
akira

0

是否也应该在来宾操作系统上添加LVM?

您不应该这样做,因为在主机逻辑卷中拥有ext3或ext 4文件系统就足够了。无需在其中添加另一个卷组以及物理卷和逻辑卷。


0

仅lvm不会对性能造成太大影响,但是如果您愿意接受它,请改用zfs。您将获得卷管理和可恢复性以及各种其他出色的功能。


ZFS的一个问题是,它不能很好地处理不同速度和大小的物理卷。
加百利博览会

1
还没有处理... 如果您适当地组织它们,它也可以。我看不出lvm怎么做得更好。
stu

0

没有人提及lvm2可以使读写速度成倍增长(类似于raid0)。我个人使用了3个相同的磁盘,在剥离模式下对它们使用了lvm2,读写操作花费了1/3的时间,这是一个很大的影响,文件系统的处理速度要快3倍。我知道:任何磁盘发生故障,并且磁盘上的所有数据均无法访问;但是这并不意味着有任何损失,因为必须要有备份,所以Raid,LVM2,ZFS之类的东西都不会避免拥有备份。所以我从不使用镜像,raid5之类的方法,而我一直使用剥离(以获得最高性能)并同步了BackUP。ZFS非常适合进行即时压缩,并且复制参数大于一个时就像镜像,但是ZFS拥有而没有其他人拥有的一件事就是自动恢复动态的位腐烂(磁盘已关闭电源),

恢复:我仅将ZFS用于外部磁盘上的BackUp,将多个(两个或三个)ssd和lvm2带区分开用于OS(Aftwr升级,重做OS的克隆),我倾向于使用不可变的OS;我使用了多个(六个)带有虚拟机剥离的lvm2的旋转磁盘(例如虚拟机),再次进行任何更改后都重做了备份;因此,在任何磁盘出现故障后,我只需要更换它并恢复上一次备份;现在,我的写入速度已经接近1.8GiB / s,因此从BackUP还原一个虚拟机仅需不到30秒(每个虚拟机磁盘32GiB)。

因此,我的答案是:不要只使用一件事,要聪明,要充分利用每个部分,剥离的lvm2比mdraid级别0快,在使用六个旋转磁盘时,速度更快。一条警告ssd剥离,两个和三个好,四个ssd会降低性能(我在剥离模式下使用四个相同的ssd时,无论lvm,mdraid0等,我的测试都降低了写入速度),似乎SSD TRIM等写入放大可能是向剥离后的卷中添加更多ssd导致写入速度降低的主要原因。

使用ssd和任何raid0(剥离的卷)进行警告,可以完美地对齐事物,在文件系统上正确分配群集大小,提示大小等,因此没有人会导致性能下降;作为示例:磁盘扇区为2048,因此任何读/写操作的最小卷数为2K,请不要使用使用512字节clusyer的文件系统,最好使用2K或4K群集大小;现在,假设您使用3xHDD(每个2K扇区),那么在任何读/写最佳文件系统群集上,其大小将为3x2K = 6K,但是在许多文件系统上是不可能的,那么请考虑如果使用64K群集大小(64K / 6K = 32)怎么办/ 3,这会导致不平衡,因此不是最佳选择,依此类推。进行数学运算以获得最佳群集大小。

我最好的结果是:群集大小= stripsize *条带上的磁盘数;这样,每次读/写操作的大小都会精确到使所有磁盘都能工作的程度,因此速度的提高非常明显。例如,三个带64K条带大小的磁盘的192K群集大小示例;另一个示例是6个磁盘的192K群集大小和32K条带大小。

而且始终记住要以4K,8K,16K,32K,64K块测试单个磁盘。许多磁盘使用较低的数字(例如4K)时速度确实很差,但是使用64K,128K或更高速度时,则速度快十倍以上。

是的,使用较大的群集大小会浪费每个文件的las群集的空间(如果您使用数百万个每个文件只有1个字节的文件),则最好在文件系统上使用压缩/打包即时系统,作为示例,具有4K群集大小的4TiB磁盘只能包含少于4TiB / 4K = 1073741824个文件,每个文件1Byte,如果所有文件均为1Byte大小(群集大小4K),则群集大小最差的比率就是1GiB,但是如果文件很大,就像虚拟机(作为示例接近32GiB或只有几兆字节)一样,丢失的文件仅在最后一个群集上;如此之大的文件,较大的群集大小对于性能而言要好得多,但请注意虚拟机如何使用它。

没有人会告诉您这个秘密:来宾内部不使用4K群集大小,请使用与虚拟磁盘所驻留的群集大小相同的群集大小,或者使用倍数。

是的,我非常想在来宾磁盘中获得最高速度,正如我说的那样,使用6个旋转磁盘时,我的速度接近1.7GiB / s,SATA III总线速度是瓶颈,而不是磁盘本身。我使用高端(非便宜)磁盘,128MiB高速缓存,每个磁盘的写入速度为283MiB / s。

对于您和所有人:最好在进行任何速度测试之前了解集群大小,条带大小和块大小之间的关系,否则测试LVM2或任何其他RAID(也包括ZFS)可以得出FALSE结论。

只是这样的一个示例:我在Sata II端口主板上用2x60MiB / s 2.5英寸5400rpm Sata磁盘测试我的linux启动时间,然后用2xSSD Sata III测试(如果连接到Sata III,它们每个可以写超过250MiB / s的速度)端口),启动时间仅减少两秒钟,而五分钟的启动仅需两秒钟,为什么?因为没有使用大多数启动时磁盘,所以它是在ram和cpu上运行的,而不是在i / o上运行的。

始终测试您将要执行的实时操作,而不仅仅是粗略的速度(换句话说,最大速度)。

最好知道最大速度,这是无法代表的,您可能无法在100%的时间中以最大速度使用磁盘,OS和APP必须在ram和cpu上执行某些操作而没有I / O,因此这时磁盘速度不会很重要。

所有人都说SSD提高了Windows的启动速度,在我的测试中也是FALSE,只有我证明了在接近8分钟的启动时间上只有28秒。

因此,如果您喜欢我:引导时使用Linux复制到RAM,SSD不会比旋转的HDD更好,我还测试了USB 3.1 Gen2记忆棒(读取速度为139MiB / s),引导时间只有几秒钟。五分钟启动,为什么?很容易,在复制到ram时完成读取,而不是在其余的螺栓上再次使用disk / ssd / usb-stick,数据在ram上,就像ram驱动器一样。

现在我要卖掉我拥有的所有SSD,它们无法在启动时改进Linux-on-ram的复制,但是对它们进行基准测试则表明它们的运行速度提高了5倍...看,基准测试得出的结论是错误的...是的,测试并测试真实日工。

希望这可以解决男性问题...具有错误的群集和条带大小的LVM的影响远不止于层的开销。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.