前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kvm虚拟机块对齐问题研究

kvm虚拟机块对齐问题研究

作者头像
力哥聊运维与云计算
发布2019-06-28 12:54:50
1.1K0
发布2019-06-28 12:54:50
举报

一、什么是块对齐问题?

早于windows 2008 的windows系统,2010年以前的linux系统,第一个分区的扇区是磁盘第63扇区,并且扇区尺寸是是512byte,这个是历史的原因,硬盘必须将cylinder / head / sector (CHS) 信息报告给BIOS,这个信息在现代的操作系统是无意义的,但是磁盘依然报告给bios每个磁盘轨道有63个扇区,因此操作系统依然将第一个分区的开始位置放置到第一个磁盘轨道上,在第63个扇区开始。

当虚拟化的时候,虚拟机操作系统和虚拟化引擎也许采用以下几种对齐方式:

1) 512byte方式

虚拟机操作系统使用本地裸设备,并且裸设备使用512比特的扇区。

2) 4Kbyte方式

在新的本地硬盘上使用4K的物理扇区;在基于文件系统的存储方式上使用4K物理扇区;在基于网络

的存储方式上使用4K物理扇区。

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_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%。

三、如何解决块对齐问题

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。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013-01-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
专用宿主机
专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档