Linux下试验大页面映射(MAP_HUGETLB)

我们成功用大页面申请了8M内存,4个大页面,同时进行清零操作成功,再munmap之前,我们需要确认内存确实是被我们使用了。新的2.6.32内核通过支持MAP_HUGETLB方式来使用内存,避免了烦琐的mount操作,对用户更友好。到某个点去,部署起来很不方便,我们只想要点匿名页面,要搞的那么麻烦吗?过去使用大页面内存主要透过hugetlbfs需要mount文件。再来看演示代码如下:# cat huge.c。
摘要由CSDN通过智能技术生成


熊二修Linux传:   

使用大页需要mmap来申请。

参见man mmap:

MMAP(2)                                                  Linux Programmer's Manual                                                  MMAP(2)

NAME
       mmap, munmap - map or unmap files or devices into memory

SYNOPSIS
       #include <sys/mman.h>

       void *mmap(void *addr, size_t length, int prot, int flags,
                  int fd, off_t offset);
       int munmap(void *addr, size_t length);

       See NOTES for information on feature test macro requirements.

The flags argument 
       
       MAP_HUGETLB (since Linux 2.6.32)
              Allocate  the  mapping using "huge pages."  See the Linux kernel source file Documentation/admin-guide/mm/hugetlbpage.rst for
              further information, as well as NOTES, below.

这样明显会方便些,但是大内存页面预留的操作还是要做的,我们来演示下,先来准备环境:
 

root@wzm-phytium-d2000:~# cat /proc/sys/vm/nr_hugepages
0
root@wzm-phytium-d2000:~# echo 100 /proc/sys/vm/nr_hugepages
100 /proc/sys/vm/nr_hugepages
root@wzm-phytium-d2000:~# echo 100 >/proc/sys/vm/nr_hugepages
root@wzm-phytium-d2000:~# cat /proc/meminfo |grep -i huge
AnonHugePages:    100352 kB
ShmemHugePages:        0 kB
FileHugePages:         0 kB
HugePages_Total:     100
HugePages_Free:      100
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:          204800 kB

再来看演示代码如下:# cat huge.c

#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;
}


# gcc huge.c
# ./a.out
map_hugetlb ok, press ENTER to quit!
我们成功用大页面申请了8M内存,4个大页面,同时进行清零操作成功,再munmap之前,我们需要确认内存确实是被我们使用了。

好,切换到另外一个窗口来看下:

root@wzm-phytium-d2000:/home/wzm# cat /proc/meminfo |grep -i huge
AnonHugePages:    100352 kB
ShmemHugePages:        0 kB
FileHugePages:         0 kB
HugePages_Total:     100
HugePages_Free:       96
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

古井无波 2024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值