Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
docs
提交
7459f612
D
docs
项目概览
openeuler
/
docs
通知
6
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7459f612
编写于
8月 29, 2020
作者:
O
openeuler-ci-bot
提交者:
Gitee
8月 29, 2020
浏览文件
操作
浏览文件
下载
差异文件
!183 Add docs for qemu cpu and memory hotplug
Merge pull request !183 from FangYing/master
上级
e54f3b4b
5ff0bb7c
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
134 addition
and
0 deletion
+134
-0
content/zh/docs/Virtualization/管理系统资源.md
content/zh/docs/Virtualization/管理系统资源.md
+134
-0
未找到文件。
content/zh/docs/Virtualization/管理系统资源.md
浏览文件 @
7459f612
...
...
@@ -13,10 +13,12 @@
-
[
CPU份额
](
#CPU份额
)
-
[
绑定QEMU进程至物理CPU
](
#绑定QEMU进程至物理CPU
)
-
[
调整虚拟CPU绑定关系
](
#调整虚拟CPU绑定关系
)
-
[
CPU热插
](
#CPU热插
)
-
[
管理虚拟内存
](
#管理虚拟内存
)
-
[
NUMA简介
](
#NUMA简介
)
-
[
配置Host NUMA
](
#配置Host-NUMA
)
-
[
配置Guest NUMA
](
#配置Guest-NUMA
)
-
[
内存热插
](
#内存热插
)
<!-- /TOC -->
...
...
@@ -207,6 +209,63 @@ QEMU主进程绑定特性是将QEMU主进程绑定到特定的物理CPU范围内
以上命令把虚拟机_open__Euler__VM_的vCPU0绑定到物理CPU0、2、3上,即限制了vCPU0只在这三个物理CPU上调度。**这一绑定关系的调整不会立即生效,在虚拟机下一次启动后才生效,并持久生效**。
### CPU热插
#### 概述
在线调整(热插)虚拟机CPU是指在虚拟机处于运行状态下,为虚拟机热插CPU而不影响虚拟机正常运行的方案。当虚拟机内部业务压力不断增大,会出现所有CPU均处于较高负载的情形。为了不影响虚拟机内的正常业务运行,可以使用CPU在线调整(热插)特性,在不关闭虚拟机情况下增加虚拟机的CPU数目,提升虚拟机的计算能力。
#### 约束限制
-
创建虚拟机的时候,指定的主板类型(machine)需为virt-4.1版本及以上。
-
在配置Guest NUMA的场景中,必须把属于同一个socket的vcpu配置在同一vNode中,否则在热插CPU后可能导致虚拟机softlockup,进而可能导致panic。
-
迁移、休眠唤醒、快照过程中均不支持虚拟机CPU热插。
-
CPU热插同时受限于Hypervisor和GuestOS支持的最大CPU数目。
-
虚拟机启动、关闭、重启过程中可能出现热插CPU失效的情况,但再次重启会生效。
-
热插虚拟机CPU的时候,如果新增CPU数目不是虚拟机CPU拓扑配置项中Cores的整数倍,可能会导致虚拟机内部看到的CPU拓扑是混乱的,强烈建议每次新增的CPU数目为Cores的整数倍。
-
若需要热插CPU在线生效且在虚拟机重启后仍有效,virsh setvcpus接口中需要同时传入--config和--live选项, 将热插CPU动作持久化。
#### 操作步骤
-
创建虚拟机时配置指定的模板
配置指定虚拟机当前的CPU数目和所支持热插的最大CPU数目上限,同时指定machine类型为virt-4.1及以上 (目前virt machine类型最高为4.1)。
```
<vcpu placement='static' current='m'>n</vcpu>
<os>
<type arch='aarch64' machine='virt-4.1'>hvm</type>
</os>
```
其中,m为虚拟机当前CPU数目,n为虚拟机支持热插到的最大CPU数目,且满足n大于或等于m。例如,配一个虚拟机当前CPU数目为4,最大支持的热插CPU上限为64的XML配置为:
```
<vcpu placement='static' current='4'>64</vcpu>
<os>
<type arch='aarch64' machine='virt-4.1'>hvm</type>
</os>
```
>![](public_sys-resources/icon-note.gif) **说明:**
> placement的值必须是static;当前CPU数目是虚拟机启动后默认的CPU数目;热插CPU数目上限是虚拟机CPU热插能到达的上限值,该值不能超过Hypervisor支持的虚拟机最大CPU规格及GuestOS支持的最大CPU规格。
-
使用virsh命令执行虚拟机CPU热插操作
virsh进行虚拟机CPU热插操作的命令为virsh setvcpus,具体格式如下:
```
virsh setvcpus <domain> <count> [--config] [--live]
domain: 参数,必填。指定虚拟机名称。
count: 参数,必填。指定目标CPU数量。
--config: 选项,选填。下次启动时仍有效。
--live: 选项,选填。在线生效。
```
>![](public_sys-resources/icon-note.gif) **说明:**
> CPU上线依赖虚拟机内部操作,故CPU热插后需要Guest内部实现CPU自动上线或手动上线。
## 管理虚拟内存
### NUMA简介
...
...
@@ -297,3 +356,78 @@ NUMA(Non Uniform Memory Access Architecture) 模式是一种分布式存储
> - <numatune\>中的“cellid”和<numa\>中的“cell id”是对应的;“mode”可以配置为“strict”(严格从指定node上申请内存,内存不够则失败)、“preferred”(优先从某一node上申请内存,如果不够则从其他node上申请)、“interleave”(从指定的node上交叉申请内存);“nodeset”表示指定物理NUMA NODE。
> - <cputune\>中需要将同一cell id中的vCPU绑定到与memnode相同的物理NUMA NODE上。
### 内存热插
#### 概述
在虚拟化场景下,虚拟机的内存、CPU、外部设备都是软件模拟呈现的,因此可以在虚拟化底层为虚拟机提供内存在线调整的能力。当前openEuler版本支持在线给虚拟机添加内存,当虚拟机出现物理内存不足又无法关闭虚拟机的时候,可以使用此特性增加虚拟机的物理内存资源。
#### 约束限制
-
创建虚拟机的时候,指定的主板类型(machine)需为virt-4.1版本及以上。
-
内存热插特性依赖于Guest NUMA,虚拟机必须配置Guest NUMA,否则无法完成内存热插流程。
-
热插内存时候必须指定新增内存所属的Gust NUMA node编号,否则内存热插失败。
-
虚拟机内核必须支持内存热插能力,否则虚拟机无法识别新增内存或者无法上线内存。
-
配置使用大页的虚拟机,热插内存的容量必须是系统hugepagesz的整数倍,否则会导致热插失败。
-
热插内存的大小必须为Guest物理内存块大小block_size_bytes的整数倍,否则无法正常上线。在Guest内部执行lsmem可以获取block_size_bytes大小。
-
配置n个virtio-net网卡后,最大可热插次数取值为min{max_slot, 64 - n},原因是要给网卡预留slot。
-
vhost-user设备和内存热插特性互斥。配置了vhost-user设备的虚拟机不支持内存热插;内存热插后,不支持虚拟机热插vhost-user设备。
-
如果虚拟机操作系统为Linux系列,请确保初始内存大于等于4GB。
-
如果虚拟机操作系统为Windows类型,第一次热插内存必须指定到Guest NUMA node0上,否则热插内存无法被虚拟机识别。
-
在直通场景下,由于需要预先分配内存,因此启动和热插内存都比普通虚拟机要慢(尤其是大规格虚拟机),属于正常现象。
-
建议虚拟机可用内存与热插内存的比例至少为1:32,即热插32G内存虚拟机至少需要有1G可用内存,如果低于该比例可能会导致虚拟机卡死。
-
热插内存是否自动上线取决于虚拟机操作系统自身逻辑,可以手动上线或者配置udev规则自动上线。
#### 操作步骤
在虚拟机创建时候配可热插内存最大范围,预留槽位号,并配置Guest NUMA拓扑结构。
-
创建虚拟机,预留内存热插槽位
```
<memory unit='GiB'>32</memory>
<maxMemory slots='256' unit='GiB'>1024</maxMemory>
<cpu mode='host-passthrough' check='none'>
<topology sockets='2' cores='2' threads='1'/>
<numa>
<cell id='0' cpus='0-1' memory='16' unit='GiB'/>
<cell id='1' cpus='2-3' memory='16' unit='GiB'/>
</numa>
</cpu>
```
上述xml表示为虚拟机配置32G初始内存,预留256个槽位号,最大支持1TB内存上限,2个NUMA node的配置为:
>![](public_sys-resources/icon-note.gif) **说明:**
>其中:
>- maxMemory字段中slots号表示预留的内存插槽,最大为256;
>- maxMemory表示虚拟机支持的最大物理内存上限;
>- Guest NUMA配置请参考配置Guest NUMA相关章节。
-
准备内存描述xml文件
```
<memory model='dimm'>
<target>
<size unit='MiB'>1024</size>
<node>0</node>
</target></memory>
```
-
使用virsh attach-device接口为虚拟机热插内存
```
# virsh attach-device openEulerVM memory.xml --live
```
上述命令行中memory.xml是热插内存的描述文件,可选参数--live表示在线生效,也可以加--config表示将热插内存持久化到虚拟机xml文件中。
-
热插内存上线
使用shell脚本来完成内存上线的方法为:
```
for i in `grep -l offline /sys/devices/system/memory/memory*/state`
do
echo online > $i
done
```
也可以使用udev rules自动完成内存上线。编辑udev rules创建文件/etc/udev/rules.d/99-hotplug-memory.rules
```
# automatically online hot-plugged memoryACTION=="add", SUBSYSTEM=="memory", ATTR{state}="online"
```
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录