使用默认参数创建的虚拟机,虚拟机的VCPU在物理CPU不同核心之间动态调度,另外,由于Linux还可能会将软中断,内存交换等进程调度到虚拟机正在使用的物理核心上,这些因素导致这些虚拟机相对于物理机的计算性能可能会产生较大的抖动,不能满足一些对计算SLA要求很严格的业务,比如,很多金融业务就要求99.999%的请求处理时间延时不得高于1毫秒。

高性能虚拟机

为了减少 Linux 和 Hypervisor 对虚拟机的影响,让虚拟机的性能接近物理机,一般可以采用如下优化手段:

1.CPU 绑核(pin):将虚拟 CPU 和物理 CPU 逐一绑定起来,这样不同虚拟机的VCPU各自运行在不同的物理核心上,不会相互影响。

2.CPU隔离(isolate):将虚拟机使用的物理 CPU 从 Linux 隔离出来,Linux Kernel 不再调度任何应用甚至是任何系统进程到这些 CPU 上,尽量让这些CPU 100%为虚拟机使用。

3.CPU拓扑(Topology): CPU 分配尽量不要跨 NUMA ,如果必须要跨NUMA,将 NUMA 拓扑结构呈现给 Guest OS ,同时也把 SMT 拓扑结构呈现给 Guest OS 。

OpenStack 环境

1.OpenStack Mitaka:Mitaka 现在运行的很好, 新版本的 Cell 机制甚至会导致一些不可预料的结果,我们一直没有冒险去做升级投入。

2.CentOS 7.3:OpenStack Mitaka 在 CentOS 7.4 的 repo 里面已经找不到了,应该是停止支持了,由于担心一些不必要的包依赖问题,我们继续使用 CentOS 7.3 。

3.QEMU: CentOS 7默认的qemu 1.5版本非常老,会导致compute节点的resource_tracker不能上报numa_topology到controller节点,导致NUMATopologyFilter无法调度,所以必须升级到2.6。

升级qemu到2.6

计算节点配置

使用numactl查看下主机的numa拓扑结构,比如下面的输出说明 cpu 0-3 在一个numa node上,而 cpu 4-7 在另一个 numa node 上:

numactl --hardware

比如,我们希望将2,3, 6,7隔离出来,专门给虚拟机用,尽量让Linux不要将任何用户进程和系统进程调度到这些cpu上。

首先,编辑/etc/nova/nova.conf, 配置这台主机能用来创建VM的cpu为2,3,6,7:

vcpu_pin_set=2,3,6,7

然后,编辑/boot/grub/grub.conf:

grub.conf

1.isolcpus:不要将任何应用和系统进程(softirq, swap.……)调度到指定的CPU上;

2.nohzfull: 指定的CPU上没有时钟中断;

3.rcunocbs:不要在指定的CPU上调度执行rcb callbacks;

最后,重启主机生效。

控制节点配置

修改/etc/nova/nova.conf, 将调度过滤器NUMATopologyFilter加入到scheduler_default_filters:

scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,CoreFilter,NUMATopologyFilter

然后,重启nova-scheduler服务

systemctl restart openstack-nova-scheduler.service

创建支持cpu pin的flavor:

openstack flavor set m1.large --property hw:cpu_policy=dedicated --property hw:cpu_thread_policy=require

CPU-POLICY :

1.shared: (默认)VCPU会在PCPU上任意漂移;

2.dedicated: VCPU会绑定在指定的PCPU上;

3.CPU-THREAD-POLICY :

4.prefer: (默认) VCPU会优先选择同一核心上的超线程。

5.isolate: VCPU会选用不同核心的超线程。

6.require: VCPU优先选择同一核心上的超线程,如果主机的BIOS超线程没有开启,就会报告失败。

除了hw:cpu_policy和hw:cpu_thread_policy,这里还可以定义hw:numa_nodes,hw:numa_cpus.N,hw:numa_mem.N等NUMA策略。

用指定的flavor创建虚拟机:

openstack server create --image cirros --nic net-id=provider-net --flavor m1.large instance-001

验证

在计算节点上使用virsh dumpxml domID观察虚拟机,输出的xml应该包括类似下面的内容:

virsh dumpxml

你创建的OpenStack高性能虚拟机能实现“零损耗”么?的更多相关文章

  1. OpenStack 高性能虚拟机之大页内存

    目录 文章目录 目录 前文列表 虚拟存储器系统 页式虚拟存储器 大页内存 Linux 的大页内存 大页的实现原理 大页内存配置 透明巨型页 THP 大页面对内存的影响 Nova 虚拟机的大页内存设置 ...

  2. ##8.创建虚拟机-- openstack pike

    ##8. openstack创建虚拟机 openstack pike 安装 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html ##.创建虚拟机.txt.s ...

  3. 主机和虚拟机能相互ping通但是不能复制

    1.本机能ping通虚拟机 2.虚拟机也能ping通本机 3.虚拟机能访问自己的web 4.本机无法访问虚拟己的web 后来发现是防火墙将80端口屏蔽了的缘故. 检查是不是服务器的80端口被防火墙堵了 ...

  4. 1.5.3、CDH 搭建Hadoop在安装之前(定制安装解决方案---创建群集主机的虚拟映像)

    创建群集主机的虚拟映像 您可以使用预先部署的Cloudera软件创建虚拟机映像,例如PXE启动映像,Amazon AMI和Azure VM映像,这些映像可用于快速启动虚拟机.这些图像使用parcel来 ...

  5. 解决:虚拟机能ping通主机,主机ping不通虚拟机

    问题:虚拟机能ping通主机,主机ping不通虚拟机 解决方法: 1. 使用桥接. 2. 关闭防火墙.

  6. 如何解决OpenStack创建虚拟机或删除虚拟机时一直处于deleting或者creating状态的问题(转载)

    原文地址:http://www.cnblogs.com/robertoji/p/4968280.html 在OpenStack使用时,有时候会遇到创建虚拟机或者删除虚拟机无法成功创建或者删除的时候,一 ...

  7. VMware14 安装CentOS7 实现宿主机ping通虚拟机、虚拟机ping通宿主机、虚拟机能上网且能ping通百度

    本文旨在通过通过虚拟机VMware14来安装CentOS7 系统,并配置固定IP来实现在Windows系统中使用Linux环境. 本文目录: 0.本机环境 1.VMware14 初始化 1.1.安装V ...

  8. 创建python3.6的虚拟开发环境virtualenv

    为了保证各个项目环境和插件的相对独立,使用virtualenv作为python的虚拟运行环境,这样在项目维护方面,减少在依赖包上所花费的时间. 1.安装 virtualenv虚拟环境插件 pip in ...

  9. pythonWeb框架创建app模块以及虚拟环境管理工具

    在进行项目搭建的时候,如果有多个功能模块,以及多个网页地址时,为了系统的可维护性,以及易读性,我们大多数情况下选择模块化开发 所以我们就要使用app指令来创建不同的功能模块 首先项目框架如下: 接下来 ...

随机推荐

  1. Linux下安装CollabNetSubversionEdge

    1.首先下载CollabNet Subversion,目前最新版本Subversion Edge 5.2.2 (Linux 64-bit),注意下载的时候需要注册下账号,才允许下载: 2.安装Coll ...

  2. HDU3501——欧拉函数裸题

    给整数N(1 ≤ N ≤ 1000000000),求小于N的与N不互素的所有正整数的和. 思路:1.用欧拉函数求出小于N的与N互素的正整数的个数: 2.若 p 与 N 互素,则 N-p 必与 N 互素 ...

  3. Hbase Shell命令详解+API操作

    HBase Shell 操作 3.1 基本操作1.进入 HBase 客户端命令行,在hbase-2.1.3目录下 bin/hbase shell 2.查看帮助命令 hbase(main):001:0& ...

  4. Pyhanlp自然语言处理中的新词识别

    新词发现 本“新词发现”模块基于信息熵和互信息两种算法,可以在无语料的情况下提取一段长文本中的词语,并支持过滤掉系统中已存在的“旧词”,得到新词列表. 调用方法 静态方法 一句话静态调用接口已经封装到 ...

  5. minicom的安装及配置

    1. sudo apt-get install minicom 2. 配置 (1). sudo minicom –s (2). (3). 按“A”配置设备,再按回车保存.按”F”,把留空改为NO.回车 ...

  6. php Pthread 多线程基本介绍

    我们可以通过安装Pthread扩展来让PHP支持多线程.   线程,有时称为轻量级进程,是程序执行的最小单元.线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,它与同属 ...

  7. 【java】标示符

    java的标示符由数字0-9,字母a-zA-Z,_$组成.(java是严格区分大小写的) 标示符的规则: 1.不能以数字开头 2.不能使用关键字 一般的命名规则: 包名:多个单词组成时,所有字母全部小 ...

  8. 使用zlib来压缩文件-用delphi描述

    今天用到压缩文件的问题,找了一些网上的资料,后来发现了delphi自身所带的zlib单元,根据例子稍微改变了一些,使它能够符合所有的格式. 使用时,需要Zlib.pas和 Zlibconst.pas两 ...

  9. responsiveslides 插件(图片轮播插件)

    参数详解: $(".rslides").responsiveSlides({ auto: true, // Boolean: 设置是否自动播放, true or false spe ...

  10. oracle--合并行数据

    select to_char(wmsys.wm_concat(patname)) as WaitPatientName from (SELECT * FROM (SELECT ROW_NUMBER() ...