沈天真
作者沈天真·2021-07-24 11:23
售前支持·IPS

内存那些事儿----Huge Page on Power-II

字数 3521阅读 3204评论 0赞 1

系列文章,欢迎阅读

内存那些事儿----基础知识I

https://www.talkwithtrend.com/Article/255113

内存那些事儿----基础知识II

https://www.talkwithtrend.com/Article/255115

内存那些事儿----内存带宽

https://www.talkwithtrend.com/Article/255545

内存那些事儿----HBM和GPU算力

https://www.talkwithtrend.com/Article/255551

内存那些事儿----Huge Page on Power-I

https://www.talkwithtrend.com/Article/256329

接上文 ” 内存那些事儿----Huge Page on Power-I ”,继续介绍如何在Power服务器上配置使用Huge Page。

大致有2种方式,一种是和x86类似的方式,此时Linux操作系统可以直接安装在Power裸机上; 另外一种情况是Linux安装在 PowerVM的LPAR里面, 此时要在该Linux分区里使用huge page,稍微有点麻烦,需要综合使用 ASMI+HMC+GRUB 来配置。

普通方式配置

以 Redhat 7.x 为例,使用内核可调vm.nr_hugepages配置hugepages

ü 编辑/etc/sysctl.conf文件,并在nr_hugepages参数中指定hugepages的数量。该条目使参数在重新引导时保持不变,但在运行下一步中描述的' sysctl -p '命令之前不会生效。

vi /etc/sysctl.conf

vm.nr_hugepages = 10

ü 执行' sysctl -p '命令以启用hugepages参数。

sysctl -p

...

vm.nr_hugepages = 10

  注意:建议在配置hugepages之后重新启动系统,因为当系统启动时,拥有连续内存的空间(用于hugepages分配)的机会要大得多。

验证

ü 要验证hugepages参数设置,可以使用下面给出的两个方法中的任意一个:

检查文件/proc/meminfo:

cat /proc/meminfo | grep Huge

HugePages_Total: 10

HugePages_Free: 10

HugePages_Rsvd: 0

Hugepagesize: 2048 kB

解释:
HugePages_Total——大页面池的大小。
HugePages_Free -池中未使用的巨大页面的数量。
HugePages_Rsvd -承诺从池中分配但尚未分配的巨大页面数量。
HugePages_Surp -是“盈余”的缩写,是池中超过/proc/sys/vm/nr_hugepages值的巨大页面数。最大剩余的巨大页面数量由/proc/sys/vm/nr_overcommit_hugepages控制。

使用sysctl命令

sysctl a | grep nr_hugepages

vm.nr_hugepages = 10

Linux LPAR 配置 huge page

以 Redhat 8.x 为例,Huge Page Size=16GB

  1. 服务器下电,登录 ASMI
  2. 展开 “Performance Setup”.

  3. 选择 “System Memory Page Setup”,设置大页的数量
  4. 保存设置
  5. 服务器上电
  1. 登录到 HMC,选择需要配置的Linux LPAR,点击 memory 标签

刚才在ASMI 里面配置了10个大页页面,现在可以在这个LPAR上如下配置

“Minimum pages” —-> 4

“Desired pages” —–> 4

“Maximum pages” —–> 4

7. 保存配置,并激活分区

8. 使用 GRUB 配置Linux 操作系统启动参数

启动 Redhat 8.x

编辑 “/etc/default/grub” ,设置参数

GRUB_CMDLINE_LINUX=crashkernel=auto rd.lvm.lv=rhel_XXXX/root rd.lvm.lv=rhel_XXXX/swap biosdevname=0 hugepagesz=16G hugepages=4″

更新 grub

[root@XXXX ~]# grub2-mkconfig -o /boot/grub2/grub.cfg

Generating grub configuration file …

Generating boot entries from BLS files…

Done

重启 Linux 分区

[root@XXXX ~]# reboot

  1. 使用 libhugetlb tests 来验证huge page功能是否正常

挂载配置的大页

linux-zzyi:~ # mkdir /mnt/16G

linux-zzyi:~ # mount -o pagesize=16G -t hugetlbfs none /mnt/16G

check for huge-page mount

linux-zzyi:~ # mount | grep huge

cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)

hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)

none on /mnt/16G type hugetlbfs (rw,relatime,pagesize=16G)

安装,运行 libhugetlbfs 测试

git clone https://github.com/libhugetlbfs/libhugetlbfs.git

make

[root@XXXX libhugetlbfs]# make

VERSION

version update: 2.21

version string: 2.21

CC64 obj64/elflink.o

AS64 obj64/sys-elf64lppc.o

CC64 obj64/elf64lppc.o

CC64 obj64/hugeutils.o

CC64 obj64/version.o

version.c:3:19: warning: ‘libhugetlbfs_version’ defined but not used [-Wunused-const-variable=]

static const char libhugetlbfs_version[] = “VERSION: “VERSION;

^~~~

CC64 obj64/init.o

CC64 obj64/morecore.o

CC64 obj64/debug.o

….

….

Make check

[root@XXXXX libhugetlbfs]# make check

zero_filesize_segment (16G: 64): PASS

test_root (16G: 64): PASS

meminfo_nohuge (16G: 64): PASS

gethugepagesize (16G: 64): PASS

gethugepagesizes (16G: 64): PASS

HUGETLB_VERBOSE=1 empty_mounts (16G: 64): PASS

HUGETLB_VERBOSE=1 large_mounts (16G: 64): PASS

find_path (16G: 64): PASS

unlinked_fd (16G: 64): PASS

readback (16G: 64): PASS

truncate (16G: 64): PASS

shared (16G: 64): PASS

mprotect (16G: 64): PASS

mlock (16G: 64): PASS

misalign (16G: 64): PASS

fallocate_basic.sh (16G: 64): PASS

fallocate_align.sh (16G: 64): PASS

ptrace-write-hugepage (16G: 64): PASS

icache-hygiene (16G: 64): PASS

….

至此,介绍了在Power服务器上配置,使用 huge page 的方法

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

1

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广