如何使用EPT

当CPU拥有EPT时,/proc/cpuinfo的flags会显示ept。

如何使用EPT - 图1

如何使用EPT - 图2

在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(进程生成)等性能得到大幅提高。

如何使用EPT - 图3

图5-17中的图表是lmbench的结果。LocalCommunication bandwidths in MB/s的值越大表示性能越高,其他的基准测试都是较小的值,表示性能较高。从lmbench的结果也能看出EPT是能够有效提高性能的。

在lmbench的结果中,还有Context switching等在禁用EPT时性能较高的项目。这表示EPT容易引起TLB错误。发生TLB错误时,在影子分页的情况下最多发生5次内存访问,而在启用EPT时最多发生24次内存访问。EPT消耗的TLB很多,因此在容易发生TLB错误的基准测试中,影子分页的性能更高。

如何使用EPT - 图4

图 5-16 UnixBench的结果

如何使用EPT - 图5

图 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.启动客户端操作系统。


virsh start<客户端操作系统名>