Linux 디스크 캐시(페이지 캐시)파일 데이터를 캐시하고 최대한 많은 RAM을 사용하는 데 사용됩니다.. 서버의 RAM을 업그레이드한 후 디스크가 허용하는 것보다 더 빠르게 대용량 파일을 다운로드하고 있었습니다. 그러나 파일이 이전에 한 번 다운로드된 경우에만 해당되며 이는 나에게 절대적으로 논리적입니다.
하지만 이것이 내 버퍼 크기보다 크거나 큰 파일을 사용하면 더 자주 액세스하는 캐시 파일을 모두 덮어쓰게 된다는 뜻인가요? 아니면 대용량 파일에 더 이상 액세스할 수 없게 된 후 "인기 있는" 파일을 "다시 크롤링"할 수 있는 지능형 메커니즘이 있습니까?
답변1
하지만 이것이 내 버퍼 크기보다 크거나 큰 파일을 사용하면 더 자주 액세스하는 캐시 파일을 모두 덮어쓰게 된다는 뜻인가요?
아니요, 캐시는 그보다 더 똑똑합니다. 페이지 캐시의 페이지는 비활성 목록과 활성 목록이라는 두 가지 목록에서 추적됩니다. 페이지가 실패하는 경우(즉, 디스크에서 데이터 읽기) 처음에는 비활성 목록에 추가되고 다시 액세스하면 활성 목록으로 승격됩니다. 페이지는 비활성 목록에서만 제거됩니다.
특히 이는 한 번 읽은 큰 파일이 여러 번 사용되는 작은 파일을 제거하지 않음을 의미합니다.
이는 또한 현재 보고 있는 동작을 설명합니다. 대용량 파일을 처음 다운로드하면 캐시로 읽혀지지만 웹 서버가 파일을 처리함에 따라 점차적으로 제거됩니다. 따라서 두 번째 다운로드는 캐시에서 시작되지 않지만 결국 캐시에 남아 있는 페이지를 따라잡게 됩니다. 두 번째 다운로드를 수행하면 해당 페이지가 캐시에 남아 있기에 더욱 적합해지고, 세 번째 다운로드는 캐시의 모든 내용을 찾습니다.
이 방법에 대한 자세한 지침을 찾을 수 있습니다.커널 소스 코드에서.
아니면 대용량 파일에 더 이상 액세스할 수 없게 된 후 "인기 있는" 파일을 "다시 크롤링"할 수 있는 지능형 메커니즘이 있습니까?
그러나 이는 커널이 사용하는 스마트한 메커니즘입니다.아니요(비슷한 예는 시스템이 조용할 때 커널이 사용되지 않은 페이지를 스왑하기 위해 이동한다는 지속적인 아이디어입니다. 그러나 이는 사실이 아닙니다.) 커널은 미래를 너무 많이 예측하려고 하지 않습니다. 이 "규칙"의 한 가지 예외는 블록 장치에서 미리 읽기를 수행하지만 그 이상은 수행하지 않는다는 것입니다.