HugePage
普通的内存页面大小是 4 KB
1. Hugepage的引入
而系统的内存管理一般是通过虚拟地址到物理地址的映射。虚拟地址一般是在磁盘虚拟出的一块逻辑内存。这部分磁盘空间Windows下称之为虚拟内存,Linux下被称为交换空间(Swap Space)。
CPU必须将虚拟地址转换成物理地址,才能够真正的访问内存。为了提高转换的效率,CPU会在cache中缓存最近的虚拟地址到物理地址的映射关系,保存在cpu维护的映射表中。为了提高内存的访问速度,需要在映射表中保存尽可能多的映射关系。
Linux下默认的页大小是4KB,对于内存大于8G以上的场合,则映射表的条目将非常多,这样会影响cpu的检索效率。
对于内存大小固定的场合,为了减少映射条目,可以增大页面的大小。因此,HugePage是一个不错的方案。
2. HugePage相关概念
- Page Table
page table也就是一种用于内存管理的实现方式,用于物理地址到虚拟之间的映射。因此对于内存的访问,先是访问Page Table,然后根据Page Table 中的映射关系,隐式的转移到物理地址来存取数据。
- TLB
Translation Lookaside Buffer (TLB) ,CPU中的一块固定大小的cache,包含了部分page table的映射关系,用于快速实现虚拟地址到物理地址的转换。
- hugetlb
hugetlb 是TLB中指向HugePage的一个entry(通常大于4k或预定义页面大小)。 HugePage 通过hugetlb entries来实现,也可以理解为HugePage 是hugetlb page entry的一个句柄。
- hugetlbfs
一个类似于tmpfs的新的in-memory filesystem,在2.6内核被提出。
3. HugePage的优点
对于较大的系统内存以及sga,使用hugepage可以极大程度的提高Oracle数据库性能。
a、Not swappable
无需交换。也就是不存在页面由于内存空间不足而存在换入换出的问题
b、Relief of TLB pressure
减轻TLB的压力,也就是降低了cpu cache可缓存的地址映射压力。由于使用了huge page,相同的内存大小情况下,管理的虚拟地址数量变少。
TLB entry可以包含更多的地址空间,cpu的寻址能力相应的得到了增强。
c、Decreased page table overhead
降低page table负载,对于普通的page,每个entry需要64bytes进行管理,对于50gb的内存,管理这些entry,需要800mb的大小
(5010241024)kb/4kb*64bytes/1024/1024=800mb。
d、Eliminated page table lookup overhead
消除page table查找负载
e、Faster overall memory performance
提高内存的整体性能
原文地址:https://www.cnblogs.com/ckqq/p/9902504.html