운영 체제 파일 캐싱을 위해 Linux 커널에서 어떤 페이지 교체 알고리즘이 사용됩니까?

운영 체제 파일 캐싱을 위해 Linux 커널에서 어떤 페이지 교체 알고리즘이 사용됩니까?

Linux는 파일 캐싱을 위해 사용되지 않는 메모리 부분을 사용하고 필요할 때 공간을 정리합니다.

내 질문은 교체할 피해자 페이지를 어떻게 선택합니까? 여러 가지 알고리즘(LRU, FIFO, LFU 및 무작위 교체)이 있습니다.

알고 싶습니다 1) Linux 커널에서는 운영체제 파일 캐싱을 위해 어떤 페이지 교체 알고리즘을 사용합니까?

2) 가능하다면 시간이 지나면서 리눅스 커널이 어떻게 발전해왔는지 알고 싶습니다. 추세의 "합리적인" 변화를 고려할 때 알고리즘과 구현은 시간이 지남에 따라 변경될 수 있다고 생각합니다. 어떻게 찾을 수 있나요? 커널 소스 코드를 읽어야 합니까?

답변1

Linux 메모리 관리("MM")는 다소 신비스럽고 추적하기 어려운 것 같습니다.

Linux 문헌에는 메모리 관리 측면에서 LRU(Least Recent Used)가 광범위하게 언급되어 있습니다. 나는 언급된 다른 용어를 발견하지 못했습니다.

흥미로운 소개를 찾았습니다(처음 네 문단).이 기사비교할 수 없는 LWN.net에서. 가상 메모리 실습에서 기본적인 LRU를 구현하는 방법을 설명합니다. 읽다.

실제 LFU(가장 덜 일반적으로 사용됨) 교체는 가상 메모리에 실용적이지 않습니다. 파일 캐시 페이지에 액세스하는 데 사용될 때 mmap()커널은 페이지의 모든 읽기를 계산할 수 없습니다. 예를 들어 대부분의 프로그램이 메모리에 로드되는 방식입니다. 성능 오버헤드가 너무 높습니다.


이 단순한 개념을 뛰어넘는 Linux 버전 2.6.28-32에 대한 설계 개요는 다음과 같습니다.

http://linux-mm.org/PageReplacementDesign

파일 페이지에 Clock-PRO가 사용되었음을 나타냅니다. 그 위에 원본 종이가 있습니다. 오래된 것이 있습니다Clock PRO에 대한 설명LWN.net에는 실제 구현 세부 정보가 다시 포함되어 있습니다. 분명히 Clock-PRO는 "대부분의 시스템에서 사용되는" 변형인 "LRU 접근 방식을 넘어서려고 시도"합니다. 빈도에 더 중점을 두는 것 같습니다.

Linux-mm에는 Linux에서 Clock-PRO를 구현하기 위한 또 다른 설계 문서가 있습니다. 이것은 병합되는 것에 대해 이야기하지 않습니다.LWN은 몇 달 전에 이에 관한 기사를 발표했습니다. http://linux-mm.org/ClockPro근사

가장 최근의 설명은 Linux입니다.“사용된 몇 가지 아이디어”실제로 Clock-PRO에서"최첨단 사례와 다양한 최적화를 포착하기 위해 일부 수정과 다양한 알고리즘의 혼합".

위의 인용문은 질문에 대한 답변입니다아드리안 맥메나민. McMenamin은 계속해서 마무리했습니다.석사과정2011년에는 "워킹 세트 모델"을 기반으로 한 Linux 페이지 교체 수정이 테스트되었습니다. Linux 페이지 교체에 대한 간략한 설명이 포함되어 있습니다. "LRU의 변형"은 "데이터베이스 관리를 위한 2Q [Double Queue] 방법"이라는 제목으로 많은 참조를 제공하며 두 대기열 간의 이동과 기타 상태 전환을 설명하는 다이어그램이 있습니다. 그는 또한 Linux가 CLOCK-PRO의 부분 구현을 사용한다고 설명했습니다.

말씀하신 다른 가능성보다는 LRU 개념이 처음부터 내장되길 기대합니다. 가장 중요한 변화는 주파수에 더욱 중점을 둔 Clock-PRO 기반 기능의 도입입니다.

2013년에 Linux는 "충돌 감지 기반 파일 캐시 크기 조정" 기능을 제공했습니다. 이는 문제와도 관련이 있을 수 있습니다.

관련 정보