如何使用EPT
当CPU拥有EPT时,/proc/cpuinfo的flags会显示ept。
在RHEL6等Linux的最新发布版中基本上都启用了EPT。因此不需要特别的操作就可以使用EPT。在使用KVM的情况下,如果/sys/module/kvm_intel/parameters/ept为Y,就已启用EPT。禁用EPT时显示为N。
cat/sys/module/kvm_intel/parameters/ept
Y
要禁用EPT,可以把kvm_intel的模块参数指定为ept=0,使用modprobe命令将其安装到内核中。
modprobe kvm_intel ept=0
下面是禁用EPT时和启用EPT时UnixBench的比较。如图5-16所示,从UnixBench的结果也可以看出EPT的速度非常快。尤其是Process Creation(进程生成)等性能得到大幅提高。
图5-17中的图表是lmbench的结果。LocalCommunication bandwidths in MB/s的值越大表示性能越高,其他的基准测试都是较小的值,表示性能较高。从lmbench的结果也能看出EPT是能够有效提高性能的。
在lmbench的结果中,还有Context switching等在禁用EPT时性能较高的项目。这表示EPT容易引起TLB错误。发生TLB错误时,在影子分页的情况下最多发生5次内存访问,而在启用EPT时最多发生24次内存访问。EPT消耗的TLB很多,因此在容易发生TLB错误的基准测试中,影子分页的性能更高。
图 5-16 UnixBench的结果
图 5-17 lmbench的结果
EPT+hugepage
可以使用hugepage来减轻EPT的TLB错误。下面介绍在KVM中使用hugepage的方法。hugepage在使用影子分页的情况下也能提高性能。
1.生成hugepage。
mkdir/hugepages
mount-t hugetlbfs hugetlbfs/hugepages/
echo 4096>/proc/sys/vm/nr_hugepages
2.重新启动libvirtd。
service libvirtd restart
3.使用virsh edit,将客户端的结构文件改写为使用hugepage的设置。
在memory标签下添加memoryBacking、hugepage的标签。
virsh edit<客户端操作系统名>
<domain type='kvm'id='1'>
<name>rhel6-4</name>
<uuid>983f2e4e-baa8-e5d7-a97c-b574a72484b8</uuid>
<memory>1048576</memory>
<currentMemory>1048576</currentMemory>
<memoryBacking>
<hugepages/>
</memoryBacking>
<vcpu cpuset='0,2'>2</vcpu>
<os>
<type arch='x86_64'machine='rhel6.0.0'>hvm</type>
<boot dev='hd'/>
</os>
……snip……
4.启动客户端操作系统。