版权声明:本文为博主原创文章,遵循 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

hugepage设置相关总结的更多相关文章

  1. 【Matlab开发】matlab中norm范数以及向量点积、绘图设置相关

    [Matlab开发]matlab中norm范数以及向量点积.绘图设置相关 标签(空格分隔): [Matlab开发] 声明:引用请注明出处http://blog.csdn.net/lg125915677 ...

  2. php http头设置相关信息

    HTTP 状态码 状态码用来告诉HTTP客户端,HTTP服务器是否产生了预期的Response. HTTP/1.1中定义了5类状态码, 状态码由三位数字组成,第一个数字定义了响应的类别 1XX 提示信 ...

  3. 【Unity】13.2 通过Lighting Window设置相关参数

    分类:Unity.C#.VS2015 创建日期:2016-05-19 一.简介 Unity 5.3.4的Lighting Window有3个选项卡:Object.Scene.Lightmaps. 二. ...

  4. magento email模板设置相关

    magento后台 可以设置各种各样的邮件,当客户注册.下单.修改密码.邀请好友等等一系列行为时,会有相关信息邮件发出. 进入magento后台,System > Transactional E ...

  5. Winform设置相关

    >>  Winform查找根目录 1) AppDomain.CurrentDomain.BaseDirectory 地址为: d:\MyProject\Bin\  Application. ...

  6. DirectX Graphics Infrastructure (DXGI) 全屏设置相关问题

    原文地址: https://msdn.microsoft.com/en-us/library/windows/desktop/ee417025(v=vs.85).aspx 未完待续... DXGI是在 ...

  7. [ios] Xcode使用设置相关-快捷键【转】

    快照:   command+control+s   编辑完了可以和之前的某个版本对比,通过File->Snapshots 调试时的快捷键也像大多数 IDE 靠拢了,采用了 F5.F6.F7 简单 ...

  8. 四、Django设置相关

    1.全局设置 setttings文件 import os import sys # Build paths inside the project like this: os.path.join(BAS ...

  9. hugepage设置

    1.设置memlock 编辑/etc/security/limits.conf 增加: * Soft memlock 稍小于RAM值 * hard memlock 稍小于RAM值 Memlock,锁定 ...

随机推荐

  1. 《Exception团队》第七次作业:团队项目设计完善&编码

    一.项目基本介绍 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 Exception 作业学习目标 1.掌握软件编码实现的工程要求 作业任务 1. ...

  2. vue和react原理性知识点

    Vue组件如何通信? computed和watch有什么区别? Vue是如何实现双向绑定的? Proxy与Object.defineProperty的优劣对比? 你是如何理解Vue的响应式系统的? 既 ...

  3. ascii、unicode、utf-8、gbk 区别?

    发展史: https://www.cnblogs.com/houxt/p/11250878.html python2内容进行编码(默认ascii),而python3对内容进行编码的默认为utf-8. ...

  4. 模拟赛20181101 雅礼 Wearry 施工 蔬菜 联盟

    % Day2 Solution % Wearry % Stay determined! 施工    记 fif_{i}fi​ 表示考虑前 iii 个建筑, 并且第 iii 个建筑的高度不变的答案, 每 ...

  5. Vector(同步)和Arraylist(异步)的异同

    //  同步  异步  //1  同步  //2  异步  //未响应 = 假死  占用内存过多  内存无法进行处理  //请求方式:同步    异步  //网页的展现过程中:1 css文件的下载  ...

  6. H3CNE学习6 静态路由

    一.相应命令 1.查看路由表 2.直连路由 3.静态路由配置 4.路由器转发数据包 二.静态路由2 1.路由优先级 管理距离即优先级,值越小就越优先 2.路由度量 如果上下都是使用的相同的路由协议那么 ...

  7. b/s实现大文件上传分片上传断点续传

    关键部分 前端用file.slice()分块 前端用FileReader获取每一分块的md5值 后端用MultipartFile接受分块文件 后端用FileOutputStream拼装分块文件 话不多 ...

  8. C# Ninject使用

    Ninject是一个IOC容器,用来解决程序中组件的耦合问题,它的目的在于做到最少配置.简单来讲就是 为我们选择一个想要的类来处理事务. 百度百科的解释:一个快如闪电.超轻量级的基于.Net平台的依赖 ...

  9. git 查看项目代码统计命令

    git log --author="xxxxxxxx" --pretty=tformat: --numstat | gawk '{ add += $1 ; subs += $2 ; ...

  10. 洛谷P3522 TEM-temperature

    题目 单调队列+阅读理解 简化题意. 找到一个最长的区间使得区间每个点的r要大于该点之前的点的l. 然后可以用单调队列维护单调递减的l.最后尺取法O(n)枚举所有区间并取最大值. 单调队列可以快速找某 ...