zoukankan      html  css  js  c++  java
  • hugepage设置相关总结

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
    本文链接:https://blog.csdn.net/shaoyunzhe/article/details/54614077
    HugePages_Total:      16     //预留HugePages的总个数
    HugePages_Free:       16     //池中尚未分配的 HugePages 数量,真正空闲的页数等于HugePages_Free - HugePages_Rsvd
    HugePages_Rsvd:        0     //表示池中已经被应用程序分配但尚未使用的 HugePages 数量
    HugePages_Surp:        0     //这个值得意思是当开始配置了20个大页,现在修改配置为16,那么这个参数就会显示为4,一般不修改配置,这个值都是0
    Hugepagesize:    1048576 kB //每个大页的大小

    1、hugepage永久 配置 
    修改/etc/default/grub 中的 GRUB_CMDLINE_LINUX,然后运行 grub 更新并重启系统:

    default_hugepagesz=1G hugepagesz=1G hugepages=16 hugepagesz=2M hugepages=2048 iommu=pt intel_iommu=on isolcpus=1-13,15-27
    #grub2-mkconfig -o /boot/grub2/grub.cfg

    #reboot

    注意:上面设置的是系统预留内存,如果是单cpu,预留大小肯定就是上面设置的值,如果是numa系统,每个cpu node平分上面设置的大小(比如系统有cpu node 0和node1,hugepages=2048,在查看/sys/devices/system/node/node0/hugepages/nr_hugepages时,大小肯定是1024)命令 echo ‘vm.nr_hugepages=2048' > /etc/sysctl.d/hugepages.conf也可以设置,但一定注意,有时发现grub设置的大页大小和实际大小不一样时,可能就是/etc/sysctl.d/hugepages.conf里的参数在作怪。默认情况下就是系统当前所有在线NUMA节点平均分配这些HugePages,除非那个NUMA节点本身没有足够的可用连续内存来生成 HugePages,那么此时HugePages将由另外一个NUMA节点生成hugepage 的数量和类型可根据系统中的可用内存进行调整。 isolcpus 参数支持我们将某些 CPU 与 Linux 调度程序隔离,以便基于 DPDK 的应用能够锁定到这些 CPU 上。

    重启系统后,查看内核 cmdline 并按照如下方式分配 hugepage。

    接下来是安装 hugepage 文件系统,加载 vfio-pci 用户空间驱动程序。

    #mkdir -p /mnt/huge

    #mkdir -p /mnt/huge_2mb

    #mount -t hugetlbfs hugetlbfs /mnt/huge (没有-o参数,挂载系统默认hugepage大小)
    默认大小指的是上图显示的Hugepagesize:    1048576 kB,也就是1G大页(cat /proc/meminfo | grep Hugepagesize)。

    #mount -t hugetlbfs none /mnt/huge_2mb -o pagesize=2MB(-o参数指定挂载2M的hugepage大小)


    2、临时配置

    Hugepage能够动态预留,执行命令:

    $ echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

    上面通过没有节点关联的系统分配内存页。如果希望强制分配给指定的NUMA节点,你必须做:

    #echo 1024 >/sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages

    #echo 1024 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
    hugepages-2048kB指预留2M的大小为1024个,一共2*1024M,hugepages-1048576kB指预留1G的大小

    3、查看HugePages情况:

    cat /proc/meminfo 

    4、查看挂载情况

     cat /proc/mounts

    会看见hugetlbfs /mnt/huge hugetlbfs rw,relatime 0 0这样的,这就是挂载了大页,在free不够时,在确定可以umount时,把这些umount一下就可以了,vpp代码自动挂载大页的,ovs+dpdk需要手动挂载

    5、vpp关于大页的一些问题

    A:有时启动vpp会报:

    导致这原因一般是dpdk默认要求的大页内存大小太大,而实际预留的太小,就必须在vpp启动配置文件startup.conf中修改dpdk属性socket-mem,改小一点

    B:vpp默认挂载大页的路径是/run/vpp/hugepages,有时vpp启动不了,查看cat /proc/mounts,发现挂载了多个/run/vpp/hugepages,但umount又卸载不完,

    [root@localhost /]# umount /run/vpp/hugepages

    umount: /run/vpp/hugepages: target is busy.
            (In some cases useful info about processes that use
             the device is found by lsof(8) or fuser(1))

    可以使用以下解决办法

    使用fuser命令,先确认有那些进程需要杀掉

    [root@localhost /]# fuser -cu /run/vpp/hugepages

    /mnt:                15060c(root)

    其次向进程发出SIGKILL信号

    [root@localhost /]# fuser -ck /run/vpp/hugepages

    /mnt:                15060c

    确认

    [root@localhost /]# fuser -c /run/vpp/hugepages

    [1]+  Killed                  dd if=1g of=/dev/null bs=1M  (wd:/run/vpp/hugepages)

    (wd now: /)

    6 ovs+dpdk大页问题

    有时没法重启服务器只能配置临时大页时,但启动ovs+dpdk会报错,

    A:

    上面显示的是有4个1073741824(1G)大小的大页,2048个2097152(2M)大小的大页,但都没有挂载,必须手动挂载大页,需要执行mount -t hugetlbfs hugetlbfs /mnt/huge

    B:

    这是因为配置的大页大小不满足ovs+dpdk大页需求,需要增大临时大页配置

    C:

    这种情况具体原因就是没有mount!必须执行

    mkdir /mnt/huge
    mount -t hugetlbfs nodev /mnt/huge
     

    比如原来的设置是4096   echo 4096 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

    AnonHugePages:   5218304 kB
    HugePages_Total:     4096
    HugePages_Free:     4096
    HugePages_Rsvd:        0
    HugePages_Surp:        0
    Hugepagesize:       2048 kB

    现在先设置 echo 128 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

    再设置echo 4096 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

    估计是内存连续问题造成的

    7、其他问题

    有时,你会发现大页

    不管怎样配置,free就是0,top或是free命令,查看内存基本使用完了,但是我们并没有启动vpp或是ovs,这个很大可能就是其他进程使用了hugepage,使用以下命令查找

    find /proc/*/smaps | xargs grep -ril "anon_hugepage"

    原理请查看https://toutiao.io/posts/n4hzg1/preview里hugepage内容
    ————————————————
    版权声明:本文为CSDN博主「懒少」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/shaoyunzhe/article/details/54614077

  • 相关阅读:
    Vue项目中跨域问题解决
    子网掩码
    C++的const类成员函数
    在python3中使用urllib.request编写简单的网络爬虫
    Linux 重定向输出到多个文件中
    背包问题
    hdu-1272 小希的迷宫
    SQLAlchemy 几种查询方式总结
    pycharm快捷键、常用设置、配置管理
    python3判断字典、列表、元组为空以及字典是否存在某个key的方法
  • 原文地址:https://www.cnblogs.com/zhaoxinshanwei/p/12081986.html
Copyright © 2011-2022 走看看