安装obmm
用户态运行库
- 应用本地基础镜像源。
- 安装obmm用户态运行库。
yum install -y libobmm-*
内核启动参数配置
- 参数配置,在多个计算节点上分别执行。
在“/boot/efi/EFI/openEuler/grub.cfg”文件中menuentry的linux行中配置如下字段,需要重启生效。
pmd_mapping=100% numa_remote=nofallback,hugetlb_nowatermark,preonline ubfabric_addr=0x30200FF000 crash_kexec_post_notifiers
表1-1 参数说明。
参数 |
取值 |
说明 |
pmd_mapping |
格式:nn% 取值范围:1%-100% |
允许从特定的pfn范围分配连续内存,该范围的内核线性映射区粒度始终不大于PMD。pmd_mapping指定每个NUMA节点的该范围所占比例。 OBMM使用buddy_highmem分配器时,最多从每个NUMA节点分配pmd_mapping比例的内存。 |
numa_remote |
格式:字符串 |
将未使用的NUMA节点配置为远程节点,当启用CONFIG_NUMA_REMOTE配置项时,允许在这些节点上热插拔远程内存。默认所有未使用的NUMA节点均会被标记为远程节点,可通过启动参数numa_remote_max_nodes限制远程节点数量。 参数格式:[arg0][arg1] · preonline - 允许将未就绪内存上线并保持隔离状态,以提升上线效率。 · nofallback - 远程节点不会出现在其他节点的内存区域列表中,远程内存仅能通过显式指定节点进行分配。 · hugetlb_nowatermark - 在远程节点分配大页内存时忽略水位线检查,允许将所有内存作为大页分配。 · <int> - 设置远程NUMA节点的最大数量(整数限制)。 |
内核态驱动
- 插入obmm驱动。
modprobe obmm
- 数据库场景(配置hugetlb_pud表示OBMM申请内存的粒度会变为1GB)。
modprobe obmm mempool_allocator=hugetlb_pud mempool_size=0
- 虚机场景(配置hugetlb_pmd表示从2M借用)。
modprobe obmm mempool_allocator=hugetlb_pmd
- 容器场景。
modprobe obmm
- 默认为4KB。
- 插入obmm.ko时涉及如表3-2所示可配置参数(默认无需添加这些配置,有需求时配置即可)。仿真环境与物理机环境所需参数不同,见表 1-2。
表1-2 参数说明。
参数
取值
说明
mempool_size
默认值:1GB
单位:KB/MB/GB
该参数指定每个本地Numa维护的内存池的扩展上限(由于内存池的维护是动态的,仅能够保证内存池中的内存快速借出)。
mempool_refill_timeout
默认值:100
单位:毫秒
在本地内存不足的情况下,内存池会缩减为0,在检测到内存不足后,经过mempool_refill_timeout指定时间后,尝试重新扩充内存池。
skip_cache_maintain
默认值: false
单位:布尔
当前仿真环境未完整支持刷cache行为的仿真。为保证仿真验证和回片验证一致,添加此选项。仿真环境验证时必须打开该选项skip_cache_maintain=true,对于回片验证则需关闭skip_cache_maintain=false。
mempool_allocator
默认值: NULL
单位:字符串
配置obmm的内存来源。当前支持以下选项:
hugetlb_pmd: 使用pmd映射的hugetlb的方式申请内存。此时每个本地NUMA节点配置的hugetlb页面为申请范围(详见`/sys/devices/system/node/node${numa_id}/hugepages/hugepages-2048kB/`)。
hugetlb_pud: 使用pud映射的hugetlb的方式申请内存。此时每个本地NUMA节点配置的hugetlb页面为申请范围(详见`/sys/devices/system/node/node${numa_id}/hugepages/hugepages-1048576kB/`)。在此模式下,OBMM申请内存的粒度会变为1GB。该粒度会影响内存export和mempool申请内存。
buddy_highmem: 使用高端地址的方式申请内存。此时pmd_mapping覆盖的部分为申请范围,但是申请范围不保证能被完全申请,这些内存被本地使用时,会持续尝试申请。
mem_allocator_granu
默认值:参照说明
单位:字符串
字符串,用于指定当前obmm内存申请的最小粒度。支持常见内存大小输入方式。例:2M, 32M, 1G。根据mempool_allocator,相应支持的粒度也不同。
hugetlb_pmd默认2M。必须设置为2M。
hugetlb_pud默认1G。必须设置为1G。
buddy_highmem默认2M。可设置为高于2M的任意2的幂。