我在 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)
Run Code Online (Sandbox Code Playgroud)
通过额外的虚拟块设备接口(在内核中)传递数据有一些额外的开销。通常它在线路噪声的数量级上(不超过约 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 所做的那样。但是它的灵活性要高得多)。