메모리 압축에 관한 LWN 기사Linux 커널에서 메모리 압축을 호출할 수 있음을 나타냅니다.
노드 번호를 /proc/sys/vm/compact_node에 기록하여 지정된 NUMA 노드에서 압축이 발생하도록 합니다.
언제 시스템 항목에 노드 번호를 써야 합니까? 내 말은 무엇을 감지하거나 읽은 다음 시스템 항목에 노드를 써야 한다는 뜻입니까? 나의 기준은 무엇이어야 하는가? 시스템 항목을 작성하기 전에 이를 어떻게 측정해야 합니까?
(…) 또 다른 문제는 상위 페이지를 할당하려고 시도하는 동안 시스템이 실패한다는 것입니다. 이 경우 직접 재활용을 통해 페이지를 해제하는 것보다 압축이 더 나은 대안으로 작동합니다. 압축 알고리즘은 명시적인 트리거 없이 유휴 상태로 유지됩니다. 페이지를 이동하면 비용이 발생하므로 필요하지 않은 경우 피하는 것이 가장 좋습니다.
시스템이 실패하도록 허용한다는 것은 무엇을 의미합니까? 어떤 면에서 실패했나요? 이 실패를 어떻게 감지할 수 있나요? 실패는 더 높은 순서의 페이지를 할당하라는 간단한 요청이 거부되었음을 의미합니까? 이 경우 압축 알고리즘이 자동으로 실행되나요?
내 요구 사항: 시스템 상태와 메모리 조각화를 파악하여 메모리 압축을 트리거하고 싶습니다. 실제로 실행하기 전에 압축이 도움이 되는지 확인하고 싶습니다.
답변1
대부분의 경우 커널 내부에 할당되는 메모리는 페이지 크기보다 작거나 실제 메모리가 아닌 가상 메모리에서만 연속적으로 할당됩니다. 논문에 따르면 더 높은 순서의 페이지 할당이 실패하는 경우(즉, 커널이 여러 페이지를 요청하는 경우)실제 메모리에서 연속적)는 자동으로 압축을 트리거합니다. 이는 매우 특이한 일이므로 자주 발생해서는 안 됩니다.
연속 페이지를 사용하기 위해 커널이 필요하지 않은 한,측정이것이 귀하의 워크로드에 있어 성능에 매우 중요(또는 적어도 관련이 있음)하므로 방해하지 않는 것이 가장 좋습니다.