Linux 下 Hugepages的配置
Linux虽然没有aix,hp unix那么强悍,但Linux也是非常优秀的,为了提升Linux的性能,它采用了很多io,memory的调度机制,Linux使用内存的方式是采用vm的方式,即Linux把物理内存和swap共同虚拟成内存来对外提供,有时用户看似使用内存,可实际上是使用磁盘,那如何避免使用swap磁盘空间呢?
Linux管理内存的单位是页(pages),一般情况下是4k的page,当我们使用的大内存时(>8G),管理这么大的内存就会给系统造成很大的负担,再加上频繁的pagein/pageout,会成为系统的瓶颈。
1.hugepage介绍
2.实践配置
1.hugepage介绍
hugepage是在Linux2.6内核被引入的,主要提供4k的page和比较大的page的选择当我们访问内存时,首先访问”page table“,然后Linux在通过“page table”的mapping来访问真实物理内存(ram+swap)。为了提升性能,Linux在cpu中申请固定大小的buffer,被称为TLB,TLB中保存有“page table”的部分内容,这也遵循了,让数据尽可能的靠近cpu原则。在TLB中通过hugetlb来指向hugepage。这些被分配的hugepage作为内存文件系统hugetlbfs(类似tmpfs)提供给进程使用。
普通4k page
启用hugepage
hugepage特点
Linux系统启动,hugepage就被分配并保留,不会pagein/pageout,除非人为干预,如改变hugepage的配置等;
根据Linux内核的版本和HW的架构,hugepage的大小从2M到256M不等。因为采用大page,所以也减少TLB
和page table的管理压力
为什么使用hugepage
对于大内存(>8G),hugepage对于提高在Linux上的Oracle性能是非常有帮助的
1)Larger Page Size and Less of Pages:减少了HugeTLB 的工作量
2)No Page Table Lookups:因为hugepage是不swappable的,所有就没有page table lookups。
3)No Swapping: 在Linux下,hugepage是不支持swapping
4)No 'kswapd' Operations:在Linux下进程“kswapd”是管理swap的,如果是大内存,那pages的数量就非常大,
那“kswapd”就会被频繁的调用,从而会影响性能。