本文在浪潮信息云峦服务器操作系统KeyarchOS(简称KOS)环境下,对基于MGLRU技术进行内存回收时的冷页识别的精度优化效果进行了应用实践验证。
随着云计算、大数据、人工智能等技术的快速发展,数据呈现出爆发式增长趋势,同时驱动着算力持续提升,然而,传统DRAM并未实现同步扩展以满足应用需求,应用对内存容量和带宽不断提高的需求,推动着内存扩展技术不断发展,在此背景下,CXL成为解决内存扩展瓶颈的最有前景的技术;与DRAM内存相比,扩展内存面临高延迟、低带宽的技术挑战,为了解决这些挑战,分层内存技术应运而生。
背景
内存回收是操作系统中的一项重要功能,当系统内存紧张时,操作系统会尝试回收一些不常用的页面,将它们从内存中清除并写回到磁盘,或者直接释放回内存池。这个过程涉及到检查LRU链表,识别哪些页面是“冷”的,即最近没有被访问过的,这些页面是内存回收的主要目标。MGLRU算法就是对传统LRU算法的一种改进,它通过更细致的页面分类和回收策略,提高了内存管理的效率。
LRU存在的问题及MGLRU技术的改进
LRU(全称Least Recently Used)即最近最少使用算法,是一种常见的页面置换算法,用于管理计算机内存中的数据。当内存满时,操作系统需要决定哪个页面应该被换出(即写回到磁盘的交换空间或释放掉)以便加载新的页面到内存中。LRU算法会根据页面的访问历史来做出决策,优先换出那些最近最少被访问的页面。
基于LRU的内存回收机制存在冷热内存识别精度不够的问题,导致无法有效回收冷页。比如,LRU包括匿名页和文件页的Active LRU List和Inactive LRU List,决策太粗糙;文件页和匿名页各自进行页面活跃度排序,无法评估文件页和匿名页之间的冷热。另外,LRU还存在算法成本高的不足,比如当一个页面被许多进程共享的时候,需要通过反向映射技术找到所有进程的页表。
Multi-Gen LRU(MGLRU)是Linux内核中一种新的页面回收策略,旨在优化页面回收机制,并在高内存负载情况下提高性能。MGLRU通过引入多代(multi-generational)的概念将页面分为不同的世代,每一世代代表页面被访问的时间距离,页面在被访问时会从老一代移动到新一代,当需要内存回收时,会从最老的一代中回收页面,这种结构使得内核能够更细致地管理和回收内存页面。MGLRU还引入了分层的概念,Refault率较高的页面,在被回收时会先放回次老世代,防止过度回收。MGLRU利用空间局部性原理保持更多页面在年轻世代中,降低了回收时扫描查询的开销。
基于云峦KeyarchOS的MGLRU技术实践
内存回收主要涉及页面的回收和内存的再利用,通常由kswapd线程或者直接内存分配请求触发。当系统内存紧张时,kswapd线程会尝试回收一些不常用的页面。在MGLRU技术基础上,云峦KeyarchOS通过对内存回收时冷页识别的精度进行优化,提升了内存回收效率。云峦KeyarchOS的优化可以显著减少kswapd(内核交换守护线程)的CPU使用率,更有效地管理内存页面的回收;同时,在系统内存压力较大的情况下,提升应用性能。通过对内存压力较大时kswapd线程的CPU使用率和redis应用的性能进行测试,对云峦KeyarchOS基于MGLRU的优化效果进行实践验证。
当系统的可用内存不足时,kswapd会被唤醒来释放一些内存,以便为新的内存分配请求提供空间。kswapd通常以较低的优先级运行,以避免影响前台应用程序的性能。在内存压力较大的情况下,kswapd可能会变得非常活跃,导致系统性能下降。
测试程序运行过程中kswapd进程上具体函数的执行时间
b)开启MGLRU
开启MGLRU特性前,监测到scan_swap_map_slots和swap_offset_available_and_locked两个函数占据更多的CPU时间,分别为31.45%和27.74%;开启MGLRU特性后,scan_swap_map_slots和__slab_alloc两个函数占据的CPU时间分别为4.78%和6.23%。__slab_alloc函数的作用是在Slab分配器中分配一个对象,它涉及到内核对象的内存分配。开启MGLRU特性前后,统计前10个内核函数平均CPU使用时间分别为7.63%和3.85%,提升49.54%。说明开启MGLRU具有更高的内存回收效率。
在内存压力紧张的情况下,内存冷热页回收效率会直接影响Redis服务器在高并发情况下的性能。对开启MGLRU特性前后的Redis服务器在高并发环境下处理SET和GET命令的性能进行对比测试。
1) SET操作
对于SET操作,这里测试了开启MGLRU特性前后执行100万个请求的完成时间。结果显示开启MGLRU特性前,执行100万个SET操作的请求平均完成时间为9.19秒,即每秒可完成111307个SET操作的请求;开启MGLRU特性后,执行100万个SET操作的请求平均完成时间为7.75秒,即每秒可完成129061个SET操作的请求,性能提升为15.7%。
2) GET操作
对于GET操作,结果显示开启MGLRU特性前,执行100万个GET操作的请求平均完成时间为8.74秒,即每秒可完成116180个GET操作的请求;开启MGLRU特性后,执行100万个GET操作的请求平均完成时间为7.82秒,即每秒可完成127957个GET操作的请求,性能提升为10.5%。
小结
云峦KeyarchOS基于MGLRU技术的优化方法在内存冷页识别上效果明显,更有效地管理内存页面的回收。云峦KeyarchOS的技术实践结果说明基于MGLRU的优化技术在系统内存压力较大的情况下可显著提升应用性能,可在多种应用中显示出性能优势,包括Apache Cassandra、Hadoop、Redis、MongoDB等。
售前咨询
售后服务
回到顶部