페이징을 고려한 가비지 수집기가 있습니까?


12

가비지 콜렉션은 회수 할 수있는 메모리를 찾기 위해 살아있는 모든 오브젝트를 방문해야합니다. (많은 세대가있는 것은 이것을 조금 지연시킵니다)

모든 것이 동일하므로 다른 블록을 페이징하고 일부 객체를 페이징하기 전에 이미 RAM으로 페이징 된 객체를 먼저 방문하는 것이 좋습니다.

또 다른 가능성은 OS가 프로세스에서 램 페이지를 가져 가기를 원할 때 GC에 페이지를 넘길 필요없이 포기할 수있는 페이지가 있는지 먼저 묻습니다. GC는 대부분 페이지에서 객체를 이동하여 수행 될 수 있으므로 OS가 페이지를 필요로하는 시간 제한 내에서 해당 페이지를 지울 수 있습니다.

그러나 GC의 작동 순서를 결정하는 OS 페이징 시스템과 통합되는 가비지 수집기를 리콜 할 수 없습니다.


정확하게 페이징하는 것이 아니라 루비 엔터프라이즈 에디션 gc를 다시 작성하여 객체 메타 데이터를 별도의 페이지로 이동시켜 쓰기 페이지에서 복사에 미치는 gc의 영향을 줄였습니다.
user1937198


놀랍게도, afaik / afaict, 거의 모든 (?) gc 문헌은 추상적을 제외하고 OS 페이징을 분석하지 않는 것 같습니다. 아이디어 : 객체 자체와 분리 된 구조의 객체 사이의 포인터를 추적하는 메모리 할당 시스템은 포인터 자체 만 모든 객체 대신 단단히 압축 된 공간에서 (gc 중) 트래버스되기 때문에 더 로컬 / 페이징 친화적 일 수 있습니다 메모리에 분산 될 수있는 다양한 크기 (및 일부는 드물게 액세스되어 페이지로 표시됨) 약간의 오버 헤드가있을 수 있지만 구현에 따라 전체적으로 비용을 절감 할 수 있습니다.
vzn

플래시 드라이브는 메모리 배열을 블록으로 배열하는 것을 고려한 복사 가비지 수집 형식을 사용해야하지만 학술 문헌에서 그러한 것들이 얼마나 잘 논의되는지는 모르겠습니다. 해결해야 할 문제는 매우 다릅니다 (블록은 매우 큰 블록에서만 공간을 재활용 할 수 있기 때문에 플래시 드라이브에는 GC가 필요합니다) 데이터를 재활용하는 원칙이 도움이 될 수 있습니다.
supercat 2016 년

1
데이터 청크 크기와 관련하여 데이터 항목이 모두 작은 경우에 사용 된 패턴은 각 데이터 항목이 앞뒤로 할당되는 고정 크기 헤더와 가변 크기 데이터로 구성되도록하는 것입니다. 앞뒤로 할당됩니다. 테이블은 논리적 청크 주소를 물리적 주소에 매핑하고 각 청크의 여유 공간 크기를 유지했습니다. 각 스캔 후에는 얼마나 많은 공간이 죽었는지 식별 할 수 있습니다. 참조는 플래시에 저장되었으며 각 참조는 "논리 청크 # 7의 항목 # 3"형식을 가졌습니다. GC 사이클은 한 개의 청크에서 새로운 청크로 모든 라이브 데이터를 복사하고 ...
supercat

답변:


8

필자가 기억 하듯이, 복사를 통한 추적은 포인터 참조의 지역성을 향상시키는 경향이 있기 때문에 복사 수집기는 페이징 친화적입니다. 이는 링크를 따라갈 때 페이지 폴트가 적게 발생하는 프로그램 (뮤 테이터)에 긍정적 인 영향을 미치며, 추적으로 인해 페이지 폴트가 줄어들 기 때문에 다음 콜렉션 주기도 개선됩니다. 추적 아젠다 (포인터를 먼저 처리해야 함)는 데이터 지역성을 향상시키는 효과에 영향을 줄 수 있습니다. 이것은 다른 유형의 셀에서 다른 포인터에 대한 액세스 수에 대한 통계를 측정하여 향상시킬 수 있습니다.

이제 일반적으로 추적 수집기를 고려할 경우 일반적으로 아직 추적되지 않은 포인터를 추적하는 구조를 유지해야합니다. 동일한 페이지를 가리키는 모든 대기 포인터가 함께 유지되도록이 구조를 구성하는 것이 가능할 수 있습니다 (물론 이러한 포인터 목록을 유지하는 사용 가능한 기술에 따라 더 많은 공간이 필요할 수 있음). 메모리의 페이지에 대기 포인터가 남아 있지 않은 경우 항상 동일한 정책을 가리키는 가장 큰 대기 포인터 세트를 먼저 추적하는 것이 가능한 정책입니다.

세 번째 단락의 질문에 대해, 답변 한 후에 추가 된 사본 수집은 다시 답변입니다. 페이지가 완전히 비워 지므로 OS는 수집시 할당 된 실제 페이지 수를 줄일 수 있습니다. 마크 앤 스윕 수집기를 사용하면 전체 페이지 꿀벌이 무료로 발생하는 이벤트는 훨씬 드물기 때문에 특정 메커니즘을 고려할 가치가 없습니다.

이런 종류의 아이디어는 자연스럽고 아마도 일부 논문에 설명되어있을 것입니다. 그러나 나는 그것을 손에 기억하지 않습니다. Lisp GC의 초기 논문에는 이러한 아이디어 중 일부가 포함되어 있다고 생각합니다 (예 : car 또는 cdr을 먼저 따라야합니까?).

이 사본 수집 역할의 좋은 소식은 페이징이 사용 가능한 저장 공간을 늘리기 때문에 복사 수집에 친숙하다는 것입니다. 카피 컬렉터는 원칙적으로 실제 데이터 스토리지에 사용되는 것보다 두 배의 공간을 필요로합니다. 이제 페이징의 효과는 머신의 주소 공간 및 사용 가능한 실제 메모리에 따라 다릅니다. 구형 컴퓨터에서 실제 메모리는 사용 가능한 주소 공간보다 훨씬 적으므로 페이징은 실제로 공간 보너스이므로 복사 GC와 같은 정책을 허용합니다. 물리적 공간이 주소 공간만큼 큰 경우에도 GC를 사용하는 프로세스가 페이징없이 더 적은 주소 공간을 갖도록 공유 할 수 있습니다 ( 페이징 참조). 이러한 발언은 세대 별 수집기 사용으로 다소 감독됩니다. 이들은 일반적으로 이러한 특성으로 인해 젊은 세대의 사본 수집을 정확하게 사용하며, 젊은 세대는 대부분 수명이 짧습니다.

그런 다음 이전 질문에서 논의 된 세대 GC와 캐시 시스템의 모든 상호 작용이 있습니다. 세대 가비지 수집기는 본질적으로 캐시 친화적입니까?

이 문제에 대한 자세한 내용을 보려면 키워드 가비지 수집locality 와 같은 웹을 검색하십시오 .


복사 수집기가 실제로 추적보다 "로컬"이라는 아이디어가 의심 스럽습니다. 복사 수집기는 메모리 액세스 역학에서 "이전 공간"을 추적하는 것과 개념적으로 상당히 유사 해 보입니다 (거의 구분할 수 없을 수도 있음). 이것이 참조가 필요하다고 생각하십시오. 복사 공간이 새로운 공간에서 연속성을 개선 할 가능성이 있다고 말했다. 새로운 공간은 완벽하게 연속적으로 시작되지만이 "지역성"은 시간이 지남에 따라 감소하거나 저하됩니다.
vzn

글쎄, 당신은 대부분의 답을 찾았습니다. 따라서 모호하지 마십시오. 주제에 대한 기본 참조에 있습니다. 스토리지가 압축된다는 사실과 포인터 구조에 따라 논리적으로 가까운 데이터 셀 (포인터 재 할당으로 발전 할 수 있음)에 가까운 다른 데이터 셀로 대체되는 복사의 지역성.
babou

여전히 회의적이거나 모호합니다. 직관적으로 복사 / gc주기가 시작되면 이전 공간의 위치 및 / 또는 연속성이 나빠질 것입니다. locality는 (이전 공간에서) 읽기 (새 공간으로) 쓰기 관련이 있습니다. 이를 분석하기 위해 게슈탈트 / 비상 행동을 연구해야한다. 아마도 이것의 많은 부분은 경험적으로 만 그리고 효과적으로 이론적으로 만 효과적으로 / 정확하게 / 현실적으로 연구 될 수 있습니다.
vzn

나는 그것이 다른 많은 것들과 마찬가지로 문헌에 있다고 말하고 있습니다. 그러나 나는 그것을 검색 할 시간이 없으며 내 대답이 길고 정보로 가득 차 있다고 생각합니다., Google : 가비지 수집 복사본 지역 및 이전 질문에 대한 참조가 있습니다. 간신히해서 죄송합니다. 기차를 타십시오.
babou

죄송합니다 ...이 질문을 다른 질문과 혼동하십시오 ... 더 많은 것이 있습니다.
babou

8

Matthew Hertz와 Yi Feng의 Emery Berger가이 작업을 수행했습니다.

가비지 콜렉션은 수많은 소프트웨어 엔지니어링 이점을 제공하지만 가상 메모리 관리자와의 상호 작용은 좋지 않습니다. 기존 가비지 수집기는 특히 전체 힙 가비지 수집 중에 메모리에있는 페이지에 관계없이 응용 프로그램의 작업 집합 및 터치 페이지보다 훨씬 많은 페이지를 필요로합니다. 결과 페이징으로 인해 처리량이 급감하고 일시 정지 시간이 최대 몇 초 또는 몇 분으로 급격히 증가 할 수 있습니다.

페이징을 피하는 가비지 수집기를 제시합니다. 이 북마크 수집기는 가상 메모리 관리자와 협력하여 제거 결정을 안내합니다.

이것은 에머리의 이야기에 관한 비디오 이며 페이징이없는 가비지 수집 논문을 썼습니다.

몇 가지 이유로 인해 나중에 실제 작업이나 "실제"사용에 대한 작업은 많지 않습니다. 논문의 끝에 "우리는 북 마킹 수집 알고리즘의 동시 변형을 개발 중입니다" 라고 말하지만 추적 할 수는 없습니다.

CRAMM : 가비지 수집 응용 프로그램에 대한 가상 메모리 지원은 GC가 페이징을 덜 생성하도록 OS를 변경하는 것을 고려합니다.

가비지 콜렉션 추적에서 페이지 상주를 사용하여 균형 조정

우리는 객체를 재배치 할시기를 결정하기 위해 페이지 상주를 사용하는 대부분 복사 컬렉션의 확장을 소개합니다. 콜렉터는 거주 공간이 높은 페이지를 홍보하여 ​​불필요한 작업과 공간 낭비를 피합니다. 각 페이지의 상주를 예측하지만 예측이 정확하지 않은 경우 수집기는 할당 요청을 충족시키기 위해 사용하지 않은 공간을 회수합니다. 상주를 사용하면 수집기에서 복사 및 비 복사 콜렉션의 균형을 동적으로 조정할 수 있습니다. 이 기술은 순수한 복사 수집기보다 적은 공간을 필요로하며 개체 재배치 기능을 희생하지 않으면 서 개체 고정을 지원합니다. 다른 하이브리드와 달리 수집기는 응용 프로그램 별 구성에 의존하지 않고 변화하는 응용 프로그램 동작에 신속하게 대응할 수 있습니다. 우리의 측정 결과, 하이브리드는 다양한 조건에서 잘 작동합니다. 힙 공간이 충분하면 복사 콜렉션을 선호하지만 공간이 제한되면 비 복사 콜렉션으로 대체됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.