2019年12月23日

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

posted @ 2019-12-23 08:42 冰花ぃ雪魄 阅读(1811) 评论(0) 推荐(0) 编辑

2019年11月29日

摘要: 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/21cnbao/article/details/7385161更多精华文章请扫描下方二维码关注Linux阅码场 GDB是GNU开源组织发布的一 阅读全文
posted @ 2019-11-29 03:17 冰花ぃ雪魄 阅读(516) 评论(0) 推荐(0) 编辑

2019年11月27日

摘要: 1. 查看numa相关信息,包括每个node内存大小,每个node中的逻辑cpu: numactl --hardware 阅读全文
posted @ 2019-11-27 14:49 冰花ぃ雪魄 阅读(793) 评论(0) 推荐(0) 编辑

2019年9月12日

摘要: a = np.arange(9).reshape((3,3)) 变换维度 np.max(a) 全局最大,也可以加参数,找某个维度最大的 print(np.max(a,axis=0)) #每列最大 print(np.max(a,axis=1)) #每行最大 print(np.where(a==np.m 阅读全文
posted @ 2019-09-12 04:38 冰花ぃ雪魄 阅读(297) 评论(0) 推荐(0) 编辑

2019年9月9日

摘要: 方法一:函数添加1 import sys2 查看sys.path3 添加sys.path.append("c:\\") 方法二:修改环境变量w用户可以修改系统环境变量PYTHONPATH 方法三:增加.pth文件,推荐!在site-packages添加一个路径文件,如mypkpath.pth,必须以 阅读全文
posted @ 2019-09-09 12:20 冰花ぃ雪魄 阅读(6281) 评论(0) 推荐(0) 编辑

2019年7月15日

摘要: https://www.jianshu.com/p/825cca41d962 引用的本质是,可以把jvm内存当做一个大的池化技术,池化技术最重要的是逐出策略。那么,这三种引用对应的逐出策略是不一样的,具体可以看上面链接里的介绍。简单来说,强引用的逐出策略是,如果一个对象没有了强引用,就逐出。软引用是 阅读全文
posted @ 2019-07-15 15:39 冰花ぃ雪魄 阅读(163) 评论(0) 推荐(0) 编辑

2019年2月3日

摘要: Gc调优的目标:1.降低停顿时间 2.提高吞吐量 3.避免full-gc 调优可以使用的手段:1.各个内存区的大小调整:堆,年轻代,老年代,方法区等等2.减少短暂对象的存活时间,提高长期对象的复用率(对象池,cache,永久区等等),减少不必要的垃圾的生产。3.调整对象的晋升:晋升阈值,surviv 阅读全文
posted @ 2019-02-03 15:08 冰花ぃ雪魄 阅读(661) 评论(0) 推荐(0) 编辑

2019年1月31日

摘要: 寻找垃圾对象的算法:1. 引用计数(无法处理循环引用) 2. 根寻法(被广泛引用在gc算法中) 清理垃圾的算法: 1. 标记复制 2. 标记清理 3. 标记整理 分代算法的好处: 1. 分代处理,可以减少一次处理的内存大小,减少停顿时间。 2. 不同的代有不同的特点,再加上有针对性的gc算法和代码优 阅读全文
posted @ 2019-01-31 15:05 冰花ぃ雪魄 阅读(199) 评论(0) 推荐(0) 编辑

2019年1月25日

摘要: 线程安全:多个线程之间的切换不会导致该接口的执行结果存在二义性。 分布式一致性:数据的多份副本,当对一个副本进行修改时,其它的副本的值也要与其保持一致。 数据库一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。保证数据库一致性是指当事务完成时,必须使所有数据都具有一致的状态。 阅读全文
posted @ 2019-01-25 17:59 冰花ぃ雪魄 阅读(345) 评论(0) 推荐(0) 编辑
 
摘要: https://stackoverflow.com/questions/556405/what-do-real-user-and-sys-mean-in-the-output-of-time1 https://blog.gceasy.io/2016/12/08/real-time-greater-t 阅读全文
posted @ 2019-01-25 11:11 冰花ぃ雪魄 阅读(241) 评论(0) 推荐(0) 编辑
 
点击右上角即可分享
微信分享提示