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 / 问题 / 418352
Accepted
Adam C
Adam C
Asked: 2012-08-17 11:07:48 +0800 CST2012-08-17 11:07:48 +0800 CST 2012-08-17 11:07:48 +0800 CST

LVM、Device-Mapper、Software Raid 和 Block Devices 的预读设置 - 哪个赢了?

  • 772

我一直试图就此找到一个直接的答案,但事实证明这是难以捉摸的。This question and its answer is close,但并没有真正给我我想要的细节。让我们从我认为我知道的开始。

如果你有一个标准的块设备并且你运行sudo blockdev --report你会得到这样的东西:

RO    RA   SSZ   BSZ   StartSec            Size   Device
rw   256   512  4096          0    500107862016   /dev/sda
rw   256   512  4096       2048    399999238144   /dev/sda1
rw   256   512  1024  781252606            1024   /dev/sda2

现在,您决定将--setra任何分区上使用的默认值 256 更改为 128,它发生在整个块设备上,如下所示:

sudo blockdev --setra 128 /dev/sda1
sudo blockdev --report
RO    RA   SSZ   BSZ   StartSec            Size   Device
rw   128   512  4096          0    500107862016   /dev/sda
rw   128   512  4096       2048    399999238144   /dev/sda1
rw   128   512  1024  781252606            1024   /dev/sda2

这对我来说非常有意义 - 块级设备是设置所在的位置,而不是分区,所以一切都会改变。RA 设置和设备之间的默认关系对我来说也很有意义,通常是:

RA * sector size (default = 512 bytes)

因此,我在上面所做的更改以及默认扇区大小会将预读从 128k 降低到 64k。到目前为止一切都很好。

但是,当我们添加软件 RAID、LVM 和设备映射器时会发生什么?想象一下您的报告看起来像这样:

RO    RA   SSZ   BSZ   StartSec            Size   Device
rw   256   512  4096          0     10737418240   /dev/xvda1
rw   256   512  4096          0    901875499008   /dev/xvdb
rw   256   512  4096          0    108447924224   /dev/xvdj
rw   256   512  4096          0    108447924224   /dev/xvdi
rw   256   512  4096          0    108447924224   /dev/xvdh
rw   256   512  4096          0    108447924224   /dev/xvdg
rw  4096   512  4096          0    433787502592   /dev/md0
rw  4096   512   512          0    429496729600   /dev/dm-0

在这种情况下,我们在 mdadm 创建的 md0 之上有一个设备映射的 dm-0 LVM 设备,它实际上是跨四个设备 xvdg-j 的 RAID0 条带。

md0 和 dm-0 的 RA 设置都是 4096,远高于块设备。所以,这里有一些问题:

  • RA 设置如何向下传递到虚拟块设备链?
  • dm-0 是否胜过一切,因为它是您实际访问的顶级块设备?
  • 会不会lvchange -r对dm-0设备有影响而不显示在这里?

如果它很简单,您正在使用的虚拟块设备的 RA 设置被传递,这是否意味着从 dm-0(或 md0)读取将转换为 4 x 4096 RA 读取?(每个块设备上一个)。如果是这样,那将意味着这些设置会激增上述场景中预读的大小。

然后在弄清楚预读设置实际在做什么方面:

您使用什么,相当于上面的扇区大小来确定虚拟设备的实际预读值:

  • RAID 的条带大小(对于 md0)?
  • 其他一些扇区大小等效?
  • 它是可配置的吗?如何配置?
  • FS 是否起作用(我主要对 ext4 和 XFS 感兴趣)?
  • 或者,如果只是传递,它是否只是顶层设备的 RA 设置乘以实际块设备的扇区大小?

最后,条带大小和 RA 设置之间是否存在任何首选关系(例如)?在这里我在想,如果条带是要从 RAID 设备中取出的最小元素,那么理想情况下,您不希望必须有 2 次磁盘访问才能为最小数据单元提供服务,并且希望使 RA大到足以通过一次访问满足请求。

linux
  • 3 3 个回答
  • 26045 Views

3 个回答

  • Voted
  1. Best Answer
    wojciechz
    2012-08-24T06:26:21+08:002012-08-24T06:26:21+08:00

    RA 设置如何向下传递到虚拟块设备链?

    这取决于。假设您在 Xen domU 中并且 RA=256。您的 /dev/xvda1 是 /dev/dm1 下可见的 dom0 上的实际 LV。所以你有 RA(domU(/dev/xvda1)) = 256 和 RA(dom0(/dev/dm1)) = 512 。它会产生这样的效果,即 dom0 内核将使用另一个 RA 而不是 domU 的内核访问 /dev/dm1。就那么简单。

    如果我们假设 /dev/md0(/dev/sda1,/dev/sda2) 情况,则会发生另一种情况。

    blockdev --report | grep sda
    rw   **512**   512  4096          0   1500301910016   /dev/sda
    rw   **512**   512  4096       2048      1072693248   /dev/sda1
    rw   **512**   512  4096    2097152   1499227750400   /dev/sda2
    blockdev --setra 256 /dev/sda1
    blockdev --report | grep sda
    rw   **256**   512  4096          0   1500301910016   /dev/sda
    rw   **256**   512  4096       2048      1072693248   /dev/sda1
    rw   **256**   512  4096    2097152   1499227750400   /dev/sda2
    

    设置 /dev/md0 RA 不会影响 /dev/sdX 块设备。

    rw   **256**   512  4096       2048      1072693248   /dev/sda1
    rw   **256**   512  4096    2097152   1499227750400   /dev/sda2
    rw   **512**   512  4096          0      1072627712   /dev/md0
    

    所以在我看来,内核通常以实际设置的方式访问块设备。可以通过 RAID(它的一部分)或 devicemapper 设备访问一个逻辑卷,每个逻辑卷都与另一个将受到尊重的 RA 一起访问。

    所以答案是 - RA 设置是恕我直言,不会向下传递到块设备链,但是无论顶级设备 RA 设置是什么,都将用于访问组成设备

    dm-0 是否胜过一切,因为它是您实际访问的顶级块设备?

    如果你的意思是“胜过一切”的深度传播——根据我之前的评论,我认为你可能对系统中的不同设备有不同的 RA。

    lvchange -r 是否会对 dm-0 设备产生影响而不显示在这里?

    是的,但这是一个特例。假设我们有 /dev/dm0,它是 LVM 的 /dev/vg0/blockdevice。如果你这样做:

    lvchange -r 512 /dev/vg0/blockdevice
    

    /dev/dm0 也会发生变化,因为在内核访问方面,/dev/dm0 和 /dev/vg0/blockdevice 是完全相同的块设备。

    但是我们假设 /dev/vg0/blockdevice 与正在使用它的 Xen domU 中的 /dev/dm0 和 /dev/xvda1 相同。设置 /dev/xvda1 的 RA 将生效,但 dom0 将看到仍然有它自己的 RA。

    您使用什么,相当于上面的扇区大小来确定虚拟设备的实际预读值:

    我通常通过尝试不同的值并使用 hdparm 对其进行测试来发现 RA。

    RAID 的条带大小(对于 md0)?

    同上。

    FS 是否起作用(我主要对 ext4 和 XFS 感兴趣)?

    当然 - 这是一个很大的话题。我建议你从这里开始http://archives.postgresql.org/pgsql-performance/2008-09/msg00141.php

    • 12
  2. Bill Clark
    2012-08-22T18:02:12+08:002012-08-22T18:02:12+08:00

    知道答案更难解释,所以我将在示例中这样做。为此假设您有 3 个块设备,假设标准扇区,您将 RA 设置为 4(4*512 字节)。如果您要说使用 3 个磁盘使用 RAID-5 方案,则任何读取甚至触及唯一磁盘上的条带都会使 RA 与您最初将块设备 RA 设置为的因素相结合。因此,如果您的读取正好跨越所有 3 个磁盘,那么您的有效 RA 将为 12*512 字节。这可以通过不同级别的 RA 设置来混合,例如 MD 或 LVM。根据经验,如果我的应用程序受益于 RA,我会将其设置在可能的最高层,这样我就不会不必要地混合 RA。然后,我在扇区 2049 上启动文件系统,并将每个扇区开始的偏移量设置为可被 8 整除的数字。我可能与您的要求相去甚远,但这是我的 2¢。

    • 4
  3. victorgp
    2017-05-13T16:11:07+08:002017-05-13T16:11:07+08:00

    那是为了解释。我用 RAID 和 LVM 设置做了一些测试来证明你是对的:

    https://fatalfailure.wordpress.com/2017/05/13/where-to-set-readahead-lvm-raid-devices-device-mapper-block-devices

    重要的是操作系统正在使用的那个

    • 2

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

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

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

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

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

    • 9 个回答
  • Marko Smith

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

    • 3 个回答
  • Marko Smith

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

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +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