我们在vmware vsphere 5.5上运行linux(Centos 5.x)虚拟机。 我正在使用iostat监视磁盘延迟,特别是await列,但是我注意到设备映射器/ LVM与支持LVM的“物理”磁盘有奇怪的结果。
下面是我们的一个相当活跃的虚拟机上的iostat -x 5的一组输出。 有问题的虚拟机有两个磁盘,sda有一个分区是/ boot,sdb是我们的主磁盘,在/ sdb2上有/。 虽然iostat为等待sdb2设备(唯一支持我的volgroup / dm-0的设备/分区)显示20-40毫秒的等待时间,但iostat对于dm-0显示100 + ms等待时间。
我的问题是:就这个系统看到的真实延迟而言,这里的统计是“正确的”? 是否看到“物理”磁盘sdb显示〜20ms,还是真的从dm-0看到100 + ms,可能是由于LVM涉及到的某些alignment/等问题? 这很奇怪,因为有时统计数据匹配得很好,而其他数据匹配得很好 – 例如,在下面的iostat输出块中,sdb2显示419个写入IOPS,而dm-0显示39k个写入IOPS。
avg-cpu: %user %nice %system %iowait %steal %idle 5.78 0.00 8.42 39.07 0.00 46.73 Device: rrqm/s wrqm/sr/sw/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sdb 15.67 39301.00 745.33 419.67 64146.67 317765.33 327.82 53.55 45.89 0.86 100.07 sdb1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sdb2 15.67 39301.00 745.33 419.67 64146.67 317765.33 327.82 53.55 45.89 0.86 100.07 dm-0 0.00 0.00 761.33 39720.67 64120.00 317765.33 9.43 4933.92 121.88 0.02 100.07
更新:我做了一些进一步的阅读,包括下面Gene的答案中的链接。 我知道有很多variables(虚拟化,块文件系统等),但是这个部分似乎按照我们的供应商+ VMware的最佳实践sorting,性能实际上非常好。 我真的只是从这里的“虚拟机内部”angular度来看这个。
在那个笔记,我怀疑我们的分区+ LVMalignment有一个问题:
GNU Parted 1.8.1 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) unit s (parted) print Model: VMware Virtual disk (scsi) Disk /dev/sdb: 2147483647s Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system Flags 1 63s 4192964s 4192902s primary linux-swap boot 2 4192965s 2097151999s 2092959035s primary lvm ~]# pvdisplay --- Physical volume --- PV Name /dev/sdb2 VG Name VolGroup00 PV Size 998.00 GB / not usable 477.50 KB Allocatable yes (but full) PE Size (KByte) 32768 Total PE 31936 Free PE 0 Allocated PE 31936 PV UUID tk873g-uSZA-JaWV-R8yD-swXg-lPvM-dgwPQv
阅读alignment,看起来你的开始扇区应该可以被8整除,所以你在一个4kb的边界alignment,标准的512b扇区大小。 看起来LVM能够在将它应用到整个磁盘时自动alignment,但是由于我们先将磁盘分区,然后将我们的/ dev / sdb2分区作为LVM使用的物理设备,我不确定它能够在这种情况下计算偏移量。 根据http://linux.die.net/man/5/lvm.conf ,参数data_alignment_offset_detection:“如果设置为1,并且你的内核在sysfs中为物理卷提供了拓扑信息,那么alignment数据区的开始物理卷将由sysfs中公开的alignment_offset移位。“ 这是Centos5,我没有看到任何信息暴露在sysfs中,只在我们的Centos6和更新的虚拟机上,所以它可能无法在物理卷上正确alignment。
我发现这个关于VM分区alignment的netapp白皮书http://www.netapp.com/us/system/pdf-reader.aspx?m=tr-3747.pdf&cc=us具体来说,第4.5节,第29页有很好的信息,关于正确分区虚拟机以便与LVM正确alignment。 我会遵循这个,所以我们新的VM正确alignment。
这似乎可能会导致这种行为,任何人有更多的知识/经validation实?
自从涉及虚拟化以来,没有简单的答案。 虚拟磁盘坐在文件系统的顶部,虚拟客户机上有一个虚拟客户机,虚拟客户机拥有自己的驱动程序,将一个块设备提供给LVM。 我不确定这是否会造成如此巨大的差异,但这可能是可能的。
除此之外…
LVM会增加开销,所以会有差异。 如果您的LVM和块设备没有正确alignment,也可能是一个促成因素。
alignment不是一个简单的主题,可以在这样的设置覆盖。 我可以做的最好的方式是向你推荐几个文件,也许你会发现更多的答案: