基于灵衢互联构建的鲲鹏超节点,操作系统提供服务器之间内存热插拔能力,并通过灵衢系统高阶服务提供内存借用和内存共享接口,实现超节点内内存削峰填谷、低时延共享等能力,助力虚拟化、数据库、大数据等业务创新。
特性介绍
当前不同服务器内存使用随业务负载变化,存在一些服务器内存不足,而另外一些服务器内存空闲,造成内存利用率不足。不同服务器部署同一种业务时需共享数据,但服务器间不支持同步内存语义访问,只能以通信的方式实现数据交换,难以做到百纳秒级低时延访问。
在鲲鹏超节点上,操作系统通过内存池化技术,实现内存借用和内存共享以解决上述痛点问题。
内存借用:将邻居节点空闲物理内存映射给其他节点,实现根据负载需求弹性扩缩内存
关键特性:
支持远端内存热拔出。
支持插入远端内存,并上线到NUMA。用户可透明使用远端内存,例如使用glibc的malloc/free接口申请远端内存,使用numactl -m绑定应用使用远端内存。
支持插入远端内存,并上线到字符设备。用户可通过open+mmap方式映射远端内存到应用进程内使用。
典型使用模式:
内存临时借用,削峰填谷
一借多,N倍扩展,超大内存
内存共享:同一内存多节点共享,实现基于内存语义的数据共享
关键特性:
支持创建共享内存区。
支持将共享内存映射给多个使用者。
典型使用模式:
LD/ST直通,基于内存语义的数据快速交换
一写多读,全局缓存池
优势分析
在鲲鹏超节点上,基于内存借用特性,可以实现业务场景性能优化。
数据库场景,利用内存池化技术减少算子落盘,OLAP性能提升20%;虚拟化场景,通过内存借用,将多个节点的碎片化内存整合利用,实现虚机超分,提升内存利用率。
证券极速交易场景,利用内存共享实现低时延通信,替代传统网卡、交换机,通信时延从微秒级降低到百纳秒级。数据库场景,利用内存共享实现行列转换列存数据共享,减少节点间数据重分布,提升20%OLAP多机并行查询性能。
上手教程
1、安装
ub-pkg-mem 提供 UB OS 的内存池化功能,安装方法:
yum install -y ub-pkg-mem ubs-engine ubs-engine-client-libs ubs-mem-shmem2、内核启动参数配置,需要重启生效,在/etc/grub2-efi.cfg文件中menuentry的linux行中配置如下字段:
pmd_mapping=100% numa_remote=nofallback,hugetlb_nowatermark,preonline3、使用,以内存借用为例
#include<iostream>#include"ubs_mem_def.h"#include"ubs_mem.h"int ubs_mem_lease_demo(){/* Initialize ubs-mem library... *//* Allocate 4M memory from other host in the default region. */std::string region_name = "default";size_t size = 0x400000UL;ubsmem_distance_t mem_distance = DISTANCE_DIRECT_NODE;uint64_t flags = 0;void *addr = nullptr;auto ret = ubsmem_lease_malloc(region_name.c_str(), size, mem_distance, flags, &addr);if (ret != UBSM_OK) {std::cerr << "Failed to allocate remote memory. ret: " << ret << std::endl;return -1;}/* Allocate memory succeeded. *//* Do your work here... *//* Free memory. */ret = ubsmem_lease_free(addr);if (ret != UBSM_OK) {std::cerr << "Failed to free remote memory. ret: " << ret << std::endl;return -1;}return 0;}
结语
未来,操作系统将继续围绕内存池化技术,从池化性能、时延、易用性等维度进一步优化演进,联合业务场景探索更多应用模式,助力鲲鹏超节点应用创新。