七、TLB,虚拟化性能

除了改变缓存架构,Nehalem还改变了TLB等级架构。TLB是用来缓存虚拟地址和物理地址映射关系的。Core 2有着非常有趣的TLB安排,L1 DTLBINTEL有时也叫做micro-TLB)非常的小,并且只用来读取。它有16项小页表4KB page)和16项大页表2M/4M pages),每一个都是4路联合。L2 DTLB更大一些,可以读取和存储当在L1 DTLB中读取失败时,就到L2 DTLB中来读取,并且L2 DTLB负责所有的存储),它有256项小页表和32项大页表,也都是4路联合。

Nehalem则建立起了真正意义上的两级TLB体系,可以动态分配给SMT的活跃线程状态thread context)。Nehalem的L1 DTLB可以做所有的存储访问可以读取和存储),它有64项小页表和32项大页表,也都是4路联合。而新的L2 TLB是通用型的可以用于指令和数据),它只有512项小页表,也是4路联合。

Nehalem和Core 2的TLB的一个明显的差异是它们覆盖缓存的深度不同。Core 2Penryn)有6MB L2,通过使用小页表绝大多数的应用都不使用大页表),TLB可以转换2176KB的内存地址),这样就覆盖了1/3的L2。而Nehalem的一个核心有576项小页表,整个CPU总共则是2304项,这样TLB就可以转换9216KB的内存,这已经超过8MB L3的容量了。

Nehalem的TLB项还通过使用虚拟处理器IDVirtual Processor ID,VPID)而有所变化。每一个TLB项都缓存一个内存页的虚拟地址到物理地址的转换。而这个转换是特定于一个给定的进程或虚拟机virtual machine,VM)。当处理器在虚拟客户端和主机之间切换时,INTEL过去的CPU都要往TLB里填写,以确保进程只能够访问到它们被允许访问的内存。而VPID则跟踪是哪一个VM的TLB项,这样在该VM退出后又重新进入时,TLB就不用填写也能够确保安全。如果一个进程试图访问不是它自己的地址转换,则就会直接在TLB中命中失败,而不会是到页表中去做非法访问。VPID通过降低虚拟机地址转换的开销overhead)而有助于提升虚拟化性能。INTEL估计,Nehalem的一个来回的VM地址转换的延迟约是Conroe的40%,约比Penryn低1/3即约是Penryn的66%)。

Nehalem另一个虚拟化方面的改变是扩展页表Extended Page Tables,EPT),用来消除许多VM地址转换,即减少转换次数而VPID的作用是降低VM地址转换的延迟)。通常的页表是用来匹配客户机的虚拟地址和客户机的物理地址,然而在一个虚拟化系统中,也有从客户机的物理地址到主机的物理地址的转换。INTEL早期的CPU和AMD在Barcelona之前的CPU)将需要系统管理程序hypervisor)来处理页面错误,而Nehalem则通过EPT,来消除了许多不必要的虚拟机退出。


相关内容