tcmalloc, jemalloc 그리고 nedmalloc


복사

http://blog.naver.com/sorkelf/40189432780


TCMalloc

 

TCMalloc은 (Thread - Caching Memory Allocation) 의 약자로 구글에서 만든 메모리 할당 라이브러리 이다.

 

중앙메모리 관리자와 스레드별 메모리 관리자를 구분하여 32K이하의 작은 크기인경우에 메모리 할당/해제 요청은 스레드별 메모리 관리자가, 부족할 경우 중앙 메모리 관리자에서 얻어오는 형태를 띄고 있다.

메모리 할당시 불필요한 동기화 과정이 거의 없으므로 보다 좋은 성능향상을 얻을 수 있다.

 

 

 

TCMalloc에 문서에서는 32k 이하의 작은 크기인 경우에 대한 메모리의 할당 해제가 ptmalloc2보다 약 6배 빠르다고 하고 있다.


사용법은 매우 간단하다.

 

아래 사이트에서 최신 버전에 구글 퍼포먼스툴을 다운받고

 

https://code.google.com/p/gperftools/downloads/detail?name=gperftools-2.0.zip

 

프로젝트 빌드를 한뒤 생성되는 라이브러리를 사용하려는 해당 프로젝트에 링크 시켜주면 끝이다.

 

아래는 사용법에 관한 원문

 

Usage

To use TCmalloc, just link tcmalloc into your application via the "-ltcmalloc" linker flag.

You can use tcmalloc in applications you didn't compile yourself, by using LD_PRELOAD:

   $ LD_PRELOAD="/usr/lib/libtcmalloc.so" <binary>
</binary>

LD_PRELOAD is tricky, and we don't necessarily recommend this mode of usage.

 

 

또한 구글 퍼포먼스 툴에서는 

Heap Checker, Heap Profiler, CPU Profiler의 TCMalloc 이외에도 메모리 누수 디버깅, 프로파일링에 좋은 툴들을 제공하고 있다.

레퍼런스도 많이 존재하며 임베디드 및 iOS도 지원해서 보편적으로 사용중에 있다.

 

 

NedMalloc

 

Ogre3D에 새로운 메모리 할당자로 채택 된 NedMalloc은 Hoard, ptmalloc2 보다 빠르다고 한다.

c++ 코드로 이루어져있으며 윈도우에 최적화 되어 있다.

파일도 3개만 추가하면 되므로 프로젝트에 적용하기 용이하다..

 

 

To Use:

Drop in nedmalloc.h, nedmalloc.c and malloc.c.h into your project.

Configure using the instructions in nedmalloc.h. Run and enjoy.

 

To test, compile test.c. It will run a comparison between your system

allocator and nedalloc and tell you how much faster nedalloc is. It also

serves as an example of usage.

 

 

http://www.nedprod.com/programs/portable/nedmalloc/

 

홈페이지에서 말하는건.. tcmalloc은 서버프로세스에서 사용하는것이 좋음

 

 

JEMalloc

 

JEMalloc은 (Jason Evans)가 만들어서 JEMalloc이라 부르며 현재 페이스 북, 파이어폭스에서 사용하고 있는 메모리 할당 라이브러리이다.

http://www.canonware.com/jemalloc/download.html

 

 

 

위에 나와있는 도표 중 jemalloc이 가장 좋은 성능을 보이고 있지만, tcmalloc과의 큰 차이를 보이고 있진 않다.

Jason Evans도 실코어 8개 이상 컴퓨터에서는 jemalloc이 더 좋은 성능을 보인다고 이야기 해보았을때 아직까지는 두 개의 성능이 크게 차이 나지는 않는 듯 하다..


스택 오버플로우에 한 답변에는 아래와 같은 이야기가 있다..

 

tcmalloc은 메모리 풀을 사용하는 등의 정적인 스레드일 경우 효과적이며

jemalloc은 스레드를 생성하거나 파기할때의 효과적이다.

 

두개 다 프로젝트에서 사용해보고 더 나은 것을 찾는게 제일 낫지 싶다.

 

 그 외 조사해볼 라이브러리 - LKMalloc, HOARD, PTMalloc3, OpenBSD 등등..


+ Recent posts