一种基于gperftools的内存管理方法与流程

文档序号:13876105阅读:1072来源:国知局

本发明涉及服务器内存管理领域,具体涉及一种基于gperftools的内存管理方法。



背景技术:

glibc是gnu发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。由于glibc囊括了几乎所有的unix通行的标准,可以想见其内容包罗万象。而就像其他的unix系统一样,其内含的档案群分散于系统的树状目录结构中,像一个支架一般撑起整个操作系统。在gnu/linux系统中,其c函式库发展史点出了gnu/linux演进的几个重要里程碑,用glibc作为系统的c函式库,是gnu/linux演进的一个重要里程碑。

在linux操作系统中,目前使用的glibc库中的内存管理在多线程环境中申请内存时会有大量的锁的竞争,内存的申请与释放的效率比较低,而gperftools提供了一种基于线程缓存的内存管理库,提升多线程并发环境下访存性能,通过基于gperftools改进后的内存管理库可以结合内存大页机制进一步提升多线程并发环境下的访存性能。gperftools是google开发的一款非常实用的工具集,主要包括mallocfree内存分配器tcmalloc;基于tcmalloc的堆内存检测和内存泄漏分析工具heap-profiler,heap-checker;基于tcmalloc实现的程序cpu性能监测工具cpu-profiler。上述所说的三种工具在服务器进程的性能分析监控,定位内存泄漏,寻找性能热点,提高mallocfree内存分配性能的各个方面上都非常成功。

在linux操作系统中,使用的是gperftools提供的内存管理方法,使用线程缓存减少内存申请时的锁的竞争,通过替换当前环境中使用的malloc及free函数,使用新的malloc及free函数。linux系统下使用gperftools虽然能够利用线程缓存很好的解决内存申请时的锁的竞争问题,但该库在向系统申请内存页时没有使用大页机制,在内存量比较大的环境中访存的性能会由于tlb的大量miss而下降。

针对这种情况,

本技术:
发明一种基于gperftools的内存管理方法,通过本发明所述的内存管理方法,可以改进并实现在内存申请时将线程缓存机制与内存的大页机制相结合。



技术实现要素:

本发明的主要实现方式为将基于线程缓存的内存管理与系统的大页机制相结合,即减少了多线程环境中线程申请内存对锁的竞争,同时提升了访存时的tlb命中率,从而提升了访存性能。

具体地,本申请请求保护一种基于gperftools的内存管理方法,其特征在于,该方法具体包括如下步骤:

在系统中预先设置一定数量的大页;

在运行程序时,预先为每个线程缓存一部分内存;

如果线程申请内存,则直接从本线程的缓存中获取内存;

当线程缓存中的内存不足时向系统申请内存时使用预先设置的内存大页机制,并将内存放入线程缓存中。

如上所述的基于gperftools的内存管理方法,其特征还在于,在系统中预先设置一定数量的大页是通过/proc/sys/vm/nr_hugepages在系统中设置一定数量的大页。

如上所述的基于gperftools的内存管理方法,其特征还在于,该内存管理方法还可以扩展到smp环境下的多线程运行环境。

附图说明

图1、本发明所述内存管理方法的流程示意图

具体实施方式

本方法的具体实现是由多线程内存分配管理模块、系统内存申请模块两个模块实现。其中多线程内存分配管理模块用于基于线程缓存的内存分配管理,系统内存申请模块用于当线程缓存中的内存不足时向系统申请内存。

多线程内存分配管理模块的主要功能是,先为每个线程缓存一部分内存,当线程申请内存时直接从本线程的缓存中获取内存,避免了锁的竞争,加快内存分配效率;当线程缓存中的内存不足时向系统申请内存并将内存放入线程缓存中。

系统内存申请模块的主要功能是,首先通过/proc/sys/vm/nr_hugepages在系统中设置一定数量的大页,然后当向系统申请内存时使用内存大页机制,提升访存时的tlb命中率,从而提升系统的访存性能。下面通过一个实施例对本发明所述的具体实现步骤进行说明。

具体流程如图1所示。

在系统中预先设置一定数量的大页;

在运行程序时,预先为每个线程缓存一部分内存;

如果线程申请内存,则直接从本线程的缓存中获取内存;

当线程缓存中的内存不足时向系统申请内存时使用预先设置的内存大页机制,并将内存放入线程缓存中。

显而易见地,上面所示的仅仅是本发明的一个具体实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据上述实施例获得其他的技术方案,以及在本发明保护的范围内做出的等同变化均应落入本发明的保护范围内,都属于本发明保护的范围。

综上所述,本发明所述的方法还可以扩展到smp环境下的多线程运行环境,使用该方法后也可以提升系统的访存性能。



技术特征:

技术总结
本申请发明一种基于gperftools的内存管理方法,通过本发明所述的内存管理方法,可以改进并实现在内存申请时将线程缓存机制与内存的大页机制相结合,即减少了多线程环境中线程申请内存对锁的竞争,同时提升了访存时的TLB命中率,从而提升了访存性能。

技术研发人员:刘长生
受保护的技术使用者:郑州云海信息技术有限公司
技术研发日:2017.11.03
技术公布日:2018.03.06
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1