AIRobot

AIRobot quick note


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

记一次linux大内存踩坑

发表于 2020-09-07
本文字数: 524 阅读时长 ≈ 1 分钟

内存变大后,索引表占了很大内存,tlb命中率也下降。

考虑从两点下手:

  1. 修改页框大小
  2. 使用大页内存

修改页框大小

kernel 2.6.30 menuconfig中没有页框大小配置项,这个版本还没有加入修改页框大小的功能。

找到page_types.h

1
#define PAGE_SHIFT    12

12就是4KB,打算修改成16即64KB。

修改后,编译失败。

大页内存

2.6.30支持大页内存,一般通过mount -t hugetlbfs和mmap来利用,但这导致需要修改不少程序代码。

还有一点就是程序使用的是否使用大量连续内存,否则会导致大量碎内存,使用内存池解决更好。

想不修改程序代码,考虑使用libhugetlbfs.so替换系统alloc。

这里又发现libhugetlbfs代码下的tests在2.6.30下编译不通过。原来是tests目录下一个文件打洞的标记此版本内核不支持(吐槽一下,官方doc写支持此版本,编译都不测一下吗)。反正是tests,冒险一下,先干掉。ok,编译通过。

又一坑。。。程序使用了tcmalloc,已经替换了一次malloc,所以这里还要在tcmalloc里写一个新的大页内存的malloc。

dpdk report bus error on arm64
gdb代码跳转调试
  • 文章目录
  • 站点概览
AIRobot

AIRobot

AIRobot quick note
130 日志
15 分类
23 标签
GitHub E-Mail
Creative Commons
  1. 1. 修改页框大小
  2. 2. 大页内存
0%
© 2023 AIRobot | 716k | 10:51