`
febird
  • 浏览: 254260 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

tcmalloc 要点

    博客分类:
  • C++
阅读更多

 

google.tcmalloc

线程缓存(thread cache)

加锁(locking)

加锁的开销是比较大的(cpu 要同步cache ),一般要几十个时钟周期,特别是cpu 较多的时候,锁冲突概率大大增加。

malloc

不是在进入malloc 就马上加锁,而是在 thread cache 耗尽后才加锁(用于从全局堆获取内存),加锁的频率被大大降低(通常情况下是几百倍)。

free

不是在每次free 时都加锁,而是在free 导致 local cache 空闲出整页内存时,才加锁将内存页交还给全局堆(global heap)

radix-tree

tcmalloc 使用的中心数据结构是radix-tree ,这是trie-tree 的一个变种。tcmalloc 中的radix-tree 更是大幅简化,相当于多层页表, 32 位环境下是 2 层, 64 位环境下是 3 。这样,对一个指针的查找可以在O(1) 的时间内完成,并且可以查找范围(在合并内存页时是必须的)。

Hash 也是O(1) ,但是Hash 不能按范围查找,再加上其它一些缺陷(hash 冲突、rehashO(1) 的常数项也较大等)hash 不适合tcmalloc

按尺寸分组

对小于一定尺寸(32K)malloc ,每种尺寸在一些连续的内存页上分配。这被称为size-class ,每种尺寸并不是完全等距的,请求的尺寸会按一定规则对齐到下一个size-class

使用size-classmalloc 出的内存就不需要在相邻的内存上(紧邻在malloc 出来的内存之前)做簿记(book keeping) 了。传统的malloc 需要这样的簿记,以便free 时能找到链接的块,并且得到正确的内存大小。

使用 size-class 不但可以省掉额外的内存消耗,并且,可以 size-class 对齐

malloc 时,按请求的尺寸查找 相应的size-class ,如果大于max-size-class32k ),就直接从全局堆分配,并且总是页对齐的。

  free 时,在radix-tree 中查找free 的内存地址,得到其所属的spanspan 就是一块连续多个页的内存),进而得到其它信息(如size-class 等,如果是大块内存则直接从全局堆free )。对于小块内存,大多数情况下,剩下的事情就是一个简单的链表操作。如果这次free 导致整个span 空闲,就将span 回收。

总结

tcmalloc 的巨大优势:

  • 线程缓存,大幅减少了加锁,更有效利用cpu cache

  • 使用size-class ,减少了小块内存的book-keeping ,并且能更好地对齐。

  • 总的开销更低

 

其他相关文档

http://code.google.com/p/google-perftools/

General Information and Documentation

tcmalloc.html documentation in Chinese (against perftools 0.94)

 

0
0
分享到:
评论

相关推荐

    Tcmalloc-v2.10

    **Tcmalloc-v2.10:深入理解内存管理和内存泄漏** Tcmalloc,全称为“Thread-Caching Malloc”,是Google开发的一款高效、优化的内存分配器,它被包含在gperftools库中,版本2.10提供了一系列性能优化和内存管理...

    tcmalloc编译好的lib文件和dll文件

    tcmalloc是Google开发的一种高效内存分配器,它是jemalloc的变种,主要设计目标是提高多线程环境下的内存分配性能。tcmalloc通过优化内存分配过程,减少了锁的竞争,提升了大规模并发应用的性能。在这个压缩包中,...

    tcmalloc排查内存泄漏的方法

    tcmalloc排查内存泄漏的方法 tcmalloc是一种高性能的内存管理库,它可以帮助开发者检测和解决内存泄漏问题。在本文中,我们将介绍如何使用tcmalloc来排查内存泄漏的方法。 安装gperftools 首先,我们需要安装...

    vs2003-tcmalloc静态链接库

    **VS2003-Tcmalloc静态链接库详解** 在软件开发中,内存管理是至关重要的部分,它关乎程序的性能、稳定性和资源利用效率。Tcmalloc是Google开发的一款高效的内存分配器,其全称为"Thread-Caching Malloc"(线程缓存...

    linux系统 64位下编译安装tcmalloc

    在Linux 64位系统上编译安装Google的tcmalloc是一个涉及到系统级编程和内存管理的高级操作。tcmalloc是Google开发的一种高效的内存分配器,它优化了C++标准库中的malloc和free函数,提供了更快速的内存分配和释放,...

    控制内存增长TCMALLOC.docx

    ### 控制内存增长TCMALLOC #### 一、引言 在现代软件开发过程中,内存管理是确保程序高效运行的关键因素之一。不合理的内存管理可能导致应用程序性能下降甚至崩溃。为了解决这一问题,Google开发了一款名为...

    tcmalloc源代码及编译安装教程

    安装tcmalloc所需的源代码,和完整编译安装应用过程。 unzip tcmalloc.zip tar -zxvf gperftools-2.1.tar.gz cd gperftools-2.1 ./configure --disable-cpu-profiler --disable-heap-profiler --disable-heap-...

    基于numa架构的tcmalloc内存管理算法

    在讨论基于NUMA架构的TCMalloc内存管理算法之前,我们先来深入了解NUMA架构和TCMalloc算法的概念及其在内存管理中的作用。 NUMA(Non-Uniform Memory Access)架构是一种多处理器架构,其中每个处理器(CPU)有其...

    tcmalloc 安装包

    These tools are for use by developers so that they can create more robust applications. Especially of use to those developing multi-... Includes TCMalloc, heap-checker, heap-profiler and cpu-profiler.

    tcmalloc 源代码工程

    These tools are for use by developers so that they can create more robust applications. Especially of use to those developing multi-... Includes TCMalloc, heap-checker, heap-profiler and cpu-profiler.

    Tcmalloc.zip

    **Tcmalloc详解** Tcmalloc,全称为Thread-Caching Malloc,是Google开发的一款高效内存分配器。它被设计用于提升多线程环境下的内存分配性能,通过将内存分配细化到线程局部存储(TLS,Thread-Local Storage)级别...

    LOK封装的TCMALLOC(TztMM).zip

    这个tcmalloc很出名了,是google出的内存管理模块,比传统模块控制更合理,能应付更高的并发,而且也更稳定. 不过这个模块不是系统自带的,没有原生安装,所以需要手动去安装操作,稍微有点麻烦.这个模块包含在google封装...

    TCMalloc代码框架

    项目简介:该项目实现了一个简易的高并发内存池框架,将内存池设计为thread cache、central cache、page cache三层架构,从而实现高效的多线程内存管理。 核心技术:链表、哈希桶、操作系统内存管理、单例模式的设计...

    tcmalloc

    TCM分配该存储库包含TCMalloc C ++代码。 TCMalloc是Google对C的malloc()和C ++的operator new的自定义实现,用于在C和C ++代码中进行内存分配。 TCMalloc是一种快速的多线程malloc实现。构建TCMalloc 是TCMalloc的...

    基于TCMalloc原理的C++高并发内存池设计源码

    本项目为基于TCMalloc原理设计的C++高并发内存池源码,包含21个文件,涵盖7个头文件、4个JSON配置文件、4个C++源文件、2个Markdown文件、1个Git忽略文件、1个LICENSE文件以及相关构建文件。该项目借鉴了Google开源的...

    tcmalloc库安装指南.txt

    tcmallc内存库的安装方法,然后在编译时将其静态链接到库cmimpl 。 target_link_libraries(cmimpl -pthread ) #######静态链接c++库################### SET_TARGET_PROPERTIES(cmimpl PROPERTIES LINK_FLAGS "-...

    nginx优化 使用Google的开源TCMalloc库

    如果显示类似下面的信息,即表示支持tcmalloc加速 (nginx八个线程都支持) nginx 31655 www 9w REG 8,1 0 479533 /tmp/tcmalloc/.31655 nginx 31656 www 11w REG 8,1 ...

    基于C++的TCMalloc内存优化模块设计源码

    本项目为基于C++语言的TCMalloc内存优化模块的设计源码,包含558个文件,主要包括199个C++源文件(.cc),142个头文件(.h),30个Python脚本(.py),27个Markdown文档(.md),以及相关图像文件(.png)、项目文件...

    MySQL 使用Google的TCMalloc库,提高MySQL的性能.docx

    TCMalloc,全称为Thread-Caching Malloc,是Google开发的一款高效内存分配器,包含在开源工具包"google-perftools"中。与传统的glibc库中的malloc相比,TCMalloc在内存管理和分配方面表现出显著的优越性,特别是在...

Global site tag (gtag.js) - Google Analytics