kvm虛擬機塊對齊問題研究

 

1、什麼是塊對齊問題?linux

早於windows 2008 的windows系統,2010年之前的linux系統,第一個分區的扇區是磁盤第63扇區,而且扇區尺寸是是512byte,這個是歷史的緣由,硬盤必須將cylinder / head / sector (CHS) 信息報告給BIOS,這個信息在現代的操做系統是無心義的,可是磁盤依然報告給bios每一個磁盤軌道有63個扇區,所以操做系統依然將第一個分區的開始位置放置到第一個磁盤軌道上,在第63個扇區開始。ios

當虛擬化的時候,虛擬機操做系統和虛擬化引擎也許採用如下幾種對齊方式:windows

1) 512byte方式centos

虛擬機操做系統使用本地裸設備,而且裸設備使用512比特的扇區。網絡

2) 4Kbyte方式ide

在新的本地硬盤上使用4K的物理扇區;在基於文件系統的存儲方式上使用4K物理扇區;在基於網絡工具

的存儲方式上使用4K物理扇區。性能

3) 64Kbyte測試

在高速網絡存儲上使用,是一些高速網絡存儲的默認值。spa

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、塊對齊查看、性能測試

2.1 查看

可使用virt-alignment-scan命令

virt-alignment-scan -a os_p_w_picpaths_1

/dev/sda1 32768 32K bad (alignment < 64K)

virt-alignment-scan -a os_p_w_picpaths_2

/dev/sda1 65536 64K ok

virt-alignment-scan -a centos62x64

/dev/sda1      1048576         1024K   ok

/dev/sda2    210763776         1024K   ok

2.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%。

 

 

3、如何解決塊對齊問題

Windows系統

安裝的時候,使用winpe先劃分分區

diskpart

   select disk 0

   clean

   create partition primary align=64

而後格式化分區,安裝操做系統。

Linux系統

使用kickstart文件,先在預處理的部分,用parted分區,而後使用分區

part /boot --fstype ext3 --onpart vda1

part pv.2 --onpart vda2

volgroup VolGroup00 --pesize=32768 pv.2

logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=1008 --grow --maxsize=2016

logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow

%pre

parted /dev/vda mklabel msdos -s

parted /dev/vda mkpart primary ext3 2048s 409600s -s

parted /dev/vda mkpart primary 411648s 100% -s

parted /dev/vda set 2 lvm on s

按照扇區來劃分磁盤空間,每一個扇區是512byte,通常開始和結束按照2048個扇區的倍數來開始。

已經安裝好的虛擬機鏡像可使用virt-resize命令,更改對齊方式

qemu-img create kuai-no-vda-2-yes -f qcow2 6G

virt-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。

相關文章
相關標籤/搜索