메모리 cgroup v1에서 스왑 메커니즘이 어떻게 구현되는지 알고 싶습니다.
현존하는 대부분의 도서(리눅스 커널 이해,전문적인 Linux 커널 아키텍처,Linux 가상 메모리 관리자에 대해 알아보기)cgroup을 전혀 언급하지 않고 여전히 2.6.x 커널의 이전 데이터 구조를 참조하고 있습니다. 또한 온라인으로 검색했지만 cgroup 구현에 대한 세부 정보를 찾지 못했습니다.
구체적으로, 메모리 cgroup이 있을 때 LRU는 어떻게 작동합니까? 글로벌 LRU, 즉 글로벌 활성/비활성 목록이 있습니까? 나는 이것이 사실이라고 생각합니다. 직관적으로 각 메모리 컨트롤러에는 별도의 in/active 목록 쌍이 있어야 합니다. 그러나 아직 명확하지 않습니다. 예를 들어, 다음과 같은 경우
[cgroup1]
/ \
[cgroup2] pid1
/ \
pid2 pid3
cgroup1과 cgroup2에는 각각 두 쌍의 활성/비활성 목록이 있습니까? 이 경우 cgroup1이 메모리 부족에 직면하고 일부 익명 메모리를 스왑 영역으로 교체해야 하는 경우 cgroup1의 kswapd는 cgroup2에 속한 일부 페이지를 교체할 가능성이 높습니다. 따라서 cgroup2의 활성/비활성 목록도 페이지 호출을 반영하도록 수정되어야 합니다.
그러나 계층 구조가 깊어지면 최상위 수준에서 교체하려면 모든 하위 목록을 수정해야 합니다. 이로 인해 성능 문제가 발생하지 않습니까?