查看: 527|回复: 1
|
配置 HugePages 提高设备性能 (BASH 脚本)
[复制链接]
|
|
本帖最后由 jasonmun 于 17-3-2018 02:55 PM 编辑
https://linux.cn/article-9450-1.html
“大内存页” (HugePages) 有助于 Linux 系统进行虚拟内存管理。
顾名思义,除了标准的 4KB 大小的页面外,它们还能帮助管理内存中的巨大的页面。
使用“大内存页”,你最大可以定义 1GB 的页面大小。
在系统启动期间,你能用“大内存页”为应用程序预留一部分内存。
这部分内存,即被“大内存页”占用的这些存储器永远不会被交换出内存。
它会一直保留其中,除非你修改了配置。
这会极大地提高像 Oracle 数据库这样的需要海量内存的应用程序的性能。
在虚拟内存管理中,内核维护一个将虚拟内存地址映射到物理地址的表,
对于每个页面操作,内核都需要加载相关的映射。如果你的内存页很小,
那么你需要加载的页就会很多,导致内核会加载更多的映射表。而这会降低性能。
使用“大内存页”,意味着所需要的页变少了。
从而大大减少由内核加载的映射表的数量。
这提高了内核级别的性能最终有利于应用程序的性能。
简而言之,通过启用“大内存页”,系统具只需要处理较少的页面映射表,
从而减少访问/维护它们的开销!
1) 检查
$ su
$ grep Huge /proc/meminfo
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
从上面输出可以看到,每个页的大小为 2MB(Hugepagesize),
并且系统中目前有 0 个“大内存页”(HugePages_Total)。
这里“大内存页”的大小可以从 2MB 增加到 1GB。
2) 运行下面的脚本可以知道系统当前需要多少个巨大页
# 根据你的目前内核, 可能需要修改 hugepages.sh, 不然程序不运行
$ wget https://github.com/yomun/linux-init/raw/master/linux/hugepages.sh
$ sh hugepages.sh
Recommended setting: vm.nr_hugepages = 13
2.1) /etc/sysctl.conf 中,
写入以下这行 (以上知道需要 13 页, 为了效果更好, 加多2页),
然后输入 sysctl -p 让它生效
$ gedit /etc/sysctl.conf
vm.nr_hugepages=15
$ sysctl -p
2.2) /etc/security/limits.conf 中,写入以下2行, 然后重启
$ gedit /etc/security/limits.conf
# 15 x 2 (MB) x 1024 = 30720
soft memlock 30720
hard memlock 30720
3) 检查
# Ubuntu
$ cat /sys/kernel/mm/transparent_hugepage/enabled
always [madvise] never
# Red Hat
$ cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
4) 禁用 “大内存页”
则在 /etc/grub.conf 中的 kernel 行
后面加上 transparent_hugepage=never,
然后重启系统 |
|
|
|
|
|
|
|
楼主 |
发表于 17-3-2018 02:36 PM
|
显示全部楼层
经过测试,
利用了 HugePages 的确优化了程序的启动. |
|
|
|
|
|
|
| |
本周最热论坛帖子
|