• Debian 11启用大页


    Enabling HugeTlbPage

    配套视频

    本例是按8GB物理内存大小分配内存的.

    注意启用大页后在VMWare上启动和运行超慢.

    在开始之间请先安装大页工具

    sudo apt-get -y install libhugetlbfs-bin
    

    1.启用 HugeTlbPage

    1.1 创建大页用户组

    创建用户postgres(所有机器)

    #创建linux postgres用户组
    #sudo groupadd pg
    
    #查看用户组
    #cat
    
    #删除用户组
    #sudo groupdel pg
    
    #创建linux postgres用户,在home中创建用户目录
    #sudo useradd postgres -m -g pg
    sudo useradd postgres -m
    
    #指定用户登陆时使用的shell类型,默认为sh
    sudo usermod -s /bin/bash postgres
    
    #设置linux postgres用户密码
    sudo passwd postgres
    
    #查看用户
    #cat
    
    #删除用户
    #sudo userdel -rf postgres
    

    为大页的用户创建一个组,并检索它的GID,然后将自己添加到组中

    #创建一个大页的用户组
    sudo groupadd my-hugetlbfs
    
    #获取它的GID
    sudo getent group my-hugetlbfs
    #本例:1002
    
    #添加到postgres至hugetlbfs
    sudo adduser postgres my-hugetlbfs
    
    #编辑/etc/sysctl.conf
    # Allocate 256*2MiB for HugePageTables (YMMV)
    #vm.nr_hugepages = 256
    
    # Members of group my-hugetlbfs(2021) can allocate "huge" Shared memory segment 
    #vm.hugetlb_shm_group = 2021
    

    1.2 编辑 /etc/sysctl.conf 并添加此文本以指定要保留的页面数

    sudo sysctl -a|grep kernel.shmmax
    
    sudo vim /etc/sysctl.conf 
    

    内存大页还要设置.值为kernel.shmmax的内存/(cat /proc/meminfo |grep -i huge)->Hugepagesize=2097152=2048KB=2MB

    注意vm.hugetlb_shm_group=1002是用户组my-hugetlbfs的gid

    #大页限制在6.5GB内存
    vm.nr_hugepages=3328
    vm.hugetlb_shm_group=1002
    
    cat /etc/sysctl.conf 
    

    1.3 为文件系统创建挂载点

    
    #给这个文件系统创建一个挂载点
    sudo mkdir /hugepages
    
    sudo vim /etc/fstab
    

    给这个"/hugepages"目录创建一个挂载点.注意gid=1002是用户组my-hugetlbfs的gid.

    hugetlbfs /hugepages hugetlbfs mode=1770,gid=1002 0 0
    
    cat < /etc/fstab
    

    2 limit.conf

    您应该配置用户可以锁定的内存量,以便应用程序不会通过锁定所有内存来使您的操作系统崩溃.请注意:任何页面都可以锁定在RAM中,而不仅仅是大页面.您应该允许该过程锁定更多的内存,而不仅仅是大页面的空间。

    sudo vim /etc/security/limits.conf
    

    锁定的RAM内存大小以kB为单位

    #1GB = 1024*1024*1024 = 1073741824byte
    #6.5GB = 1073741824 * 6.5 = 6442450944byte
    #要锁定的内存大小6979321856/1024
    
    #默认可以锁定的物理内存的最大值(硬限制)为:6815744kB
    *                hard    memlock         6815744
    
    cat /etc/security/limits.conf
    

    3 处理器对大页的支持

    如果您的内存非常多(TB),可根据cpu类型设置大页大小和数量.

    使用hugeadm --page-sizes-all可以查看当前硬件支持的大页大小.

    3.1 arm64

    Debian arm64(以4KB标准PAGE_SIZE运行),支持2MB和1GB的巨型TLB页面大小.通过在内核命令行上指定参数,必须在启动时预分配1GB的HugeTLB页面,以下将预先分配10x1GB=10GB的大页面:

    sudo vim /etc/default/grub
    

    在GRUB_CMDLINE_LINUX配置中添加以下内容

    hugepagesz=1G hugepages=10
    

    更新grub

    cat /etc/default/grub
    
    sudo update-grub
    

    重启

    sudo reboot
    

    如果一个人选择用CONFIG_ARM64_64K_PAGES=y构建自己的Debian arm64内核,那么只有512MB的HugeTLB(和 THP)页面可用.

    3.2 x86_x64

    根据处理器的不同,x86_64架构上至少有两种不同的大页面大小:2MB和1GB.如果CPU支持2MB页面,则它具有PSE CPU信息标志.对于1GB,它具有PDPE1GB标志.

    如果此命令返回非空字符串,则支持2MB页.

    grep pse /proc/cpuinfo | uniq
    
    flags           : [...] pse [...]
    

    如果此命令返回非空字符串,则支持1GB页.

    grep pdpe1gb /proc/cpuinfo | uniq
    
    flags           : [...] pdpe1gb [...]
    

    在它们实际上都可用之前,它们可能必须在引导时激活.以下内核引导参数启用1GB页并创建一个1GB页的池:

    sudo vim /etc/default/grub
    

    在GRUB_CMDLINE_LINUX配置中添加以下内容

    hugepagesz=1GB hugepages=1
    

    更新grub

    sudo update-grub
    

    重启

    sudo reboot
    

    启动后,巨大的页面池如下所示:

    hugeadm --pool-list
    
          Size  Minimum  Current  Maximum  Default
       2097152        0        0        0        *
    1073741824        1        1        1
    

    4 获取大页信息

    当前硬件支持的大页页大小,查询结果的单位为Bytes:

    hugeadm --page-sizes-all
    2097152         #2MB
    1073741824      #1GB
    

    hugeadm 还显示每个可用大小的已分配大页数:

    hugeadm --pool-list
          Size  Minimum  Current  Maximum  Default
       2097152     3328     3328     3328        *   #2MB页大小,最小3328,当前已分配3328,最大可以分配3328, 3328*2097152约为6.5G
    1073741824        0        0        0            #未使用1GB页大小,所以未分配
    

    使用/proc/meminfo查看大页信息:

    grep Huge /proc/meminfo
    

    标准Debian内核是否启用了HUGETLB

    grep HUGETLB /boot/config-$(uname -r)
    
    CONFIG_HUGETLBFS=y
    CONFIG_HUGETLB_PAGE=y
    
  • 相关阅读:
    springboot:validator之自定义注解校验
    Oracle数据库基础
    【电子通识】PE和SQE是什么职位
    PTA 7-1 单调栈
    eclipse 源代码文件报错处理
    web pdf 拖拽签章
    Python整理本机Mp3音乐文件
    我从技术到产品经理的几点体会
    ssm项目环境初步搭建
    【面试心得】系统调用
  • 原文地址:https://blog.csdn.net/kmblack1/article/details/127122340