가상 메모리와 페이지 캐시는 어떻게 작동하나요?

가상 메모리와 페이지 캐시는 어떻게 작동하나요?

알아요:

가상 메모리는 사용자 공간과 커널 공간으로 나누어지며, 물리 메모리에 매핑됩니다. 사용자 프로세스가 파일에 액세스하면 커널은 프로세스 액세스(페이지 캐시)를 부여하기 전에 파일을 메모리에 캐시합니다.

하지만

페이지 캐시의 메모리 공간은 커널 공간에 의해 제한됩니까? 아니면 페이지 캐시 크기를 제한하는 Linux 구성 외에 다른 것이 있습니까?

답변1

페이지 캐시는 RAM에 저장됩니다. 원칙적으로 전체 물리적 메모리를 차지할 수 있습니다. 없는 이유는 메모리가 다른 용도로도 사용되기 때문입니다.

"익명"(스왑 지원) 메모리 할당은 페이지 캐시의 파일 지원 할당과 경쟁합니다. 이 둘은 메모리 관리 코드를 통해 균형을 이룹니다. 메모리 관리의 구체적인 동작은 매우 복잡합니다. 새 페이지 할당을 위한 여유 RAM이 없으면 Linux는 이전 스왑 백업 페이지 또는 이전 파일 백업 페이지를 제거할지 여부를 선택합니다. 구성 값을 사용하여 선택 항목의 균형을 조정할 수 있습니다 vm.swappiness.

Linux에서 지원하는 일부 아키텍처에는 가상 주소 공간이 부족합니다(32비트 또는 심지어 31비트만 :-). 이것은 실제로아니요페이지 캐시의 크기를 제한합니다. 페이지 캐시는 임시 가상 매핑 사용을 지원하기 위해 명시적으로 작성됩니다. 주요 소스를 확인하세요:https://www.kernel.org/doc/html/latest/vm/highmem.html

메모리의 다른 용도는 다음과 같습니다.

  1. 제거할 수 없고 캐시되지 않은 할당입니다. 커널 코드와 같은 것. 이러한 할당에는 를 사용하여 수행된 코어 내 할당도 포함되며 kmalloc(), 이는 (대부분?) "슬랩" 할당으로 표시됩니다. 다른 유형도 있습니다.

    피할 수 없는 메모리 할당의 예로는 전체적으로 매우 커질 수 있는 커널 네트워크 버퍼가 있습니다.

  2. "워터마크" 메모리. 이는 스트레스 상황에서 메모리 관리를 진행할 수 있도록 예약되어 있습니다. 예를 들어, 워터마크에 도달하고 이전 익명 페이지를 교환하여 다른 작업을 위한 공간을 만드는 데 일부 메모리가 필요할 때 이러한 예약이 사용될 수 있다고 생각합니다. 일반적으로 예약 공간은 메모리의 1~3%입니다(대형 시스템에서는 더 적음). 내 시스템의 "워터마크" 메모리 예약은 얼마나 됩니까? 소규모 시스템에서는 이 비율이 3%까지 높을 수 있으며 이는 "투명한 거대 페이지"와 관련이 있습니다.

관련 정보