原书中的第二章 是介绍了下hyper-v的管理器和检查点的使用,导入导出虚拟机,所以我跳过了不高兴写,很简单。直接进入第三部分,介绍虚拟机的三个重要组成部分:CPU,内存,硬盘的配置选项。
Hyper-v虚拟处理器
在Hyper-v中,系统对于虚拟处理器的管理偏向"粗犷",和同类产品VMware的ESXI相比,Hyper-v并不是将CPU的主频叠加,然后根据每一台虚拟机分配相应主频的资源;Hyper-v仅以物理CPU核心数进行资源分配,这种方式降低了逻辑架构的理解难度,但并不是说此种处理方式不可控。Hyper-v以数量为基础的计量方式可以通过资源占比的方式进行精细化的分配。
Hyper-v虚拟处理器计数方式
Hyper-v能够为虚拟机可分配的最大虚拟处理器数取决于物理服务器的两个指标:物理CPU个数,物理CPU核心数。
- 物理CPU个数:此处指的是每一课实际安装在服务器中的物理CPU。服务器行业术语"路"即物理CPU个数。双路服务器即代表安装有两颗物料CPU。任务管理器中的插槽。
- 物理CPU核心数:此处指的是当颗CPU的核心数,如使用Intel的超线程技术,核心数需要乘以2。任务管理器中的内核。
- 虚拟机可分配最大虚拟处理器数:此数据指的是物理CPU个数*物理CPU核心数。此数据对应任务管理器中的逻辑处理器。无论何种情况,为单个虚拟机分配的虚拟处理器不可能超过此限制。
超线程:超线程技术是在一颗CPU同时执行多个程序而共同分享一颗CPU内的资源,理论上要像两颗CPU一样在同一时间执行两个线程,虽然采用超线程技术能同时执行两个线程,但它并不像两个真正的CPU那样,每个CPU都具有独立的资源。当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到 这些资源闲置后才能继续。因此超线程的性能并不等于两颗CPU的性能。但不可否认,拥有超线程技术的CPU性能会优于没有超线程技术的CPU。
Hyper-v 2012 R2虚拟处理器升级特性
资源 |
Hyper-v 2012 R2 |
逻辑处理器 |
320 |
每台主机的虚拟CPU数量 |
2048 |
每台虚拟机的虚拟CPU数量 |
64 |
检测物理CPU是否支持Hyper-V
除了查询官方资料外,依然可以通过其他方法对此进行检测。针对CPU的硬件支持,只要满足以下三个条件就可以使用Hyper-v角色。
- 支持硬件虚拟化技术,如Intel的Intel VT或AMD的AMD-V。
- 支持数据执行保护(DEP)。
- 64位处理器:事实上这种限制在2008R2时代还会背作为一个参数去考量,但随着技术的发展,现在基本可以默认最新的处理器都是64位了。
使用系统信息检查支持特性
在PowerShell中输入msinfo32
拉到最底部,检查Hyper-v虚拟机监视模式扩展,Hyper-v固件中启用的虚拟化,Hyper-v数据扩展保护,这三个选项的结果是否为是。
在服务器虚拟化中,Hyper-v 第二级地址转换(SLAT)并不是必须功能。此功能是否开启仅在两种情况下是必要选项:
- 使用微软的桌面虚拟化的RemoteFX进行显卡硬件加速,USB重定向等功能时,第二级地址转换(SLAT)是必要功能。
- 在操作系统为Windows8/8.1 64位Professional以上版本时,用户希望在本机安装Hyper-v角色时,第二级地址转换(SLAT)是必要功能。
第二级地址转换(SLAT)广泛存在于服务器级别的Xeon CPU上,家用机级别的CPU则只有较新的CPU支持,具体是否支持,需要查询官方的CPU支持文档。
开启Hyper-v失败的原因
多数情况下,如果CPU本身支持Hyper-v技术,但在部署过程中总是失败,可以关注两个地方:
- 检查是否开启Bios中的虚拟化选项为enable。一般该选项为Intel Virtual Technology。
- 更新官方Bios程序至最新,碰到过开启了虚拟化,但是因为Bios版本过旧,Hyper-v角色依然无法安装。
Hyper-V虚拟处理器
分配原则
服务器虚拟化在企业和组织中的运营,牵扯到最多的一个问题就是:用户永远希望IT部门为其分配更多的硬件资源,而IT部门会考虑资源的集中整合分配,不愿意为其分配过量的资源。虚拟机的超量分配容易导致资源浪费,同时又可能拖慢其他位于相同硬件上的虚拟机。
假设某台硬件服务器是一台双路的服务器,拥有24颗逻辑处理器,每个用户希望申请的虚拟机是24颗虚拟处理器,那么可能只要有两个用户在全速运行,其他用户的体验就会大受影响,无法进行正常的使用了。
合理分配虚拟处理器,不建议超量分配虚拟机处理器主要是因为以下几个实施建议:
- 并不是所有应用都需要多核处理器的支持,分配2核或16核心并无差别。例如基于Windows Server2003的文件共享服务器分配2个核心和分配8个核心,在使用效率上的差异微乎其微。
- 为某台虚拟机分配较多的虚拟处理器,会使其在宏观上使用CPU资源时的排队时间更长,此时分配较少的虚拟处理器数量的虚拟机会因为排队时间更短,能够尽快的得到所需资源。
- 当所有用户都在超量分配CPU资源时,无法进行有效的量化,在出现资源不足造成资源争夺时,无法保证最为重要的关键业务稳定运行。
- 虚拟处理器的调整只能在虚拟机关机的状态下调整,希望当业务正式线上运行后再做灵活调整是不可取的,这种设计思路会带来服务中断。
资源滥用
除了控制虚拟处理器的个数合理分配,hyper-v还有三种方式可以保障当出现系统cpu资源不足时,关键业务能够正常运行,并且这三种方式均可在虚拟机开机状态下进行调整:
- 虚拟机保留资源
- 虚拟机限制资源
- 虚拟机相对权重
创建一台虚拟机,右键点击该虚拟机,选择设置,点击处理器,可以看到默认的快速创建虚拟机只会为虚拟机分配一个虚拟机处理器。同时默认的虚拟机保留(百分比)为0.
虚拟机保留是指最少为该虚拟机分配的资源,此设置以百分比的形式将资源分配给该虚拟机。如果滥用此设置,会导致实际分配的虚拟机数量低于预期,同时但出现虚拟机CPU资源超过100%时,希望会按照虚拟机启动顺序不同一次启动,超出CPU资源分配的虚拟机将不能启动。合理利用此设置可以保证关键业务能够获取到足够的CPU运算资源,但不合理的设置会导致重要业务未被启动,反而非关键业务会抢占CPU资源。
虚拟机保留(百分比)与虚拟处理器的数量需要结合使用,如一台拥有16核的服务器,先创建一台保留99%的16核CPU的虚机,继续在创建一台虚拟机,16核,百分比2%,这样发现分配的资源99+2已经超过了100%,会造成开启失败。
默认创建的虚拟机保留资源均为0.因此即使系统中存在需要保留99%的虚拟机,默认的虚拟机依然可以开机,不会影响正常业务。
NUMA支持
NUMA(非一致存储器访问)是针对常见的UMA(一致存储器访问)而言。我们常见的架构都是就近使用一致的资源,如部署双CPU的服务器,其内存一般是对称放置的。第一颗CPU就近访问离他最近的一半内存,而当他舍近求远访问另一颗CPU的内存,就属于NUMA了,此时可以预见,其访问效率自然不如离他更近的那一半内存了。
针对物理服务器而言,多数操作系统都可以自动识别NUMA。而不支持NUMA的虚拟化架构则不会去进行这种优先选择,带来的后果就是运行效率的降低。
Windows Server2012 R2默认支持NUMA,因此无需修改。
分配虚拟处理器时,建议用户不用分配单数的虚拟处理器,在配置不正确的NUMA信息时,会导致虚拟机的运行效率下降。Hyper-v的Numa会尽量将虚拟机的CPU和内存请求分配到相同的拓扑节点上,这些完全是自动运行的。
虚拟机限制资源
有保留资源,自然就有限制资源。和虚拟机保留资源相反,虚拟机限制资源的目的是限制某个虚拟机能够使用的最大资源,通过这两者相结合,可以使关键业务在一个合理的保障区间内运行。
首先看一个较为极端的例子,此处填写虚拟处理器的数量为2,虚拟机保留填写99,虚拟机限制填写30,此时系统会告知,保留值不能大于限制值。
一般来说,限制资源是针对高CPU压力的核心业务使用的,需要保障业务的正常运行,但不希望其占用过多的CPU资源。
另一种在组织中常见的场景是,某个强势部门申请了一台高配的虚拟机但非重要业务。为了保证其他用户的正常运行,系统管理员可以对这台虚拟机配置较为苛刻的虚拟机限制,以保证该虚拟机的运行不会影响到其他重要业务。
相对权重
当一台Hyper-v主机上的多台虚拟机在争抢虚拟处理器资源时,可以通过相对权重来设置各个虚拟机之间的优先级。优先级默认100,该数值可以在1-10000之间进行设置,数字越大,优先级越高。默认所有虚拟机处于同一个服务器级别上,将会按照先到先得的顺序进行虚拟处理器资源轮询。
Hyper-V虚拟机内存
动态内存技术的改进
动态内存技术第一次是伴随着Windows Server 2008R2 SP1中的Hyper-V出现的,随之Windows Server 2012持续采用并改进了这项技术。在Windows Server 2012 R2中,动态内存技术从Windows服务器扩展到了Linux服务器。
静态内存
静态内存是每一种服务器虚拟化技术都提供的技术,其特点是虚拟机开启后立即占用物理内存,虚拟机在运行期间不会再次向物理机提出增加内存的请求。
如一台服务器默认为4G物理内存,在仅安装Hyper-V角色的前提下,内存使用量为1G。
如果开启两台快速创建的虚拟机后,内存使用量会变为2G,除非虚拟机关机,否则内存不会被释放。
静态内存适用于可以明确内存需求量的业务,为虚拟机分配静态内存可以得到更好的运行效率。
动态内存
动态内存真正做到了按需分配,同时作为Windows Server 2008R2 SP1的改进,Windows Server 2012和Windows Server 2012 R2中的动态内存不仅支持最大,最小内存,同时还支持启动内存。
需要注意的是,如需使用动态内存,则虚拟机必须提前安装操作系统,并安装集成服务组件。如不安装集成服务组件,则动态内存功能无法生效。
动态内存包含五个配置选项,下面将分别介绍。
- 启动内存:虚拟机启动瞬间所需占用的内存,启动内存和静态内存的设置值相同。在虚拟机未正式进入系统之前,虚拟机的实际内存使用量均为启动内存设置的数值。由于某些应用在安装时要求检测系统的最低内存,但在实例运行起来后,真实的内存使用量并不高,因此设置一个较高的启动内存,可以让部分对内存要求苛刻的应用正常安装。
- 最小内存:虚拟机在正确安装集成服务的前提下,进入操作系统后,由操作系统所能分配的最小内存。如某个新安装的操作系统,其内存最低需求为512MB,我们设置最小内存为128MB,实际内存并不会为虚拟机分配为128MB。最小内存作为保障参数存在,无法当成限制参数使用。
- 最大内存:默认最大内存值是1048576MB,较大的基数意味着可以为这台虚拟机分配物理机所能分配的最大值。事实上这种设置很难对虚拟机做到精细管控,因此在实际使用当中,需要在这里填写预估的合理最大值。如1024MB,2048MB等具体的数值。
- 内存缓冲区:动态内存的一项标配选项,由于动态内存会实时改变虚拟机的内存使用量,当内存需求在某一个时间点突然增大时,其使用的内存就是内存缓冲区所保留的空间。
如果内存瞬间增幅不大,在虚拟机使用内存缓冲区时,系统会在最大内存限额之内增大实际为用户分配的内存,同时保障内存缓冲区时刻为原设定值;如果内存瞬间增幅较大,内存页面文件会被写入磁盘,即智能分页文件,当内存数据由内存转入较慢的硬盘时,其运行效率会明显降低。在系统为虚拟机分配更多内存后,写入到硬盘中的分页文件将会重新被写回内存。如果发现为虚拟机设定了动态内存,但该虚拟机的运行效率偏偏很低,经常发生写入硬盘智能分页文件的情况,此时就可以考虑扩大内存缓冲区或增大内存了。为了避免这种情况,在使用动态内存时,合理分配内存缓冲区是非常必要的。
- 内存权重:不仅仅针对开启动态内存的虚拟机生效,其对分配固定内存的虚拟机同样生效。内存权重是一种苛刻运行条件下的保障措施。当虚拟机分配了过多的内存,而Hyper-v主机并没有足够的内存时,内存权重会对虚拟机进行分级,优先级高的虚拟机在未获得足够的内存前,其他虚拟机无法获得正常需要的内存。
当优先级高的内存需要使用更多内存时,系统可能会将优先级低的开启了动态内存的虚拟机内存回收,被回收内存的虚拟机内存会写入智能分页文件。无论如何,当发生内存权重需要仲裁的情况时,问题往往都比较严重。内存权重可以保证业务持续运行,但无法对业务持续运行的效率进行保障。
解决这个问题有三种方法:
- 不要调整默认内存权重大小,所有虚拟机使用同样的内存权重。
- 为Hyper-v主机提供更多的物理内存,只要内存不够的情况不发生,则内存权重仲裁不会发生。
- 使用Hyper-v的群集技术,将单台物理服务器的负载分担到多台物理服务器上,杜绝内存权重仲裁的情况。
静态内存和动态内存的使用场景
尽管动态内存可以做到按需分配,降低内存的使用量,节省成本。但动态内存并不是万能的,由于内存缓冲区的存在,其使用效率会低于静态内存。
适用于动态内存有如下场景:
- 物理内存紧张,成本敏感。
- 没有群集或其他高可用环境,希望尽可能集成更多业务。
- 测试环境,对运行效率的间歇性变动不敏感。
- 非关键业务,对性能要求不高。
- 关机业务的测试阶段,需要对实际内存的用量进行测试。
适用于静态内存有如下场景:
- 对成本部敏感,物理内存富足。
- 拥有群集或其他高可用环境,可以自动对负载进行迁移。
- 关键业务,对性能敏感。
复杂多变的生产环境决定了静态内存和动态内存都有其生存空间,相对静态内存而言,动态内存配置的架构规划需要花费更多的心思。
Hyper-V虚拟硬盘
虚拟硬盘架构
和物理硬盘不同的是,Hyper-V虚拟硬盘不会独占硬盘空间,它是一组具有特定含义的文件,通过Hyper-V创建虚拟机后,其会自动创建。它包含了Hyper-V虚拟机的数据文件和硬件配置文件,以及快照,页面交换等信息。它的大小和性能多数情况下受限于承载这些文件的物理硬盘的大小和性能,典型的一组Hyper-V虚拟硬盘文件包含以下内容:
- 虚拟硬盘文件(以vhd或vhdx为后缀),该文件属于最为重要的文件,保存了虚拟机内存的磁盘分区结构和具体数据。
- 虚拟机xml文件,此文件默认会保存在Virtual Machines目录下,其包含虚拟机的硬件配置,如虚拟硬盘所处的位置,虚拟机连接的网络名称,MAC的地址,关联了哪些虚拟机bin和vsv文件等。该文件丢失会导致虚拟机硬件配置丢失,无法完成导入操作。
- 虚拟机bin文件,当虚拟机使用暂停功能时,系统会保留其当前状态,此时内存的信息会写入bin文件。
- 虚拟机vsv文件,每个虚拟机存放配置文件的目录中都有一个vsv文件,其保存的是硬件的设备状态,初始大小为20MB,当虚拟机处于保存状态下,其文件大小会根据系统状况相应增大或减小。
- 检查点文件,检查点文件会在Virtual Hard Disks目录下产生以avhd或avhdx为后缀的文件(此前版本均称为快照文件),每次点击检查点,则创建一组检查点文件,此文件丢失会导致创建检查点之后的数据文件丢失。
- 检查点xml文件,该文件位于Snapshots目录下,作用同虚拟机xml文件。
- 检查点bin文件,同虚拟机bin文件。
- 检查点vsv文件,同虚拟机vsv文件。
虚拟硬盘特性改进
Hyper-v虚拟硬盘在Hyper-v 2012 R2中拥有两种支持格式,分别是vhd和vhdx,其中vhdx在Hyper-v 2012中被首次使用,这种新格式拥有以下特点:
功能 |
Hyper v 2012 R2 |
虚拟光纤通道 |
是 |
多路径输入输出(MPIO) |
是 |
原生4KB磁盘支持 |
是 |
最大虚拟硬盘大小 |
64TB vhdx |
最大直通硬盘大小 |
256TB+? |
安全卸载数据传输 |
是 |
从USB磁盘启动 |
是 |
存储池 |
是 |
实时VHD合并 |
是 |
硬盘IOPS限制 |
是 |
相对于vhd而言,vhdx最大的改进是单个文件可以超过2TB容量限制,达到了64TB,此格式不支持Windows Server 2012以前的Hyper-v版本。
Vhdx格式再性能上较之vhd有了明显的改进。在io的读写方面,可以达到100万级的IOPS。
虚拟硬盘的类型
在创建Hyper-v虚拟硬盘时,默认有三个选项可以选择,分别是固定大小,动态扩展,差异。通过hyper-v管理器的虚拟机向导默认只能创建动态扩展的虚拟硬盘,其他格式需要使用新建虚拟硬盘向导完成。
- 固定大小:提供了更好的性能,该格式的特定是物理虚拟机内的实际占用空间多少,其均会在创建固定大小时提供占满所需的全部物理磁盘空间。如创建10GB的虚拟硬盘文件,则实际的vhdx大小也为10GB。
- 动态扩展:可以更好的利用物理磁盘空间,只要业务不是对硬盘要求特别苛刻,均建议采用此方式,虚拟硬盘文件在最初创建时很小,随着实际文件的增多会慢慢变大。由于承载虚拟机文件的vhdx会不断变大,因此该文件需要不断的请求新的地址空间,而先请求后分配的这种操作,会导致其先天就比固定大小这种一次性请求,后期只需分配的虚拟硬盘慢。同时由于磁盘是先请求后分配的,因此在物理磁盘上的分布可能也不是连续的,这一点同样会降低效率。
- 差异: 提供更可观的物理磁盘空间利用率,通过创建一个共用的父磁盘,多个子磁盘可以共用一个父磁盘,从而达到节约硬盘空间的目的。由于共用了一个父磁盘,因此在使用时会频繁读取父磁盘,对父磁盘所在的物理磁盘提出了更高的读写要求。差异磁盘的典型应用即是微软的桌面虚拟化(VDI),在创建完一个操作系统的父磁盘后,连续创建多个子磁盘不会带来明显的空间增大,同时创建速度也非常快。需要注意的是,在创建完差异磁盘后,一定不可以再次修改父磁盘,否则会造成所有子磁盘与父磁盘的连接失败,导致所有数据无法读取。在windows Server 2012 R2中,利用差异磁盘的典型做法是将父磁盘放置在告诉的固态磁盘/阵列上,而将差异磁盘放置在低速磁盘中。
除了以上三种格式,还有一种特殊的磁盘应用方式:直通(Passthrough)磁盘,直通磁盘可以让虚拟机直接与物理磁盘交互操作,无需经过Hypervisor进行转换,因此读写效率也最高。
直通硬盘需要将原有的一块物理硬盘脱机,然后挂载到虚拟机中。
直通磁盘拥有最好的性能,但是依然存在一些缺点:
- 独占硬盘空间,无法再次分割。
- 无法使用检查点功能。
- 无法使用私有云模板进行部署。
在使用直通硬盘时,需要因地制宜,根据实际的需求来决定是否运用此技术。
应用场景 |
推荐技术 |
推荐阵列及磁盘模式 |
重点应用 |
直通,固定大小 |
RAID10,固态或SAS |
实验室环境测试 |
差异 |
RAID0,固态 |
性能应用 |
直通 |
RAID10,RAID0,固态或SAS |
一般生产应用 |
动态 |
RAID5,SAS |
编辑虚拟硬盘
自Windows Server 2012起,操作系统内置了vhd硬盘管理工具,管理vhd和vhdx文件和管理单独的物理硬盘一样方便。在操作系统中双击即可完成挂载,可以对其进行格式化重新分区等和硬盘一致操作。也可以往硬盘中拷贝,删除修改文件。
编辑完成硬盘,右键弹出
扩展虚拟硬盘
在虚拟机关闭的情况下,可以对Hyper-v虚拟机磁盘的大小进行扩展和压缩。在Windows Server 2012 R2下创建的第二代虚拟机,默认即可于虚拟机开启状态下,对虚拟机进行扩展,如果是第一代虚拟机,则磁盘必须挂载在SCSI控制器上方可实现该功能。
选择编辑
可以选择扩展,压缩转换操作。当虚拟机磁盘经过频繁的写入和删除后,其所占用的磁盘空间会变大,但当虚拟磁盘中的数据删除后,这部分空间并不会被释放,通过压缩,可以释放这部分空间。转换可以将vhd转换成vhdx,也可以倒过来转换,在进行格式转换的同时,也可以在固定大小和动态扩展之间进行转换。
选择扩展后的大小。
确认扩展。
合并差异磁盘
在测试环境中,可能会因为磁盘空间和预算的限制,通过差异磁盘来完成相应试验环境的搭建。当在将这些虚拟机迁移到生产环境时,依然使用差异磁盘就有些不合时宜了。此时需要将父磁盘和子磁盘进行合并,同时不能破坏原父磁盘。
点击编辑进行接下来的合并操作。
选择合并
在配置磁盘对话框,选择到新虚拟硬盘,输入进行差异磁盘的合并操作。输入真实存在的物理路径和保存的文件名,此时可选动态虚拟磁盘和固态磁盘两类。点击完成后,耐心等待合并结束。
回到虚拟机设置选项卡下,点击浏览,查看新生成的虚拟硬盘文件位置。同时原父子磁盘均未被破坏。
小结
本章对Hyper-v的CPU的计量方式进行了分析,以及如何在脱机情况下检查CPU是否支持Hyper-v功能。
Hyper-v的动态内存技术也是一项非常有用的功能,在Windows Server 2012 R2中,动态内存技术开始对Linux系统进行支持,尽管该功能在Windows Server 2008 R2 SP1中就已经出现,但对Linux系统的支持还是第一次。Vhdx这种从Windows Server 2012 开始出现的新的虚拟硬盘格式开始渐渐深入人心。固定大小,动态扩展,直通以及差异这4种硬盘类型的性能差距越来越小,这为我们进行硬盘选型,架构设计带来了更简洁的选择。
而差异磁盘尽管性能相对最差,但在这个固态硬盘风生水起的年代,反而也变得不是什么大问题。在测试环境中,差异磁盘配合固态硬盘的表现依然会超越同等预算下的机械硬盘组合。