内存配置
例1:不加内存参数,模拟一个默认大小内存的客户机系统。
qemu-system-x86_64 /home/dudu/kvm/ubuntu14.04.img
在客户机
中,可以通过两种常用的方式来查看内存信息,具体如下:
free命令
通常用来查看内存的使用情况,“-m”参数是指内存大小以MB为单位来显示。在上面示例中,我们使用了默认大小的内存,值为128M,而根据上面输出可知总的内存为111MB,这个值比128MB小,这是因为free命令显示的内存是实际能够使用的内存,已经除去了内核执行文件占用内存和一些系统保留的内存。
使用cat命令
来查看/proc/meminfo看到的“MemTotal”大小是113704 kB,这个值比128M*1024=131071kB小,其原因也是因为此处显示的内存是实际能够使用的内存。
例2:模拟一个内存大小为2048M的客户机系统。
qemu-system-x86_64 -m 2048M /home/dudu/kvm/ubuntu14.04.img
或 qemu-system-x86_64 -m 2G /home/dudu/kvm/ ubuntu14.04.img
- 1
在客户机
中,查看内存信息,具体如下:
根据上面输出可知,可用的总内存为2001MB,这个值比2048MB小。
大页 HugePage
可以在宿主机
中,通过以下操作让客户机使用HugePage
,具体操作如下:
(1)查看宿主机中内存页的大小
通常情况下,内存页大小为4KB。
(2)查看宿主机中透明大页是否开启
Ubuntu16.04中透明大页是默认开启状态。
(3)开启透明大页
如果已开启,略过该步骤。
(4)查看宿主机中HugePage的大小
通常情况下,宿主机中HugePage的大小是2048kB,即2MB。
HugePages_Total: Hugepage的页面数量
HugePages_Free: 剩余的页面数量
HugePages_Rsvd: 被分配预留但是还没有使用的page数目
HugePages_Surp:HugePages_Total减去/proc/sys/vm/nr_hugepages中的值
- 1
- 2
- 3
- 4
默认情况下,大页的数目为0,0表示透明大页未被配置使用。
(5)创建挂载点目录
Ubuntu16.04中默认有此目录。如果有的话,该步骤省略。
(6)挂载大页
内存只有被挂载了之后,才能被应用程序使用。到刚创建的hugepages目录下,挂载hugetlbfs文件系统。
(7)设置HugePage的数量
使用sysctl
(sysctl命令用于设置和显示在/proc/sys目录中的内核参数)命令设置vm.nr_hugepages
,将大页个数设置为200(200 * 2M=400M,需要确保宿主机有足够可以分配的内存)。
上面的方式是临时修改,永久修改可以使用另一个操作方法,在/etc/sysctl.conf
添加如下配置:vm.nr_hugepages=200 。修改后,用命令sysctl -p
使得设置生效。
设置完毕后查看大页数量:
(8)启动客户机,并让其使用HugePage内存
qemu-system-x86_64 -m 200M /home/dudu/kvm/ubuntu14.04.img -mem-path /dev/hugepages/
开启客户机时,客户机的内存大小要小于宿主机设置的大页hugepage的大小。(宿主机大页设置了200 * 2M=400M,客户机的内存为200M。)如果客户机设置的内存大小超出了宿主机的 hugepage,则会报以下错误:qemu-system-x86_64: unable to map backing store for guest RAM: Cannot allocate memory
(9)再次查看宿主机中HugePage的使用情况
通过上述结果,可以看到HugePages_Free数量减少了,因为客户机使用了一定数量的HugePage。但是HugePages_Free的数量没有减少100个(100 * 2M=200M),这是因为刚启动客户机时并没有分配200MB内存。
(10)使用“mem-prealloc”参数
使用“-mem-prealloc
”参数,会让meminfo文件中HugePages_Free数量的减少和分配给客户机的内存保持一致。
qemu-system-x86_64 -m 168 /home/dudu/kvm/ubuntu14.04.img -mem-path /dev/hugepages/ -mem-prealloc
查看宿主机中HugePage的使用情况:
HugePages_Free的值为116,说明使用了200-116=84个大页,一共84 * 2=168M,这个值正好是分配给虚拟机的内存大小。
(11)总结
在linux环境中开启HugePage有很多好处,具体如下:
- (1) 非Swap内存:当开启HugePage的时候,HugePage是不会Swap的;
- (2) 减少TLB(Translation Look aside Buffer)负担:TLB是在CPU里面的一块缓冲区域,其中包括了部分PageTable内容。使用HugePage可以减少TLB工作负载;
- (3) 减少Page Table空间负载:在PageTable管理中,每条Page记录是要占据64byte的空间。也就是说,如果一块50G的RAM,4k大小的PageTable要有80MB左右;
- (4) 减少PageTable检索负载:更小的PageTable意味着更快的检索定位能力;
- (5) 内存性能提升:Page数量减少和大小的增加,减少了管理过程的复杂性,进一步减少了瓶颈出现的概率。