tcmalloc/jemalloc와 메모리 풀의 차이점(및 선택해야 하는 이유)은 무엇입니까?
tcmalloc/memoryalloc은 메모리 할당이 개선되었으며 메모리 풀도 메모리 할당 개선을 위해 도입되었습니다.그럼 이들 간의 차이점과 어플리케이션에서의 선택 방법에는 어떤 것이 있을까요?
프로그램의 요건에 따라 다릅니다.프로그램에 동적 메모리 할당이 더 많은 경우 사용 가능한 할당자에서 메모리 할당자를 선택해야 합니다. 그러면 프로그램에서 최적의 성능을 얻을 수 있습니다.
적절한 메모리 관리를 위해서는 적어도 다음 요건을 충족해야 합니다.
- 시스템에 데이터를 처리하기에 충분한 메모리가 있는지 확인합니다.
- 사용 가능한 메모리에서 할당하시겠습니까?
- 사용한 메모리/할당 해제된 메모리를 풀로 되돌리기(프로그램 또는 운영 체제)
적절한 메모리 매니저의 능력은 (최소한) 메모리 취득/할당/반환/델로케이션의 효율성에 근거해 테스트할 수 있습니다.(캐시 로컬리티, 관리 오버헤드, VM 환경, 소규모 또는 대규모 환경, 스레드 환경 등 많은 조건이 있습니다.)
tcmalloc과 jemalloc에 관해 비교한 사람이 많다.비교 내용 중 하나와 관련하여:
tcmalloc은 스레드 수가 적을 경우 할당당 CPU 사이클 측면에서 다른 모든 점수보다 높은 점수를 받습니다.jemalloc은 tcmalloc에 매우 가깝지만 ptmalloc(std glibc 실장)보다 우수합니다.
메모리의 오버헤드에 관해서는 ptmalloc에 이어 tcmalloc에 이어 jemalloc이 최고입니다.
전반적으로 젬록은 다른 사람들보다 점수가 높다고 할 수 있다.jemalloc에 대한 자세한 내용은 여기를 참조하십시오.
저는 다른 사람이 시행하고 출판한 테스트에서 인용한 것일 뿐 직접 테스트한 적은 없습니다.이것이 당신에게 좋은 출발점이 되기를 바라며, 당신의 응용 프로그램에 가장 적합한 것을 테스트하고 선택하기 위해 사용합니다.
이 의사에서 요약
Tcmalloc
Tcmalloc 기억 장치 관리 도서관 구글에 의해 대안 malloc glibc에 수입을 열고서.그것은 잘 알려 진 소프트웨어에서 크롬과 사파리 같은 사용되어 왔다.공식 시험 보고서에 따르면, ptmalloc가 2.8에 malloc와 자유를 실행하기 위해 약 300나노초가 걸린다.GHzP4기계( 작은 개체에).그 TCMalloc 버전은 똑같은 작업에 대해 50나노초가 걸린다.
- 작은 개체 할당
- Tcmalloc 각 스레드에 대한thread-local ThreadCache을 할당합니다.작은 메모리 ThreadCache에서 할당된다.게다가, 중앙 더미(CentralCache) 있다.언제 ThreadCache 충분치 않습니다, 그것 CentralCache에서 ThreadCache에 넣어 공간을 서로 차지할 것이다.
- 작은 개체(<>=32K)ThreadCache에서 큰 물체 CentralCache에서 할당됩니다.공간은 큰 물체에 의해 분배되 4k 페이지를 가지고 있고 여러개의 페이지 또한 여러가지 작은 물체에 ThreadCache로 나뉘어 져 절단할 수 있정렬되어 있다.
- 중앙 캐시 할당 관리
- 큰 개체(>32K 큰 용지)첫번째 4k하는 사람과 함께 CentralCache에서 할당되었으면 정렬되어 있다.
- 있었을 때 그 페이지에서 공짜로 공간이 가장 적합한 목록을 연결하면 페이지 공간 항상 크다.256개의 링크된 목록을 모두 통과해도 할당은 성공하지 못합니다.sbrk, mmap 및 /dev/mem을 사용하여 시스템에서 할당합니다.
- tcmalloc PageHeap에 의해 관리되는 연속 페이지는 span이라고 불립니다.span이 할당되지 않은 경우 span은 PageHeap의 링크 목록 요소가 됩니다.
- 휴지통
- 객체가 비어 있는 경우 주소 정렬에 따라 페이지 번호가 계산되고 중앙 배열을 통해 해당 스팬이 검색됩니다.
- 작은 개체인 경우 span은 크기 클래스를 알려준 다음 현재 쓰레드의 ThreadCache에 개체를 삽입합니다.이때 ThreadCache가 예산 값(기본값 2MB)을 초과할 경우 가비지 수집 메커니즘이 사용되지 않는 개체를 ThreadCache에서 CentralCache의 사용 가능한 중앙 목록으로 이동하기 위해 사용됩니다.
- 큰 개체일 경우 span은 개체가 잠긴 페이지 번호 범위를 알려줍니다.이 범위를 [p,q]라고 가정하면 먼저 페이지 p-1과 q+1이 있는 범위를 검색합니다.인접한 스팬도 비어 있는 경우 [p,q]가 있는 스팬에 머지한 후 이 스팬을 To PageHeap으로 재활용합니다.
- CentralCache의 중앙 빈 목록은 ThreadCache의 FreeList와 비슷하지만 첫 번째 수준의 구조를 추가합니다.
- 작은 개체 할당
제마록
jemalloc은 facebook에 의해 시작되었으며 freebsd의 libc malloc에 의해 처음 구현되었다.현재 파이어폭스와 페이스북 서버의 다양한 컴포넌트에 널리 사용되고 있습니다.
- 메모리 관리
- tcmalloc과 마찬가지로 각 스레드도 32KB 미만일 때 잠금 없는 스레드 로컬캐시를 사용합니다.
- Jemalloc은 64비트 시스템에서 다음과 같은 사이즈 클래스의 분류를 사용합니다.[8], [16, 32, 48, …, 128], [192, 256, 320, …, 512], [768, 1024, 1280, 3840] Large: [4 KiB, 8 KiB, …, 4072 MiB.
- 소형/대형 객체는 메타데이터를 찾는 데 일정한 시간이 필요하며, 거대한 객체는 글로벌 레드-블랙 트리를 통해 로그 시간 내에 검색됩니다.
- 가상 메모리는 논리적으로 청크로 분할되며(기본값은 4MB, 1024 4k페이지), 응용 프로그램스레드는 라운드로빈 알고리즘을 통해 첫 번째 malloc에 아레나를 할당합니다.각 경기장은 서로 독립되어 있으며 자체 청크를 유지합니다.청크는 페이지를 작은 개체 또는 큰 개체로 잘라냅니다.free()의 메모리는 어떤 스레드가 free()를 호출하는지에 관계없이 항상 소속된 아레나로 반환됩니다.
- 메모리 관리
비교하다
- jemalloc의 가장 큰 장점은 강력한 멀티코어/멀티스레드 할당 기능입니다.CPU에 코어가 많을수록 프로그램 스레드가 많아져 할당 속도가 빨라집니다.
- 많은 작은 메모리를 할당할 때, 젬알록의 메타데이터를 기록할 수 있는 공간은 tcmalloc보다 약간 커집니다.
- 대용량 메모리 할당을 할당하는 경우 tcmalloc보다 메모리 플래그멘테이션이 적습니다.
- Jemalloc은 메모리 할당의 세밀도를 더욱 세밀하게 분류하기 때문에 ptmalloc보다 잠금 경합이 줄어듭니다.
언급URL : https://stackoverflow.com/questions/9866145/what-are-the-differences-between-and-reasons-to-choose-tcmalloc-jemalloc-and-m
'programing' 카테고리의 다른 글
size of(char) != 1 또는 CHAR_B 이상의 시스템이 있습니까?IT > 8? (0) | 2022.07.31 |
---|---|
Linux 상의 다른 프로세스와 파일 기술자를 공유할 수 있습니까?아니면 로컬 프로세스입니까? (0) | 2022.07.31 |
Vue.js 디버깅메시지 문제 (0) | 2022.07.31 |
개인 메서드를 호출할 방법이 있나요? (0) | 2022.07.31 |
응용 프로그램을 배포할 때 "무제한 강도" JCE 정책 파일이 설치되지 않도록 하려면 어떻게 해야 합니까? (0) | 2022.07.31 |