2014-09-11 2 views
3

저는 GHC로 컴파일 된 haskell 프로그램의 메모리 소비를 벤치마킹하고 있습니다. 이렇게하기 위해 다음 명령 줄 인수를 사용하여 프로그램을 실행합니다 : +RTS -t -RTS. 다음은 출력 예입니다. <<ghc: 86319295256 bytes, 160722 GCs, 53963869/75978648 avg/max bytes residency (386 samples), 191M in use, 0.00 INIT (0.00 elapsed), 152.69 MUT (152.62 elapsed), 58.85 GC (58.82 elapsed) :ghc>>. ghc 설명서에 따르면 다음과 같이 출력됩니다.GHC의 + RTS -t -RTS 옵션의 출력 이해

  • 전체 실행 동안 프로그램에서 할당 한 총 바이트 수입니다.
  • 수행 된 가비지 콜렉션의 총 수.
  • 평균 및 최대 "거주 기간"은 실제 데이터 양 (바이트)입니다. 런타임은 메이저 GC 동안 실제 데이터 양을 결정할 수 있습니다. 따라서 샘플 수가 주요 GC 수에 해당하는 이유는 (대개 비교적 작기 때문입니다).
  • RTS가 OS에서 할당 한 최대 메모리입니다.
  • 런타임 시스템 (INIT)을 초기화하고 프로그램 자체 (MUT, 뮤 테이터) 및 가비지 수집 (GC)을 실행하는 동안 CPU 시간 및 경과 벽시계 시간. 내 예에 적용

, 그것은, 160,722 가비지 컬렉션을 수행하는 제 프로그램은 약 82,321 MiB 크기 (1024^2로 나눈 바이트)를 섞은 것을 의미 51MiB/72MiB 평균/최대 메모리 만남을 가지며, 가장 191M 메모리에 할당 RAM 등등 ...

지금 알고 싶습니다.»평균 및 최대 "레지던트"(실제 데이터의 양을 바이트 단위로 비교 한 것입니다)»RTS가 할당 한 피크 메모리 운영 체제«? 그리고 또한 : 대략 120M의 나머지 공간을 사용하는 것은 무엇입니까?

더 많은 정보를 얻으려면 here이 지적되었지만 명확하게 밝히지 않은 것은 알고 싶습니다. 또 다른 source (5.4.4 두 번째 항목)은 가비지 수집에 120M 메모리가 사용된다는 것을 암시합니다. 그러나 그것은 너무 모호합니다 - 나는 인용 가능한 정보원이 필요합니다.

제발, 내 질문에 좋은 출처로 증거로 답변 할 수있는 사람이 있습니까?

친절에 감사드립니다!

답변

1

"resident"크기는 보유한 하스켈 데이터의 양입니다. 실제로 OS에서 할당되는 메모리 양은 더 클 수 있습니다.

  • RTS는 "블록"으로 메모리를 할당합니다. 프로그램에 7.3 블록의 RAM이 필요한 경우 RTS는 8 블록을 할당해야하며 그 중 0.7 블록은 빈 공간입니다.

  • 기본 가비지 수집 알고리즘은 2- 공간 수집기입니다. 즉, 공간 A가 채워지면 공간 B (완전히 비어 있음)가 할당되고 모든 라이브 데이터가 공간 A에서 공간 B로 복사 된 다음 공간 A가 할당 취소됩니다. 즉, 잠시 동안 실제로 필요한만큼 2 배의 RAM을 사용합니다. (I는 스위치가 느리지 만 적은 RAM을 사용하는 1-공간 알고리즘을 사용하는 곳있다 생각합니다.)

도 (당신은 제비가 특히) 스레드를 관리하기위한 오버 헤드가하고있을 수 있습니다 몇 가지 다른 것들.

난 당신이 이미 GC 기술에 대해 얼마나 알고 있는지 모르겠지만, 당신이 읽는 시도 할 수 있습니다 :

+0

당신이 살고 무엇인지 설명 할 수 데이터 (그리고 아마도 또한 죽은 데이터«)입니까? 또한 정보를 백업하는 링크를 제공하고 GHC의 가비지 콜렉션이 어떻게 작동 하는지를 자세히 설명해 줄 수 있습니까? 매우 좋을거야. 종류는 안부한다! – user3389669

+0

나는 GC에 대해 많이 모른다. 그래서 introductive literature는 훌륭 할 것이다. 언급 한 논문은 세부 사항으로 너무 많이 들어가서 제 시나리오를 해석하는 데 도움이되지 않습니다. 프레젠테이션은 이해하기 쉽지만 요점은 모르겠습니다. – user3389669