Linux申请大页内存(mmap)


1.为什么要使用大页内存

  了解操作系统内存管理的人一般都知道操作系统对内存采用多级页表和分页进行管理,操作系统每个页默认大小为4KB。如果进程使用的内存过大,比如1GB,这样会在页表中占用 1GB / 4KB = 262144个页表项,而系统TLB可以容纳的页表项远小于这个数量。当多个内存密集型应用访问内存时,会造成过多的TLB未命中,因此在特定情况下会需要减少未命中次数,一个可行的办法就是增大每个页的尺寸。操作系统默认支持的大页是2MB,当使用1GB内存时,在页表中将占用 1GB / 2MB = 512个页表项,可以大大提升TLB命中率,进而提升应用性能。


2.怎样使用大页内存

2.1 先预留一定量的大页内存

#先查看系统有多少已经预留的大页内存
# cat /proc/meminfo |grep -i huge
#预留192个大页
# sysctl vm.nr_hugepages=192
#查看是否预留成功
# cat /proc/meminfo |grep -i huge

2.2 通过系统调用来从预留的大页内存中申请大页

#include <sys/mman.h>
#include <stdio.h>
#include <memory.h>
 
int main(int argc, char *argv[]) {
  char *m;
  size_t s = (8UL * 1024 * 1024);
 
  m = mmap(NULL, s, PROT_READ | PROT_WRITE,
                    MAP_PRIVATE | MAP_ANONYMOUS | 0x40000 /*MAP_HUGETLB*/, -1, 0);
  if (m == MAP_FAILED) {
    perror("map mem");
    m = NULL;
    return 1;
  }
 
  memset(m, 0, s);
 
  printf("map_hugetlb ok, press ENTER to quit!\n");
  getchar();
 
  munmap(m, s);
  return 0;
}

3.最后的话

大页内存的好处不仅是减少TLB未命中次数,而且大页内存分配的是物理内存,不会被操作系统的内存管理换出到磁盘上,因此不会出现缺页中断,也就不会引入访问磁盘的时延,另外,大页内存在物理上是连续的,对于大内存访问也有一定的加速效果。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏coder修行路

Django进阶之CSRF

 简介 django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成。而...

2075
来自专栏数据和云

险恶江湖:Oracle的TNS_ADMIN获取与设置混乱误删除案例

在微信群中有朋友提出一个问题:如何获得Oracle的TNS_ADMIN的变量值? TNS_ADMIN 是Oracle的一个环境变量,指向 SQL*Net 配置文...

3676
来自专栏CSDN技术头条

资源控制在大数据和云计算平台中的应用

本文针对大数据平台中资源控制这个层面来详细介绍资源控制在不同操作系统上的具体技术实现,以及大数据平台和资源控制的集成。

5988
来自专栏Kubernetes

Docker容器内的监控命令数据修正思路

思路概述:编写linux c代码,生成对应的动态链接库(so文件),通过LDPRELOAD实现对/proc文件系统访问的劫持。劫持之后,实现容器内正确的数据计算...

3518
来自专栏乐沙弥的世界

RMAN 配置、监控与管理

一个通道代表一个到设备(磁盘或磁带)的数据流并且在目标数据库或辅助数据库实例上产生一个相应的服务器会话(server session)

1081
来自专栏沈唁志

PHP开发规范之使用phpcbf脚本自动修正代码格式

在前段时间的文章:在PhpStorm中安装使用PHP_CodeSniffer编码规范检查工具中提到过phpcbf脚本

1771
来自专栏肖洒的博客

【爬虫】(一):爬网页、爬图片、自动登录

HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。 用于从WWW服务器传输超文本到本地浏览器的传送协议。

1273
来自专栏乐沙弥的世界

配置共享服务器模式

两者完成相同的任务,即处理所有指定的SQL操作。假定从客户端提交一个任意查询(DQL)到数据库服务器不论是专用模式还是共享

1683
来自专栏沃趣科技

ASM 翻译系列第三十六弹:ACFS磁盘组的重平衡操作

原作者:Bane Radulovic 译者: 魏兴华 审核: 魏兴华 DBGeeK社区联合出品 原文链接:http://asmsupportguy....

35311
来自专栏较真的前端

客户端会话级存储:session Storage与session Cookie的区别

2004

扫码关注云+社区