早於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命令的幫助。
可使用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
測試環境:
硬件: 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 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。