LVM 会影响性能吗?

LVM 会影响性能吗?

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

使用lvm有性能损失吗?如果是这样,我该如何测量?

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

答案1

LVM 的设计方式使其不会真正造成太大干扰。从用户空间的角度来看,它看起来像是磁盘顶部的另一层“虚拟东西”,并且很自然地可以想象所有的 I/O 现在必须通过它才能到达或来自真实的 I/O硬件。

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

当使用 LVM 时,该查找会发生变化,但仅此而已。 (因为无论如何它都必须发生,所以稍微改变一下对性能的影响可以忽略不计。)当实际写入文件时,这些位将像其他情况一样直接采用物理介质的路径。

在某些情况下,LVM 可能会导致性能问题。您需要确保 LVM 块与底层系统正确对齐,这在现代发行版中应该会自动发生。并确保您没有使用存在以下错误的旧内核这个。哦,使用 LVM 快照会降低性能(对于每个活动快照,性能会越来越差)。但大多数情况下,影响应该很小。

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

答案2

LVM 就像其他事物一样,有好有坏。

就性能而言,LVM 会稍微阻碍您,因为它是另一层抽象,必须在位命中(或可以从磁盘读取)之前解决。在大多数情况下,这种性能影响实际上是无法衡量的。

LVM 的优点包括您可以向现有文件系统添加更多存储,而无需移动数据。大多数人喜欢它就是因为这个优点。

以这种方式使用 LVM 的一个缺点是,如果您的额外存储跨磁盘(即涉及多个磁盘),则会增加磁盘故障导致数据丢失的可能性。如果您的文件系统跨越两个磁盘,并且其中任何一个发生故障,您可能会迷路。对于大多数人来说,由于空间与成本的原因,这是一个可以接受的风险(即,如果这真的很重要,就会有预算来正确地做到这一点)——而且,正如他们所说,备份很好,对吧?

对我来说,不使用 LVM 的唯一原因是灾难恢复没有(或者至少没有)明确定义。带有 LVM 卷且操作系统混乱的磁盘无法轻松连接到另一台计算机并从中恢复数据;许多恢复 LVM 卷的说明似乎包括以下步骤回到过去并运行 vgcfgbackup,然后将生成的 /etc/lvmconf 文件复制到托管您的软管卷的系统。希望自从我上次不得不查看这个问题以来的三四年里事情已经发生了变化,但就我个人而言,我从来没有因为这个原因而使用 LVM。

就是这样说的。

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

如果虚拟机对您有任何重要性,您将以某种方式对主机系统进行 RAID,这将降低以后增加存储的灵活性。因此 LVM 的灵活性可能不需要。

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

答案3

一般来说:如果添加新的复杂性层(“又名更多要做的事情”),那么速度不会更快。注意:您只能添加工作,而不能“更改”工作的完成方式。

你如何测量一些东西?好吧,您创建一个带 LVM 的分区和一个不带 LVM 的分区,然后使用正常的基准测试并运行它。就像人们在

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

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

“使用 LVM 的 ext4 比不使用 LVM 的速度更快,以及其他文件系统基准测试”Linux 内核邮件列表线程

但是,您只需自行对其进行基准测试,看看您想要使用的硬件和操作系统的行为是否相同,以及您是否可以忽略为您提供弹性存储的额外复杂层的(可能轻微的)影响。

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

答案4

没有人提到lvm2可以使读写速度成倍增加(类似于raid0)。我个人使用3个相同的磁盘,在它们上面使用lvm2,处于剥离模式,读写操作花费了1/3的时间,因此影响很大,文件系统比它快三倍。我知道:任何磁盘发生故障,其上的所有数据都将无法访问;但这并不意味着任何丢失,因为备份是必须的,像 Raid、LVM2、ZFS 这样的东西都不会避免备份;所以我从不使用镜像、raid5 等,我总是使用剥离(以获得最佳性能)并同步备份。 ZFS 非常适合即时压缩,并且副本参数大于 1 就像镜像一样,但是 ZFS 拥有而其他人没有的一件事是即时自动恢复位腐烂(在运行时自发更改的位)磁盘已关闭),但 ZFS i 带来了非常大的影响(计算校验和,验证它们)和一个重大问题(添加更多物理磁盘)。

恢复:我仅将 ZFS 用于外部磁盘上的备份,多个(两个或三个)SSD,并为操作系统进行 lvm2 条带化(升级后,我重做操作系统的克隆),我倾向于使用不可变操作系统;我使用多个(六个)spinnin 磁盘,其中 lvm2 被剥离数据,例如虚拟机,发生任何更改后我都会重做备份;因此,在任何磁盘发生故障后,我只需要更换它并恢复最后的备份;现在,我的写入速度接近 1.8GiB/s,因此从备份恢复一台虚拟机只需不到 30 秒(每个虚拟机磁盘 32GiB)。

所以我的答案是:不要只使用一种东西,要聪明并充分利用每个部分,lvm2 stripped 比 mdraid level 0 更快,当使用六个旋转磁盘时速度更快;剥离 SSD 时的一个警告,两个和三个是好的,四个 SSD 会降低性能(当我在剥离模式下使用四个相同的 SSD 时,我的测试给出较低的写入速度,无论是 lvm、mdraid0 等),似乎 SSD TRIM 等写入放大可能是向剥离卷添加更多 SSD 导致写入速度降低的主要原因。

使用 SSD 和任何 raid0(剥离卷)进行警告,完美对齐事物,正确分配文件系统上的簇大小、stip 大小等,这样就不会导致降级;作为示例:磁盘扇区为 2048,因此任何读/写最小为 2K,切勿使用使用 512 字节的文件系统,除此之外,最好使用 2K 或 4K 簇大小;现在假设您使用 3xHDD,每个 2K 扇区,因此在任何读/写优化文件系统簇将是 3x2K=6K,但这在许多文件系统上是不可能的,然后想想如果使用 64K 簇大小,64K/6K=32 会怎样/3,这会导致不平衡,因此不是最佳的,等等。进行数学计算以获得最佳簇大小。

我最好的结果是:簇大小=条带大小*条带上的磁盘数量;这样,每次读/写的大小都可以使所有磁盘正常工作,因此速度的提高非常大。 3 个磁盘的 192K 簇大小和 64K 条带大小的示例;另一个示例是 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)可能会给出错误的结论。

只是一个示例:我在 Sata II 端口主板上使用 2x60MiB/s 2.5 英寸 5400rpm Sata 磁盘测试我的 Linux 启动时间,然后使用 2xSSD Sata III 进行测试(如果连接到 Sata III,它们每个可以写入超过 250MiB/s)端口),启动时间只少了两秒,五分钟启动只需两秒,为什么?因为大多数启动时磁盘都没有被使用,所以它在 ram 和 cpu 上执行操作,而不是在 I/O 上执行操作。

始终测试您将要做的实际事情,而不仅仅是粗略速度(换句话说,最大速度)。

最大速度是好的,知道一点不能代表,你可能不会在 100% 的时间以最大速度使用磁盘,操作系统和应用程序必须在没有 I/O 的情况下在 ram 和 cpu 上执行操作,所以此时磁盘速度并不根本不重要。

所有人都说 SSD 大大提高了 Windows 启动速度,在我的测试中这也是错误的,它只证明了 28 秒,启动时间接近八分钟。

因此,如果您确实像我一样:Linux 在启动时复制到 RAM,SSD 不会比旋转 HDD 更好,我还测试了 USB 3.1 Gen2 棒(139MiB/s 读取),启动时间仅受到几秒钟的影响五分钟开机,为什么?简单,读取是在复制到 RAM 时完成的,之后螺栓的其余部分不再使用磁盘/SSD/USB 棒,数据位于 RAM 上,就像 RAM 驱动器一样。

现在我正在卖掉我拥有的所有 SSD,它们并没有改进 Linux 在启动时的 RAM 复制,但对它们进行基准测试表明它们快了 5 倍...看,基准测试给出了错误的结论...是的,测试并测试真实的日工。

希望这能让事情变得清楚......具有不良集群和条带大小的 LVM 的影响远远大于层的开销。

相关内容