首页 > 系统相关 >linux中大页内存

linux中大页内存

时间:2023-01-09 10:56:00浏览次数:62  
标签:大页 HugePages hugetlbfs 内存 中大页 linux pool libhugetlbfs

在项目中遇到缺页中断引发了延迟,后来在网上查找,发现有两种手段可以来介绍缺页中断的发生:

1:减少mmap的使用,改用brk 这个只是在一定程度上减少用户态和内核态的切换,减少对内存的访问,利用brk内存重复使用来减少缺页中断发生。后面会详细讲解brk和mmap的使用和区别。

2:使用大页内存----在最开始就采用大页内存分配了足够多的空间,后面不在出现缺页中断----虚拟内存到物理内存的映射等。

而使用大页内存有两种方法:(1)linux 系统自带的大页内存:libhugetlbfs;     (2)DPDK支持的大页内存。关于DPDK后面开一个专题去详细学习。

本文主要介绍linux自带的libhugetlbfs的使用。

下面文章转载于:https://www.dazhuanlan.com/gary886/topics/1084969

熟悉了 linux 中的透明大页机制之后,这次又调研了 hugetlbfs,对于 hugetlbfs 的具体介绍,不是本文的重点,如果读者对于 hugetlbfs 不太了解的话,可以参考这篇文章,它介绍了 hugetlbfs 的使用。接下来,我将介绍 libhugetlbfs 的安装与使用。

最初,我参照 libhugetlbfs 的文档点击这里,将源代码解压,安装。之后去谷歌搜了一下 ubuntu install libhugetlbfs,发现已经有官方安装包了,顿时。。。。废话不多说,直接切入正题。

(1) libhugetlbfs 的安装如下:

sudo apt-get update

sudo apt-get install libhugetlbfs-dev

ok,hugetlbfs 安装完毕,下面输入hugeadm这一指令来检测安装是否成功。如果出现如下图所示的界面,恭喜你,安装成功。

 

(2) 建立挂载点

mkdir -p /mnt/hugetlbfs

mount -t hugetlbfs none /mnt/hugetlbfs

通过hugeadm --list-all-mounts检测是否挂在成功。

 

(3) 由于大页是由大页池进行维护的,此刻,我们需要设置维护池中大页的个数。为了简单起见,我们设置大页个数的最小值为 30,最大值为 40。

hugeadm --pool-pages-min 2MB:30

hugeadm --pool-pages-max 2MB:40

之后,通过hugeadm --pool-listgrep HugePages /proc/meminfo去查看大页池中大页的数目。

 

(4) 测试透明大页

编写一个测试程序,测试程序申请了二十几个大页。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13

int ()
{
int i, len;
int *mem;
len = 13 * 1024 * 1024;
mem = (int*)malloc(sizeof(int) * len);
for(i = 0; i < len; i++)
mem[i] = i;
getchar();
free(mem);
return 0;
}

编译程序,最终的可执行文件名为 a.out。在 a.out 的目录下,执行如下指令:

LD_PRELOAD=libhugetlbfs.so HUGETLB_MORECORE=yes ./a.out
此刻,查看大页池中大页的数目。

通过HugePages_TotaHugePages_Free参数的值证明大页已经成功使用。

好了,我们完成了 libhugetlbfs 的使用,下面对上述步骤中的细节进行简要的说明吧。

  1. libhugetlb 库对 malloc()/free() 等常用的内存相关的库函数进行了重载,以使得应用程序的数据可以放置在采用大页面的内存区域中,以提高内存性能。
  2. 若你对LD_PRELOAD这个指令不太清楚,可参见这里
  3. 针对大页池,HugePages_Totalis the size of the pool of huge pages,HugePages_Freeis the number of huge pages in the pool that are not yet allocated,HugePages_Surpis the number of huge pages in the pool above the value in /proc/sys/vm/nr_hugepages。具体请查看官方文档。
  4. kvm 亦可以使用 hugepage,具体步骤请参考这里

参考资料:

  1. Linux 大页面使用与实现简介
  2. How to use hugepage to improve application performance
  3. libhugetlbfs HOWTO

 

从上面介绍可以看到,一共有如下几步:

1:要在系统上安装libhugetlbfs。

2:安装后要挂载(这部分介绍的不是很详细)

3:需要配置大页内存的size以及每种size的个数

4:使用的时候一定要在.o前面加上LD_PRELOAD=libhugetlbfs.so HUGETLB_MORECORE=yes ./a.out

自己做的一些特殊例子如下:

 

 对于1G的大页内存配置了20个。 对于2M的没有配置。

mount -t hugetlbfs pagesize=1GB /mnt/huge_1G    (挂载)
mount -t hugetlbfs pagesize=2M /mnt/huge_2M
echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages  (配置大小)
echo 8 > /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages
LD_PRELOAD=libhugetlbfs.so HUGETLB_MORECORE=yes ./app   (真正使用)

 下面是一些比较好的帖子,可以告诉你怎么使用大页内存:

 

标签:大页,HugePages,hugetlbfs,内存,中大页,linux,pool,libhugetlbfs
From: https://www.cnblogs.com/beilou310/p/17036346.html

相关文章

  • linux DNS 配置
    配置centos的yum源时报错Couldnotresolvehost:mirrors.aliyun.com;Unknownerror当前无法解析域名,需要配置域名解析服务器2解决办法1)打开/etc/resolv.conf文件2)写......
  • Linux学习记录(四)Shell编程
    0、学习shell的目的:方便运维;编写shell程序管理集群、提高开发效率;1、Shell概述(1)shell是解释器;​ 核心:硬件系统(主机+外设);​外层:操作系统;​......
  • Linux学习记录(五)DHCP服务器配置(Net模式)
    一、DHCP协议DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。默认情......
  • linux指令df和du
    官方文档:https://www.gnu.org/software/coreutils/manual/html_node/df-invocation.html#df-invocation一、dfdf:Reportfilesystemspaceusaged:disk磁盘f:file......
  • 【linux】crontab使用方法
    一、crontab基本用法1.1cron服务cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。servicecrondstart//启动服务servicecrondstop......
  • Qt获取内存信息
    原文地址:https://blog.csdn.net/Joker__123/article/details/125064795intMB=1024*1024;MEMORYSTATUSEXmemoryStateEx;memoryStateEx.dwLength......
  • vs code .net core Linux下离线安装Nuget包
    本人第一次使用vscode在linux下开发.netcore项目,由于处于内网,无法通过在线安装,所以在遇见离线安装Nuget包时,耗费了一番功夫,网上也没有相关的,最后还是多个思路结合才......
  • 图文并茂windows10安装VMware创建CentOS-7-x86_64运行linux系统
    VMware是什么VMWare(VirtualMachineware)可以使你的计算机上同时运行几个系统、例如windows、DOS、LINUX等同时存在,可以将这些系统像程序似的随时切换,并且不会影响主......
  • 52Linux之chattar-acl-trash-del脚本
    需求:防止重要文件被删除了chmod+x,还可以用与一下1、利用chattr(加权限)[as@192桌面]$mkdirb[as@192桌面]$sudochattr-R+ab[sudo]as的密码:对不起,请重试......
  • qemu使用uboot通过网络加载 linux kernel
    qemu使用uboot通过网络加载linuxkernel。参考文章:https://www.zhaixue.cc/qemu/qemu-u-boot.htmlhttps://zhuanlan.zhihu.com/p/547338158 1#!/bin/sh2......