kvm虚拟机块对齐问题研究
  • kvm虚拟机块对齐问题研究 一、什么是块对齐问题?早于windows 2008 的windows系统,2010年以前的linux系统,第一个分区的扇区是磁盘第63扇区,并且扇区尺寸是是512byte,这个是历史的原因,硬盘必须将cylinder / head / sector (CHS) 信息报告给BIOS,这个信息在现代的操作系统是无意义的,但是磁盘依然报告给bios每个磁盘轨道有63个扇区,因此操作系统依然将第一个分区的开始位置放置到第一个磁盘轨道上,在第63个扇区开始。  www.2cto.com  当虚拟化的时候,虚拟机操作系统和虚拟化引擎也许采用以下几种对齐方式:1) 512byte方式虚拟机操作系统使用本地裸设备,并且裸设备使用512比特的扇区。2) 4Kbyte方式在新的本地硬盘上使用4K的物理扇区;在基于文件系统的存储方式上使用4K物理扇区;在基于网络的存储方式上使用4K物理扇区。  www.2cto.com  3) 64Kbyte在高速网络存储上使用,是一些高速网络存储的默认值。4) 1Mbyte微软从windows server 2008开始默认采用1MB的块对齐方式,随后linux系统做了跟进。假设虚拟机是512Byte的扇区,你会看到windows 2008 第一个分区从2048个扇区开始,随后的分区从2048倍数个扇区开始。块对齐的问题如下图:                                     sect#63                              +--------------------------+------                              |         guest            |                              |    filesystem block      |        ---+------------------+------+-------------------+-----+---           |  host block             |  host block             |           |                         |                         |        ---+-------------------------+-------------------------+--- 举个例子,在4k 扇区的系统上,虚拟机的文件系统块,第63扇区横跨物理机文件系统的两个块,会造成一个块的读写操作,横跨两个物理机的块,产生额外的io开销。注释:以上内容选自virt-alignment-scan命令的帮助。 二、块对齐查看、性能测试2.1 查看可以使用virt-alignment-scan命令virt-alignment-scan -a os_images_1/dev/sda1 32768 32K bad (alignment < 64K)virt-alignment-scan -a os_images_2/dev/sda1 65536 64K okvirt-alignment-scan -a centos62x64/dev/sda1      1048576         1024K   ok/dev/sda2    210763776         1024K   ok2.2 块对齐性能测试测试环境:硬件: HP DL380G7 CPU Intel(R) Xeon(R) E5520 *2 内存 24G 硬盘146G*8 RAID 10宿主机操作系统:CentOS 6.3升级到最新 内核版本kernel 2.6.32-279.14.1.el6.x86_64虚拟机操作系统:windows 2003 32中文企业版测试工具:Iometer测试方法:4K随机写结果:块没有对齐的虚拟机 iops 165块对齐的虚拟机        iops   187速度快13.3%根据国外的测试数据,不通的应用,性能可能会提升最高到30%。  三、如何解决块对齐问题Windows系统安装的时候,使用winpe先划分分区diskpart   select disk 0   clean   create partition primary align=64然后格式化分区,安装操作系统。Linux系统使用kickstart文件,先在预处理的部分,用parted分区,然后使用分区part /boot --fstype ext3 --onpart vda1part pv.2 --onpart vda2volgroup VolGroup00 --pesize=32768 pv.2logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=1008 --grow --maxsize=2016logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow%preparted /dev/vda mklabel msdos -sparted /dev/vda mkpart primary ext3 2048s 409600s -sparted /dev/vda mkpart primary 411648s 100% -sparted /dev/vda set 2 lvm on s按照扇区来划分磁盘空间,每个扇区是512byte,一般开始和结束按照2048个扇区的倍数来开始。已经安装好的虚拟机镜像可以使用virt-resize命令,更改对齐方式qemu-img create kuai-no-vda-2-yes -f qcow2 6Gvirt-resize --align-first always --expand /dev/vda1 kuai-no-vda kuai-no-vda-2-yes[root@lab-kvm-test178 datapool]# virt-alignment-scan -a kuai-no-vda-2-yes/dev/sda1 65536 64K ok注意:使用virt-resize命令存在一个问题,就是windows 系统virt-resize出来的虚拟机镜像,不能再次virt-resize;但是linux系统可以多次virt-resize。

     

  • 点这里复制本页地址发送给您QQ/MSN上的好友
  • 300*300广告