AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 122678
Accepted
Lawrence D'Anna
Lawrence D'Anna
Asked: 2010-03-16 08:44:47 +0800 CST2010-03-16 08:44:47 +0800 CST 2010-03-16 08:44:47 +0800 CST

为什么从我的 lvm 镜像读取比从单个磁盘读取慢?

  • 772

我在 PV(sda3 和 sdb2)和 LV(工作)上使用 hdparm -t 进行测量。在 PV 上它实际上更快。

这真的只是 lvm 的方式,还是我做错了什么?

# lvs -a -o +devices
LV              VG     Attr   LSize   Origin Snap%  Move Log       Copy%  Convert Devices                          
root            foobar -wi-ao 165.00G                                             /dev/sda3(10752)                 
swap            foobar -wi-ao   2.00G                                             /dev/sda3(10240)                 
work            foobar mwi-ao 148.52G                    work_mlog 100.00         work_mimage_0(0),work_mimage_1(0)
[work_mimage_0] foobar iwi-ao 148.52G                                             /dev/sda3(52992)                 
[work_mimage_1] foobar iwi-ao 148.52G                                             /dev/sdb2(0)                     
[work_mlog]     foobar lwi-ao   4.00M                                             /dev/sdb1(0)                     
linux lvm
  • 3 3 个回答
  • 2817 Views

3 个回答

  • Voted
  1. Best Answer
    Jim Dennis
    2010-03-16T11:02:20+08:002010-03-16T11:02:20+08:00

    通过额外的虚拟块设备接口(在内核中)传递数据会有一点额外的开销。通常它在线路噪声的数量级上(不超过大约 3%)。

    如果您想提高多个驱动器的性能,那么您需要查看 md(元磁盘)驱动程序...RAID 1(镜像)或 RAID 10(镜像+条带化)。在这些情况下,您的系统可能能够同时从多个驱动器(主轴)交错读取和写入。(请注意,有些硬件配置不会从镜像中受益;例如,两个驱动器挂在一根普通的旧 IDE/PATA 电缆上;一个控制器/电缆是一个瓶颈)。

    影响整体驱动器性能的两个主要因素是寻道时间和吞吐量……将驱动器磁头定位到请求的数据上需要多长时间以及通过电缆传输数据的速度。在两个 I/O 通道上进行镜像明显提高了读取吞吐量(可能几乎是在任何给定时间间隔内传输的数据的两倍)。对寻道时间的影响是戏剧性的,而且概率更大……两个驱动器上的磁头可能位于各自盘片的不同部分上。读取请求可以来自任一驱动器,因此可以将请求路由到其磁头恰好更靠近所需区域的驱动器。(据我所知,这实际上只是通过 Linux 内核中的粗略启发式算法完成的……驱动程序不知道驱动器几何的详细信息,而只是将请求视为“线性块数组”表中的偏移量)。

    更重要的是,镜像 RAID 配置可以同时服务多个读取请求。

    请注意,RAID 镜像对写入没有任何好处。每次写入都必须在多个驱动器上完成......因此它通过集合中的每个 I/O 通道进行传输,并且您会遭受集合中最差的寻道时间(而不是在读)。

    请注意,可以在 Linux 中同时使用 LVM 和 md RAID 功能。通常,您将 md* 驱动程序用作较低的虚拟块层(将物理磁盘聚合到 RAID 集),然后在这些上使用 LVM(使您的每个顶级 md*(1、5 或 6)设备成为 LVM PV --- 物理卷)。在大多数情况下,我会说 RAID 0(条带化)对 LVM 毫无意义。(LVM 可以将多个驱动器聚合到更大的虚拟卷中,就像 RAID 0 所做的那样。但是它的灵活性要高得多)。

    • 6
  2. janneb
    2010-03-18T08:21:35+08:002010-03-18T08:21:35+08:00

    我在某些时候遇到的一个问题是,对于 LVM 卷,最大预读的默认值被设置为低得愚蠢的值。从那以后已经修复的 IIRC,但我想检查一下不会有什么坏处。例如

    blockdev --getra /dev/foo/bar

    查看设备的预读设置,--setra N 将其设置为 N 个扇区。而且您可能希望在底层设备或 LVM 卷上设置一个体面的预读,而不是两者。

    此外,对于“正确”的基准测试,使用 iozone、fio、bonnie++ 之类的东西来代替 hdparm。hdparm 直接访问驱动器,当您在 LVM LV 等虚拟设备上运行它时,我不确定它是否会做任何相关的事情。

    • 1
  3. Samuraiken
    2010-03-16T09:02:25+08:002010-03-16T09:02:25+08:00

    这可能有多种原因。我知道某些文件系统具有“写时复制”功能,包括 Ext3、ZFS、WAFL、VERITAS (NetBackup) 和 btrfs。然而,虽然 COW(写时复制)可能会减慢您的系统速度,但它不应该是容易引起注意的事情。

    此外,如果您启用了快照(使用您用于创建 LV 的任何控制器),这也会减慢它们的速度。

    根据卷中物理盘区的大小,它可能会减慢速度(例如,也许每个物理驱动器的总卷不同)。或者,构成 LVM 的单个物理磁盘之一可能出现问题。

    尝试对磁盘本身进行一些诊断,看看它们中是否有任何返回坏扇区/片。您是在自动增长这个逻辑卷,还是这是一个固定大小的卷?

    这很可能就是您的 LVM 镜像的设置方式。控制器或物理磁盘可能有问题。您还必须记住控制器上的速度,因为数据到达驱动器所需的路径通过控制器 - 使用较旧的控制器和较新的 HDD 不会加快速度(取决于较旧的控制器,我有一个古老的并且几乎总是优于一些较新的)。

    • 0

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve