Hugepage介绍以及实践

在Linux 64位系统里面,默认内存是以4K的页面(Page)来管理的,当系统有很是多的内存的时候,管理这些内存的消耗就比较大;而HugePage使用2M大小的页面来减少管理开销。node

Hugepage的背景


操做系统对于数据的存取直接从内存要比从硬盘读写数据要快的多,可是内存是有限的,这样就引出了物理内存与虚拟内存的概念。虚拟内存是利用硬盘空间虚拟出的一块逻辑内存,这部分磁盘空间Windows下称之为虚拟内存,Linux下被称为交换空间(Swap Space)。linux

对于这个大内存的管理(物理内存+虚拟内存),大多数操做系统采用了分页的方式进行管理。分页方式能够避免内存空间的浪费。相应地,也就存在内存的物理地址与虚拟地址的概念,CPU必须把虚拟地址转换程物理内存地址才能真正访问内存。为了提升这个转换效率,CPU会缓存最近的虚拟内存地址和物理内存地址的映射关系,并保存在一个由CPU维护的映射表中(快表)。为了尽可能提升内存的访问速度,须要在映射表中保存尽可能多的映射关系。算法

linux的内存管理采起的是分页存取机制,为了保证物理内存能获得充分的利用,内核会按照LRU算法在适当的时候将内存中不常常使用的内存页自动交换到虚拟内存中,而将常常使用的信息保留到内存。一般状况下,Linux默认状况下每页是4K,这就意味着若是物理内存很大,则映射表的条目将会很是多,会影响CPU的检索效率。由于内存大小是固定的,为了减小映射表的条目,可采起的办法只有增长页的尺寸。所以Hugepage便所以而来。缓存

Hugepages相关概念


  • Page Table:页表,也就是一种用于内存管理的实现方式,用于物理地址到逻辑地址之间的映射。所以对于内存的访问,先是访问Page Table,而后根据Page Table中的映射关系,隐式的转移到物理地址来存取数据。
  • TLB: Translation Lookaside Buffer (TLB) ,CPU中的一块固定大小的cache,包含了部分page table的映射关系,用于快速实现虚拟地址到物理地址的转换。
  • hugetlb: hugetlb 是TLB中指向HugePage的一个入口。

Regular Pages 与 HugePages


  • Regular Pages:在下图中有两个不一样的进程,两个进程对于内存的访问是首先访问本地的page table,而本地的page table又参照了TLB,指向了实际的物理地址。图中物理地址page size大小4kb。

  • HugePages:在下图中,本地的page table 与TLB中都包含了huge page属性。所以page table中的任意一个page可能使用了常规的page,也有可能使用了huge page。

Hugepage 优势


  • 减小了TLB的工做量,因为使用了huge page,相同的内存大小状况下,管理的虚拟地址数量变少。
  • 增大TLB的覆盖范围,能够包含更多的地址空间,cpu的寻址能力相应的获得了加强。
  • 下降page table负载,消除page table查找负载,提升内存的总体性能。

使用Hugepage


在NUMA机器上,应该在单独的节点上明确分配页面(假定须要1024页):ide

echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
echo 1024 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages

查看Hugepage使用状况:性能

cat /proc/meminfo|grep Huge

若是已经配置好了大内存页机制,就可让DPDK利用大内存页的机制了。操作系统

mkdir /mnt/huge 
mount -t hugetlbfs nodev /mnt/huge
相关文章
相关标签/搜索