Openstack中的虚拟机的cpu绑定
时间:2022-06-13
本文章向大家介绍Openstack中的虚拟机的cpu绑定,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
vcpu绑定配置
# vim /etc/nova/nova.conf
[DEFAULT]
vcpu_pin_set = 4-12,^8,15
重启nova服务,所有实例只能跑在CPUs 4,5,6,7,9,10,11,12,15上。
设置cpu绑定策略
flavor extra specs:
hw:cpu_policy=shared|dedicated hw:cpu_threads_policy=avoid|separate|isolate|prefer
属性配置说明参见:http://specs.openstack.org/openstack/nova-specs/specs/kilo/implemented/virt-driver-cpu-pinning.html
也就是说这个所谓的绑定,并不是让用户显式的将一个vcpu绑定到某一物理cpu上,openstack不会暴露给用户物理cpu的layout信息;它的使用只是由用户指定绑定选项dedicated,并制定绑定策略,由nova来通过一系列调度具体选择绑定某个vcpu到某一pcpu上。使用方法一般是建两个host-aggregate,一个叫cpu_pinning,一个叫normal,两个aggregate加入不同物理机,有绑定需求的虚机使用cpu_pinning这个aggregate中的物理机建虚机。不会将有绑定需求和没有绑定需求的cpu放在同一个物理机上
也可以通过修改虚拟机XML配置文件制定vcpu绑定到某一个具体的pcpu
手动修改cpu绑定
修改虚拟机XML配置文件:
<vcpu placement='static' cpuset='0'>1</vcpu>
...
<topology sockets='1' cores='1' threads='1'/>
# virsh vcpupin instance-00008205
VCPU: CPU Affinity
----------------------------------
0: 0
# virsh vcpuinfo instance-00008205
VCPU: 0
CPU: 0
State: running
CPU time: 7.7s
CPU Affinity: y---------------
<vcpu placement='static' cpuset='0,2,4,10,12'>5</vcpu>
<cputune>
<vcpupin vcpu='0' cpuset='0'/>
<vcpupin vcpu='1' cpuset='2'/>
<vcpupin vcpu='2' cpuset='12'/>
<vcpupin vcpu='3' cpuset='10'/>
<vcpupin vcpu='4' cpuset='4'/>
</cputune>
<topology sockets='1' cores='5' threads='1'/>
# virsh vcpupin instance-00008205
VCPU: CPU Affinity
----------------------------------
0: 0
1: 2
2: 12
3: 10
4: 4
# virsh vcpuinfo instance-00008205
VCPU: 0
CPU: 0
State: running
CPU time: 35.4s
CPU Affinity: y---------------
VCPU: 1
CPU: 2
State: running
CPU Affinity: --y-------------
VCPU: 2
CPU: 12
State: running
CPU Affinity: ------------y---
VCPU: 3
CPU: 10
State: running
CPU Affinity: ----------y-----
VCPU: 4
CPU: 4
State: running
CPU Affinity: ----y-----------
自动修改cpu绑定
# 通过修改虚拟机xml配置文件,制定vcpu和pcpu的绑定关系
ssh_client = SSHClient(ip, user, password)
cputune_subxml = ""
cpuset = []
for cpu_pin in cpu_pin_info:
cpu_pin_xml = ("<vcpupin vcpu='%s' cpuset='%s'/>"
% (cpu_pin[0], cpu_pin[1]))
cputune_subxml += cpu_pin_xml
cpuset.append(str(cpu_pin[1]))
sed_command = ("s|<vcpu placement=.*$|"
"<vcpu placement='static' cpuset='%s'>%s</vcpu>|g;"
"s|<topology sockets=.*$|"
"<topology sockets='1' cores='%s' threads='1'/>|g;"
% (",".join(cpuset), len(cpu_pin_info),
len(cpu_pin_info)))
if cputune_subxml:
sed_command += ("/<cputune>/,/<\/cputune>/d;")
sed_command += ("/<vcpu placement/a\<cputune>%s<\/cputune>"
% cputune_subxml)
command = ("EDITOR="sed -i \"%s\"" virsh edit %s"
% (sed_command, instance_name))
LOG.debug("Set cpu pinnig. command=%s" % command)
ssh_client.exec_command(command)
- 撩妹必备,3行代码伪造出一个“好莱坞黑客”屏幕
- [译]Laravel 5.0 之事件调度程序 (定时任务)
- Laravel 5.5 在浏览器中渲染 Mailable 类型
- Laravel 5.4 及 5.5 中的全新字符串辅助方法
- Laravel 5.5 的自定义验证对象/类
- Laravel 5.5 为响应请求提供的可响应接口
- Laravel 5.5 为 Mailables 类型新增 theme 属性
- Laravel 5.5 的 “vendor:publish” 新增 provider 提示
- 3秒钟,用python破解加密PDF|附工具地址
- [译]Laravel 5.0 之云存储驱动
- [译]Laravel 5.0 之自定义错误页面
- 使用Google的Quickdraw创建MNIST样式数据集!
- CentOS 7 开启 BBR 加速
- 开源项目Minio:提供非结构化数据储存服务
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python 图像插值 最近邻、双线性、双三次实例
- tp5(thinkPHP5)框架实现多数据库查询的方法
- Python-openCV开运算实例
- php curl获取https页面内容,不直接输出返回结果的设置方法
- 详解php中curl返回false的解决办法
- Pytorch mask-rcnn 实现细节分享
- pytorch中的weight-initilzation用法
- python安装读取grib库总结(推荐)
- PHP5.5新特性之yield理解与用法实例分析
- php如何利用pecl安装mongodb扩展详解
- PHP微信支付结果通知与回调策略分析
- PHP标准库(PHP SPL)详解
- php成功操作redis cluster集群的实例教程
- 在pytorch中动态调整优化器的学习率方式
- 可视化pytorch 模型中不同BN层的running mean曲线实例