1. 虚拟机内存分布:
HVM的guest os内存是按照e820表来布局的。
规范:
1) e820表规范规定了各段内存及类型
2) 创建虚拟机时根据配置文件的内存大小,会填写hvm_info_table表的low_mem_pgend和high_mem_pgend的值,如果内存>3.75G,
low_mem_pgend=3.75G,
high_mem_pgend=4G+内存大小-3.75G
否则
low_mem_pgend=内存大小,
high_mem_pgend=0
1) 0 —1M的内存类型相对固定,除了低位的639k可访问,其他的都算是特殊内存(保留或者用作VGA),因此该段内存在进行overcommit选页时可以排除。
2) 当内存 <= 3.75G ,内存地址空间范围为0—4G(也即内存的pfn取值范围为0--1048576),1M之后的内存分布为:
a) 1M—mem_size(内存大小)为Ram类型。
b) Mem_size—3.75G 为内存空洞(对应的mfn为mfn_invalid,不可用)
c) 3.75G-4G,为特殊内存段(主要是mmio或者固定的硬件映射),在进行overcommit选页时可以排除。
3) 当内存 > 3.75G,内存地址空间范围为0—mem_size + 0.25G,1M之后的内存分布为:
a) 1M—3.75G为Ram类型
b) 3.75G—4G,为特殊内存段(主要是mmio或者固定的硬件映射),在进行overcommit选页时可以排除。
c) 4G—mem_size + 0.25G,为Ram类型
4)RAM类型的地址范围内也存在部分地址为mfn_invalid。
3. 综合起来,也即是说在选页时应该将0-1M(pfn范围为0 - 255)以及3.75-4G(pfn范围为983040 - 1048575 )这些特殊用途的地址空间排除掉。
HVM的guest os内存是按照e820表来布局的。
规范:
1) e820表规范规定了各段内存及类型
2) 创建虚拟机时根据配置文件的内存大小,会填写hvm_info_table表的low_mem_pgend和high_mem_pgend的值,如果内存>3.75G,
low_mem_pgend=3.75G,
high_mem_pgend=4G+内存大小-3.75G
否则
low_mem_pgend=内存大小,
high_mem_pgend=0
1) 0 —1M的内存类型相对固定,除了低位的639k可访问,其他的都算是特殊内存(保留或者用作VGA),因此该段内存在进行overcommit选页时可以排除。
2) 当内存 <= 3.75G ,内存地址空间范围为0—4G(也即内存的pfn取值范围为0--1048576),1M之后的内存分布为:
a) 1M—mem_size(内存大小)为Ram类型。
b) Mem_size—3.75G 为内存空洞(对应的mfn为mfn_invalid,不可用)
c) 3.75G-4G,为特殊内存段(主要是mmio或者固定的硬件映射),在进行overcommit选页时可以排除。
3) 当内存 > 3.75G,内存地址空间范围为0—mem_size + 0.25G,1M之后的内存分布为:
a) 1M—3.75G为Ram类型
b) 3.75G—4G,为特殊内存段(主要是mmio或者固定的硬件映射),在进行overcommit选页时可以排除。
c) 4G—mem_size + 0.25G,为Ram类型
4)RAM类型的地址范围内也存在部分地址为mfn_invalid。
3. 综合起来,也即是说在选页时应该将0-1M(pfn范围为0 - 255)以及3.75-4G(pfn范围为983040 - 1048575 )这些特殊用途的地址空间排除掉。