|
Hypervisor 的概念
Hypervisor 是一种运行在基础物理服务器和操作系统之间的 中间软件 层 , 可允许多个操作系统和应用共享硬件。Hypervisor 不但协调着这些硬件资源的访问,也同时在各个虚拟机之间施加防护。
下图是 IBM Power7 服务器的硬件架构逻辑图。从图中可以看出,Hypervisor 位于服务器硬件之上,分区之下。IBM PowerVM 产品是基于 Hypervisor 层的。
图 1.IBM Power7 服务器硬件逻辑架构
IBM Power 服务器中保留内存的区域
IBM Power 服务器中,Hypervisor 会保留一部分内存,这部分内存分为三部分,它们分别是:
用于系统管理的区域、用于分区页面表(Partition page tables)和转换控制表 (Translation control entry)的保留区域 。这三个内存区域在逻辑分区的内存之外,不在逻辑分区的内存中分配。
用于系统管理的内存保留区域
在分区环境下,Hypervisor 被加载到物理内存中地址为 0 的第一个物理内存块上,这是专为 Hypervisor 区域保留的地址。Hypervisor 主要用于完成分区环境下的虚拟内存管理、调试寄存器和内存访问、以及提供对分区虚拟终端的支持。尽管 Hypervisor 不会占用这一整块内存空间,但是第一块物理内存块一定要保留,不能为任何分区所占用。
用于转换控制表(Translation control entry)的内存保留区域
在分区环境中,操作系统使用 Hypervisor 服务来控制转换控制表。操作系统负责将所要用的 I/O 总线地址转换成分区中逻辑设备的映射,Hypervisor 负责将其进一步转换成在转换控制表表中物理设备的映射。Hypervisor 需要为转换控制表保留一专用的内存区域,使得分区在进行直接内存存取 (Direct Memory Access) 操作时能将逻辑 I/O 地址直接转换成所对应的 PCI 卡。
用于分区页面表的内存保留区域
AIX 的虚拟内存管理使用高级系统管理服务(Hypervisor services)来管理分区页面表分区页面表。AIX 中的虚拟内存管理进行虚拟地址到分区逻辑内存地址的映射,Hypervisor 服务在分区页面表(partition page tables) 中进行到服务器物理内存地址的映射。
分区页面表不占用逻辑分区中逻辑内存空间,它是分区逻辑内存之外的一段物理内存空间,是每一个逻辑分区进行操作所必需的额外内存。
在 HMC 中,我们可以通过查看分区内存属性查看 Hypervisor 占用的内存。
图 2.HMC 上查看保留内存
回页首
创建分区之前
以 Power770 为例,48C/386G 内存。将服务器加电以后,先不创建任何分区,如下图:
此时,我们查看 Hypervisor 保留内存的大小:
其中,2.75G 是 Hypervisor 预留内存的大小,“已分配给分区”表示目前没有内存被分区使用。
不激活分区的情况下
在 P770 上创建期望内存为 1G,最大内存为 2G 的分区,为了找到详细的对应关系以及转折点,分区一个一个创建。
首先使用 ssh 工具,登陆到 HMC 上。
然后,输入 vtmenu, 找出这台 P770 对应的编号,为了避免泄露 IBM 公司机密,序列号部分被擦除:
从上图可以看出,我们使用的服务器对应的编号是 40.
在上图的位置输入 40,提示符依旧,并未切换到类似如下界面,说明此台服务器还未创建分区:
我们使用如下命令创建分区,分区的名字定为 test1,期望内存为 1G,最大内存为 2G,期望 CPU 和最大 CPU 数量均为 1:
mksyscfg -r lpar -m SVRP7770-02 -i "name=test1,profile_name=Normal, lpar_env=aixlinux,min_mem=1024,desired_mem=1024,max_mem=2048,proc_mode=ded,min_procs=1, desired_procs=1,max_procs=1,sharing_mode=share_idle_procs,auto_start=1,boot_mode=norm"
分区创建成功以后,先不激活分区,查看 Hypervisor 占用的内存没有变,依然为 2.75G
下面,采取同样的办法,再次创建一个分区,并且不激活,
mksyscfg -r lpar -m SVRP7770-02 -i "name=test2,profile_name=Normal, lpar_env=aixlinux,min_mem=1024,desired_mem=1024,max_mem=2048,proc_mode=ded,min_procs=1, desired_procs=1,max_procs=1,sharing_mode=share_idle_procs,auto_start=1,boot_mode=norm”
然后查看 Hypervisor 占用的内存,依然是 2.75G
此时,我们通过 HMC 命令可以看到 P770 上已经有两个分区:
创建第三个分区,test3:
mksyscfg -r lpar -m SVRP7770-02 -i "name=test2,profile_name=Normal, lpar_env=aixlinux,min_mem=1024,desired_mem=1024,max_mem=2048,proc_mode=ded,min_procs=1, desired_procs=1,max_procs=1,sharing_mode=share_idle_procs,auto_start=1,boot_mode=norm”
第三个分区创建完毕以后,查看 Hypervisor 占用的内存 , 发现这个数值已经从 2.75G 增长到 3.0G,增长了 0.25G:
按照上面的方法,我们继续一个个分区依次创建,并且不进行激活,在创建到第 40 个分区的时候:
查看 Hypervisor 所占用的内存依然是 3.0G:
创建第 35 个分区:
mksyscfg -r lpar -m SVRP7770-02-SN1007C1P -i "name=test35,profile_name=Normal, lpar_env=aixlinux,min_mem=1024,desired_mem=1024,max_mem=1024,proc_mode=ded,min_procs=1, desired_procs=1,max_procs=1,sharing_mode=share_idle_procs,auto_start=1,boot_mode=norm"
第 35 个分区创建成功以后,查看 Hypervisor 所占用的内存,已经增加到 3.25G:
也就是说从 3G 到 3.25G 的 Hypervisor 所增加的内存占用 256M,是由于创建从 test3-test34 这 32 个分区所引起的,所以,在不激活的前提下,每新创建一个期望内存 1G,最大内存 2G 的分区,会增加 Hypervisor 内存占用 8MB 的增长。
创建一个分区所带来的 Hypervisor 内存开销:256MB/32=8MB
分区期望内存与内存开销的倍数关系:1024MB/8MB=128
分区最大内存与内存开销的倍数关系:2048MB/8MB=256
为了确认这个倍数关系,我们再创建 28 个分区(test36-test63),并且不激活,确保 Hypervisor 占用的内存依然是 3.25G:
创建第 64 个分区:
mksyscfg -r lpar -m SVRP7770-02-SN1007C1P -i "name=test64,profile_name=Normal, lpar_env=aixlinux,min_mem=1024,desired_mem=1024,max_mem=2048,proc_mode=ded,min_procs=1, desired_procs=1,max_procs=1,sharing_mode=share_idle_procs,auto_start=1,boot_mode=norm"
不激活分区,查看 Hypervisor 占用的内存,已经增加到 3.5G:
也就是说从 3.25G 到 3.5G 的 Hypervisor 所增加的内存占用 256M,是由于创建从 test35-test63 这 29 个分区所引起的 , 所以,在不激活的前提下,每新创建一个期望内存 1G,最大内存 2G 的分区,会增加 Hypervisor 内存占用 8.8MB 的增长。这与之前的实验验证出来的结果基本符合。
我们将 test64 删除,使 Hypervisor 所占用内存为 3.25G,然后继续下面的实验:
为了验证数据的准确性,继续创建期望内存 2G,最大内存 4G 的分区。
mksyscfg -r lpar -m SVRP7770-02-SN1007C1P -i "name=test64,profile_name=Normal, lpar_env=aixlinux,min_mem=1024,desired_mem=2048,max_mem=4096,proc_mode=ded,min_procs=1, desired_procs=1,max_procs=1,sharing_mode=share_idle_procs,auto_start=1,boot_mode=norm"
第 64 个分区创建成功以后,Hypervisor 所占用内存增加到 3.5G
按照上面的方法,依次建立分区,找出使 Hypervisor 所占用内存增加到 3.75G 的转折点。
当创建完第 67 个分区的时候 Hypervisor 所占用内存依然是 3.5G:
创建第 68 个分区以后,Hypervisor 所占用内存增加到 3.75G
也就是说从 3.5G 到 3.75G 的 Hypervisor 所增加的内存占用 256M,是由于创建从 test64-test67 这 4 个分区所引起的,所以,在不激活的前提下,每新创建一个期望内存 2G,最大内存 4G 的分区,会增加 Hypervisor 内存占用 64MB 的增长。
创建一个分区所带来的 Hypervisor 内存开销:256MB/4=64MB
分区期望内存与内存开销的倍数关系:2048MB/64MB=32
分区最大内存与内存开销的倍数关系:4096MB/64MB=64
回页首
总结
- 在本试验中,Hypervisor reserved memory 增加的内存是以 256MB 的倍数增加的,如 256MB,512MB,1024MB 等,这是 Hypervisor Logical Memory Block 的大小设置;
- 在分区不激活的情况下,分区设置的最大内存越大,带来的 Hypervisor 内存开销越大;
- 在激活分区时,分区最大内存的数值越大,激活分区所带来的 Hypervisor 内存开销的增加越大;
- 分区最大内存数量与创建分区以及激活分区所带来的 Hypervisor 内存开销,有正比关系,但无必然的线性关系;
- 对于期望内存较大的分区,将最大内存设置的过大(如为期望内存的两倍),将会使 Hypervisor 占用过多的内存;
|
|