huge形式_Linux hugepage使用与实现

Linux

hugepage使用与实现

——lvyilong316

1.1引言

随着计算需求规模的不断增大,应用程序对内存的需求也越来越大。为了实现虚拟内存管理机制,操作系统对内存实行分页管理。自内存“分页机制”提出之始,内存页面的默认大小便被设置为4096字节(4KB),虽然原则上内存页面大小是可配置的,但绝大多数的操作系统实现中仍然采用默认的4KB页面。4KB大小的页面在“分页机制”提出的时候是合理的,因为当时的内存大小不过几十兆字节,然而当物理内存容量增长到几G甚至几十G的时候,操作系统仍然以4KB大小为页面的基本单位,是否依然合理呢?

在Linux操作系统上运行内存需求量较大的应用程序时,由于其采用的默认页面大小为4KB,因而将会产生较多TLB Miss和缺页中断,从而大大影响应用程序的性能。当操作系统以2MB甚至更大作为分页的单位时,将会大大减少TLB

Miss和缺页中断的数量,显著提高应用程序的性能。这也正是Linux内核引入大页面支持的直接原因。好处是很明显的,假设应用程序需要2MB的内存,如果操作系统以4KB作为分页的单位,则需要512个页面,进而在TLB中需要512个表项,同时也需要512个页表项,操作系统需要经历至少512次TLB Miss和512次缺页中断才能将2MB应用程序空间全部映射到物理内存;然而,当操作系统采用2MB作为分页的基本单位时,只需要一次TLB

Miss和一次缺页中断,就可以为2MB的应用程序空间建立虚实映射,并在运行过程中无需再经历TLB Miss和缺页中断(假设未发生TLB项替换和Swap)。

为了能以最小的代价实现大页面支持,Linux操作系统采用了基于hugetlbfs特殊文件系统2M字节大页面支持。这种采用特殊文件系统形式支持大页面的方式,使得应用程序可以根据需要灵活地选择虚存页面大小,而不会被强制使用2MB大页面。本文将针对hugetlb大页面的应用和内核实现两个方面进行简单的介绍,以期起到抛砖引玉的作用。

1.2 Hugetlb FileSystem的应用

本文的例子摘自Linux内核源码中提供的有关说明文档(Documentation/vm/hugetlbpage.txt)。使用hugetlbfs之前,首先需要在编译内核(make menuconfig)时配置CONFIG_HUGETLB_PAGE和CONFIG_HUGETLBFS选项,这两个选项均可在File systems内核配置菜单中找到。

内核编译完成并成功启动内核之后,将hugetlbfs特殊文件系统挂载到根文件系统的某个目录上去,以使得hugetlbfs可以访问。命令如下:

mount none /mnt/huge -t hugetlbfs

此后,只要是在/mnt/huge/目录下创建的文件,将其映射到内存中时都会使用2MB作为分页的基本单位。值得一提的是,hugetlbfs中的文件是不支持读/写系统调用(如read()或write()等)的&#x

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值