版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 OpenStack 针对特定场景的高级特性介绍 目 录 TOC o 1-3 h z u HYPERLINK l _Toc66484496 OpenStack 针对特定场景的高级特性介绍 PAGEREF _Toc66484496 h 1 HYPERLINK l _Toc66484497 1 虚拟机软删除 PAGEREF _Toc66484497 h 3 HYPERLINK l _Toc66484498 2 CPU拓扑以及核绑定 PAGEREF _Toc66484498 h 4 HYPERLINK l _Toc66484499 3 虚拟化嵌套 PAGEREF _Toc66484499 h 11
2、HYPERLINK l _Toc66484500 4 使用virtio-scsi驱动 PAGEREF _Toc66484500 h 12 HYPERLINK l _Toc66484501 5 使用qemu-guest-agent PAGEREF _Toc66484501 h 14 HYPERLINK l _Toc66484502 6 网卡多队列 PAGEREF _Toc66484502 h 16 HYPERLINK l _Toc66484503 7 watchdog PAGEREF _Toc66484503 h 17 HYPERLINK l _Toc66484504 8 GPU虚拟化 PAGE
3、REF _Toc66484504 h 17 HYPERLINK l _Toc66484505 9. 参考文献 PAGEREF _Toc66484505 h 18本文将介绍OpenStack的几个高级特性,这里所谓的高级特性,不是指那些人人都需要的OpenStack通用默认配置,而是专门针对一些特定场景需求设定的。1 虚拟机软删除通常情况下,当用户删除虚拟机时,虚拟机会立即从hypervisor底层删除,不可撤回。为了防止人为误操作,Nova支持开启软删除(soft delete)功能,或者称为延迟删除,延迟删除时间通过Nova配置项 /etc/nova/nova.conf 的 reclaim_
4、instance_interval项指定,如下:此时虚拟机执行普通删除操作时,nova不会立即删除虚拟机,而是会等待两分钟的时间,在此时间间隔内,管理员可以随时恢复虚拟机,只有在超过120秒后虚拟机才会真正执行删除操作,不可恢复。为了演示该功能,我们删除一台虚拟机 int32bit-test-2:通过nova list命令并指定 -deleted 选项可以列出已删除的所有虚拟机实例:通过 nova restore 命令可以恢复虚拟机:可见,刚刚删除的虚拟机已经恢复了。注意如果管理员通过 nova force-delete 命令强制删除虚拟机,虚拟机会立即从底层删除而无视延迟时间。需要注意的是,
5、由于这个功能早期设计的缺陷,开启虚拟机软删除功能必须保证所有计算节点和API节点配置一样并且时间同步,并且所有节点的延迟时间不可动态修改,这非常不灵活。我在我们内部私有云二次开发中改善了该功能,延时时间不再通过配置文件指定,而是通过虚拟机的 admin metadata 指定,这样就不再依赖于各个节点的配置项的同步与更新,并且可随时调整延时时间。2 CPU拓扑以及核绑定2.1 概述OpenStack K版本引入了许多CPU高级特性功能,不仅支持自定义CPU拓扑功能,支持设置虚拟机CPU的socket、core、threads等,还支持CPU pinning功能,即CPU核绑定,甚至能够配置虚拟
6、机独占物理CPU,虚拟机的vCPU能够固定绑定到宿主机的指定pCPU上,在整个运行期间,不会发生CPU浮动,减少CPU切换开销,提高虚拟机的计算性能。除此之外,OpenStack还支持设置threads policy,能够利用宿主机的SMT特性进一步优化虚拟机的性能。接下来简单介绍下如何配置OpenStack的CPU高级特性。2.2 规划CPU和内存在配置之前,首先需要规划计算节点的CPU和内存,哪些CPU分配给虚拟机,哪些CPU给宿主机本身的进程预留,预留多少内存等。为了性能的最优化,还需要考虑宿主机CPU的NUMA架构。在Linux环境下可以通过以下命令查看CPU信息:由以上信息可知,该宿
7、主机一共两个CPU(socket),每个CPU 10核(core),每个核可以开启两个超线程(thread),即一共有40个逻辑CPU,包含两个NUMA node,其中node0包括0,2,4,.,38,node1包括1,3,5,.,39。预留CPU个数和内存需要根据实际情况调整,比如若计算节点和存储节点融合,则需要预留更多的CPU来保证存储服务的性能。本例子仅作为测试使用,测试环境预留了4个逻辑CPU(1-3)和4GB物理内存给宿主机,剩下的资源全部分配给虚拟机使用。配置虚拟机使用的CPU集合(cpuset)是通过计算节点的 vcpu_pin_set 配置项指定,目前支持以下三种语法格式:1
8、,2,3 # 指定CPU号,逗号隔开。2-15, 18-31 # 使用-表示连续CPU序列,使用逗号分隔。0,1,2,3 # 使用表示排除的CPU号,剩下的全部作为虚拟机使用。以上三种语法格式可以组合使用。compute节点Nova参考配置如下:如果需要配置虚拟机CPU独占,则还需要配置内核参数 isolcpu 来限制其他进程使用指定的CPU。比如我们需要把CPU 2,3,6,7作为CPU pinning给虚拟机独占,设置如下:重新安装grub:重启宿主机,下次系统启动时会默认添加如下内核参数:在nova-scheduler节点上,需要配置默认filter,filters中必须包含Aggreg
9、ateInstanceExtraSpecFilter和NUMATopologyFilter这两个filter:配置完重启所有的nova-scheduler服务:2.3 创建主机集合在实际环境中肯定不是所有的计算节点都开启这些高级功能,并且CPU特性也有差别,我们可以通过主机集合(host aggregate)把所有相同的CPU配置放到一个集合中,通过主机集合(host aggregate)区分哪些计算节点开启CPU核绑定功能,哪些不开启。首先创建pinned-cpu主机集合:增加metadata区分pinned:把配置开启了CPU核绑定功能的两个host加到该主机集合中:此时nova sche
10、duler只要接收到包含pinned=true元数据的请求就会自动从包含pinned=true元数据的主机中调度。2.4 创建flavor目前Nova并不支持启动时直接指定主机集合的metadata(hint只支持指定server group),需要通过flavor的extra specs配置,并与主机集合的metadata匹配,不匹配的主机将被过滤掉,不会被选择作为候选主机。flavor支持很多内置的extra specs,通过内置extra specs,可以配置虚拟机的CPU拓扑、QoS、CPU pinning策略、NUMA拓扑以及PCI passthrough等,更详细的介绍可参考官方文
11、档。这里我们只关心CPU拓扑和核绑定功能。如下是设置CPU topology的语法,自定义CPU的socket数量、core数量以及超线程数量:注意以上配置项不需要全部设置,只需要设置其中一个或者几个,剩余的值会自动计算。CPU核绑定配置语法如下:其中CPU-POLICY合法值为shared、dedicated,默认为shared,即不进行CPU核绑定,我们需要把这个值设置为dedicated。CPU-THREAD-POLICY和SMT有关,合法值为:prefer: 宿主机不一定需要符合SMT架构,如果宿主机具备SMT架构,将优先分配thread siblings。isolate: 宿主机SM
12、T架构不是必须的,如果宿主机不具备SMT架构,每个vCPU将绑定不同的pCPU,如果宿主机是SMT架构的,每个vCPU绑定不同的物理核。require: 宿主机必须满足SMT架构,每个vCPU在不同的thread siblins上分配,如果宿主机不具备SMT架构或者core的空闲thread siblings不满足请求的vCPU数量,将导致调度失败。通常设置成默认值prefer或者isolate即可。接下来开始创建flavor,设置为8个CPU、2GB内存以及20GB磁盘空间:设置CPU Policy:添加pinned相关的extra specs用于匹配主机集合metadata,保证调度时只选
13、择开启了核绑定的宿主机:配置CPU拓扑为2 sockets * 2 cores * 2 threads:查看flavor的extra specs信息:2.5 功能验证使用新创建的Flavor创建虚拟机:使用 nova show 命令查看虚拟机所在的宿主机,在该宿主机上查看虚拟机的xml文件:其中306abd22-28c5-4f91-a5ce-0dad03a35f4为虚拟机的uuid。在xml文件中可以看到如下内容:即vCPU与pCPU的绑定关系。进入虚拟机中查看CPU信息结果如下:和我们配置的结果一样(2 sockets * 2 cores * 2 threads)。在虚拟机上执行高密度计算,
14、测试的Python脚本如下:使用shell脚本同时跑50个进程,保证CPU满载运行:使用sar命令查看宿主机CPU使用情况:结果如下:从CPU使用情况看宿主机的pCPU 4-5,8-9,24-25,28-29使用率100%,并且整个过程中没有浮动,符合我们的预期结果,说明CPU核绑定成功。3 虚拟化嵌套3.1 开启虚拟化嵌套默认情况下我们创建的KVM虚拟机的CPU特性中没有包含vmx,这意味着不能在虚拟机中再创建开启KVM硬件加速的虚拟机,即不支持虚拟化嵌套。值得庆幸的是,目前除了VirtualBox(题外话:VirtualBox在9年前就有人提出要支持嵌套,只是一直没有实现,参考ticket
15、#4032),主流的hypervisor比如VMware、KVM、Xen都支持已经虚拟化嵌套。也就是说,我们可以实现在支持KVM的宿主机创建同样支持KVM的虚拟机。这里以KVM为例,首先查看系统是否开启了KVM嵌套功能:如果输出为N则表明没有开启KVM嵌套功能,可以通过修改/etc/modprobe.d/kvm-intel.conf配置文件开启该功能:重新加载kvm-intel内核模块:3.2 配置计算节点OpenStack支持虚拟化嵌套,修改计算节点的nova配置文件/etc/nova/nova.conf,设置cpu_mode = host-passthrough,然后重启nova-comp
16、ute服务即可。需要注意的是,使用host-passthrough的虚拟机迁移功能受限,只能迁移到相同配置的宿主机。4 使用virtio-scsi驱动4.1 virtio-blk VS virtio-scsi虚拟机的虚拟硬盘默认使用半虚拟化驱动virt-blk,此时硬盘在虚拟机的设备名称形如/dev/vda、/dev/vdb等。事实上,virt-blk有点老了,其本身也存在许多问题,比如:virt-blk的存储设备和PCI设备一一对应,而我们知道系统中至多可以有32个PCI总线,这说明虚拟机最多可以挂32个虚拟硬盘。virt-blk的设备名称为vda-z,而现代的物理机通常都会使用SCSI控制
17、器,设备名称为sda-z,这意味着物理机迁移到虚拟机中可能存在问题,比如fstab中使用的设备名挂载而不是uuid,系统就会起不来。如WIKI所言,virt-blk实现的指令不是标准的,并且可扩展差,实现一个新的指令,必须更新所有的guest。云计算架构模式下,为了节省存储空间,用户更倾向于使用精简置备(thin provision),virtio-blk不支持discard特性,关于discard特性后面讲。因此,建议使用virtio-scsi半虚拟化驱动代替virtio-blk,这是因为:实现的是标准的SCSI指令接口,不需要额外实现指令,在虚拟机里看到的设备名称和物理机一样(sda-z)
18、,解决了前面提到的物理机和虚拟机设备名不一样的问题。一个SCSI控制器可以接256个targets,而一个target可以接16384个LUNs,也就是说一个controller理论上可以挂载256 * 16384 = 4194304个虚拟机硬盘,这100%足够了。virtio-scsi支持直通模式(passthrough),也就是说可以把物理机的硬盘直接映射给虚拟机。virtio-scsi支持前面提到的discard特性。4.2 块设备的discard功能前面提到块设备的discard特性,这个主要和精简置备有关,就拿Ceph RBD说,我们知道当我们分配一个20GB的image时,Ceph
19、并不会真正分配20GB的存储空间,而是根据需要逐块分配,这和Linux的sparse稀疏文件的原理是一样的,这个特性节省了物理存储空间,实现了硬盘的超售。然而,Ceph只知道上层文件系统需要空间时就分配,而并不知道上层文件系统如何使用存储资源的(实际上也不关心)。而实际上,我们的文件系统肯定是频繁创建文件、删除文件的,删除文件后按理说是可以释放物理存储资源的,然而Ceph并不知道,所以不会回收,占据的存储空间会越来越多,直到空间达到真实的分配空间大小(20GB),而文件系统层可能并没有真正使用那么多空间,这就造成了存储空间利用率下降的问题。比如,我们创建了一个5GB的文件,Ceph底层会分配5
20、GB的空间,此时我们把这个5GB的文件删除,分配的这5GB空间并不会释放。好在Linux支持fstrim,如果块设备支持discard特性,文件系统会发送flush通知给底层块设备(RBD),块设备会回收空闲资源。Sbastien Han写了一篇博客关于ceph discard的,参考ceph and krbd discard。正如前面所言,virt-blk是不支持discard的,而virt-scsi支持,所以如果关心底层存储的空间利用率,建议使用virt-scsi,并在挂载设备中指定discard参数(或者写到fstab中):但是需要注意的是,任何事物都具有两面性,既有优点,也存在缺点:v
21、irio-scsi相对virtio-blkIO路径会更复杂,性能可能会有所下降,参考virtio-blk vs virtio-scsi。通过mount命令挂载虚拟硬盘时开启discard特性会降低文件系统的读写性能。4.3 OpenStack使用virtio-scsi驱动前面讲了那么多关于virio-blk以及virtio-scsi,那怎么在OpenStack中使用virtio-scsi呢?很简单,只需要设置Glance镜像的property就可以了:通过这个配置不仅使根磁盘会使用virtio-scsi驱动,挂载新的Cinder volume也会默认使用virtio-scsi驱动。需要注意的是
22、,制作OpenStack镜像时一定要保证initrd中包含virtio-scsi驱动,否则操作系统会由于在初始化时不识别SCSI块设备导致启动失败:如果镜像的initrd没有virtio驱动,可以编辑/etc/sysconfig/kernel文件,配置INITRD_MODULES参数:然后重新生成initrd文件:启动虚拟机后,如果根硬盘的设备名称为/dev/sda,则说明使用的是virtio-scsi驱动。5 使用qemu-guest-agent5.1 qemu-guest-agent简介我们都知道OpenStack虚拟机启动时是通过cloud-init完成初始化配置的,比如网卡配置、主机名
23、配置、注入用户密码等。而虚拟机启动之后处于运行状态时,外部如何与虚拟机通信呢,这就是qemu-guest-agent要完成的事,这其实在如何构建OpenStack镜像(该文可点击到专栏阅读)一文中已经介绍过,这里直接搬过来。qemu-guest-agent是运行在虚拟机的一个daemon服务,libvirt会在宿主机本地创建一个unix socket,并模拟为虚拟机内部的一个串口设备,从而实现了宿主机与虚拟机通信,这种方式不依赖于TCP/IP网络。如下是开启qemu-guest-agent的虚拟机xml配置信息:以上宿主机的socket文件为org.qemu.guest_agent.0.ins
24、tance-00003c2c.sock,在虚拟机内部映射为/dev/virtio-ports/org.qemu.guest_agent.0。通过这种方式,宿主机只要发送指令到该socket文件中就会在虚拟机对应的串口设备中收到,虚拟机内部的qemu-guest-agent会轮询查看这个串行设备是否有指令,一旦接收到指令就可以执行对应的脚本,从而实现了宿主机控制虚拟机执行命令的功能,其中最常用的指令就是通过libvirt修改虚拟机密码。更多关于qemu-guest-agent请参考官方文档。5.2 在OpenStack中应用首先在制作镜像时需要安装qemu-guest-agent服务:在glan
25、ce镜像中添加hw_qemu_guest_agentproperty:可以通过Nova的nova set-password 子命令验证修改虚拟机的密码功能。需要注意的是,Nova默认修改的是管理员用户的密码,Linux系统为root,Windows系统为Administrator,因此上传镜像时需要指明镜像是什么操作系统类型:当然你也可以通过os_admin_user属性配置修改其他用户的密码,比如配置修改密码时指定用户不是root,而是ubuntu用户:6 网卡多队列默认情况下网卡中断由单个CPU处理,当有大量网络包时单个CPU处理网络中断就可能会出现瓶颈。通过网卡多队列技术可以把网卡的中断
26、分摊到多个CPU中。阿里云官方文档测试表明在网络PPS和网络带宽的测试中,与1个队列相比,2个队列最多可提升50%到1倍,4个队列的性能提升更大。OpenStack支持配置网卡多队列(要求内核版本大于3.0),配置方法如下:队列长度固定为虚拟机的核数。创建虚拟机查看网卡信息:网卡信息表明支持的最大队列(Combined)为2,目前设置为1,可以通过ethtool工具修改配置:为了保证中断自动均衡到所有的CPU,建议开启irqbalance服务:7 watchdog在一些分布式集群中,我们可能期望虚拟机crash时自动关机,防止出现集群脑裂。或者当负载过高时自动执行重启,使服务恢复正常。OpenStack支持配置虚拟watchdog,首先制作镜像时需要安装并开启watchdog服务:配置如下glance image属性:其中支持的action列表如下:rese
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025云南省建筑安全员考试题库附答案
- 贵州大学《计算机艺术设计》2023-2024学年第一学期期末试卷
- 贵州财经大学《土木工程施工与组织管理》2023-2024学年第一学期期末试卷
- 贵阳幼儿师范高等专科学校《城市交通系统》2023-2024学年第一学期期末试卷
- 2025辽宁省建筑安全员考试题库及答案
- 2025年湖南省建筑安全员知识题库及答案
- 2025山西建筑安全员《B证》考试题库及答案
- 硅湖职业技术学院《计算机辅助设计一》2023-2024学年第一学期期末试卷
- 2025年陕西省建筑安全员C证考试(专职安全员)题库附答案
- 广州幼儿师范高等专科学校《科技文献检索(理工)》2023-2024学年第一学期期末试卷
- 二甲双胍恩格列净片(Ⅲ)-临床用药解读
- 煤层应力状态及煤与瓦斯突出防治研究
- 小学五年级上册数学基础知识练习题带答案
- 诊所聘用医生合作协议书
- 抖音认证承诺函
- 药物分离纯化-药物分离纯化技术的作用
- 《精益生产培训》课件
- GB/T 3518-2023鳞片石墨
- 22G101三维立体彩色图集
- MQL4命令中文详解手册
- 水平井施工方案及措施
评论
0/150
提交评论