커널 문서에 따르면:
This control is used to define how aggressive the kernel will swap
memory pages. Higher values will increase aggressiveness, lower values
decrease the amount of swap.
그러나 이는 다소 모호합니다. 매개변수가 궁극적으로 무엇을 제어하는지 알아내려고 노력 중입니다. 커널이 페이지 교체를 얼마나 적극적으로 시도하는지 조정한다는 것은 알고 있지만 커널 코드의 어떤 의사 결정 프로세스에 영향을 미치나요?
커널이 페이지를 교체하기 전에 페이지에 액세스해야 하는 시간을 조정합니까? 그렇다면 기본값 60은 무엇을 의미합니까? 증가/감소 1은 얼마나 변하나요? (공식이 있으면 좋을 것 같아요.)
아니면 액세스 빈도에 따라 페이지를 교환합니까?
아니면 다른 것입니까?
답변1
커널 버전 2.6.28부터 Linux는 다음을 사용합니다.가장 최근에 사용한 항목을 분할합니다.(LRU) 페이지 교체 전략. 파일 시스템 소스(예: 프로그램 텍스트 또는 공유 라이브러리)가 있는 페이지는 파일 캐시에 속합니다. 파일 시스템 백업이 없는 페이지를 익명 페이지라고 하며 애플리케이션용으로 예약된 스택 공간과 같은 런타임 데이터로 구성됩니다. 일반적으로 파일 캐시에 속한 페이지는 메모리에서 제거하는 것이 더 저렴합니다(이러한 페이지는 필요할 때 디스크에서 간단히 다시 읽을 수 있기 때문입니다). 익명 페이지는 파일 시스템을 지원하지 않으므로 이를 저장할 스왑 공간이 없는 한 프로그램이 필요로 하는 한 메모리에 남아 있어야 합니다.
이것vm.swappiness
get_scan_count()
옵션은 정의에서 중요한 역할을 합니다 mm/vmscan.c
. get_scan_count()
제거할 페이지를 찾을 때 익명 및 파일 LRU 목록을 얼마나 적극적으로 검사해야 하는지 결정합니다. 각 사례의 값은 최근 회전과 최근 스캔 비율의 부동 평균에 의해 결정되며, 시스템의 워크로드 변화를 고려하기 위해 최신 참조가 이전 참조보다 더 큰 가중치를 갖습니다.
이는 vm.swappiness
익명 페이지를 위해 스왑 파일 캐시 페이지 간의 균형을 변경하는 수정자입니다. anon_prio=vm.swappiness
익명 페이지에 할당된 우선순위 값입니다.기본 설정은 60입니다.. 파일 캐시의 우선순위 값은 200이며 이 값에서 vm.swappiness
수정자를 뺍니다 file_prio=200-anon_prio
. 이는 기본적으로( anon_prio=60
, file_prio=140
) 시스템에서 익명 페이지 재활용 비용을 파일 페이지 재활용 비용의 두 배 이상으로 간주한다는 의미입니다. 따라서 가 낮을수록 vm.swappiness
더 많은 파일 캐시 페이지가 익명 페이지로 교체됩니다. 그러나 시스템이 접근하면메모리가 부족한 상황, 익명 목록 및 파일 LRU 목록은 vm.swappiness
0으로 설정되지 않는 한 동일하게 검사됩니다.
100으로 설정 하면 vm.swappiness
우선 순위가 동일합니다( anon_prio=100
, file_prio=200-100=100
). 0으로 설정하면 vm.swappiness
커널이 파일 캐시의 페이지를 위해 익명 페이지를 제거하는 것을 방지할 수 있습니다.
답변2
어떤 페이지가 바뀔지 계산하는 공식이 있습니다. vmscan.c
다음 알고리즘을 볼 수 있습니다 .
swap_ratio=mapped_ratio/2+pain+vm_swappiness
여기에서 swappiness는 일부 알고리즘에 추가되는 척도이며 이 매개변수를 사용하면 커널이 교체되어야 할 때 커널이 작동하는 방식을 제어할 수 있습니다. 일부 비활성 메모리 페이지가 교체될 확률 백분율로 이를 계산할 수 있습니다. swappiness를 100으로 설정하면 확률은 없지만 스왑이 보장됩니다. 0으로 설정하면 커널은 빈 메모리가 있는 한 스왑을 전혀 시도하지 않습니다.
답변3
누군가는 엘리베이터의 "문 닫기" 버튼이 일반적으로 부러지거나 애초에 어떤 것과도 연결되지 않는다고 말했습니다(Norman 1986이었던 것 같습니다). 이는 대체 제어 장치를 엘리베이터를 조종하는 방법이라기보다는 지나치게 성급한 승객을 달래는 방법으로 만듭니다.
비슷한 방식으로, 교환성은 커널 조건자에 대해 잘 정의된 결정론적 제어와 관계없이 효과를 갖습니다. 지적한대로askubuntu.com의 @neon_overlord
대부분의 사람들은 교환 = 나쁘다고 생각하고 교환 가능성이 줄어들지 않으면 시스템은 실제로 필요하지 않을 때 교환합니다. 이 중 어느 것도 사실이 아닙니다. 사람들은 시스템이 멈추는 경우를 스와핑과 연관시킵니다. 그러나 스와핑은 대부분 시스템이 멈췄기 때문에 발생하는 것이지 그 반대가 아닙니다. 어느 시점에서 스왑을 하면 눈에 띄는 불이익이 있을 수 있지만 이 경우 스왑을 줄이면 나중에 명백해질 수 있는 다른 방식으로 전체 시스템 성능이나 안정성이 저하될 수 있습니다.
그래서 그것은 무엇을 하는가진짜제어? 이미 제공된 좋은 답변에 더해 유효한 답변은 시스템에 대한 더 많은 제어권에 대한 기대가 바뀌고 손잡이를 돌리면 의미 있는 방식으로 해당 제어권을 행사할 수 있다는 것입니다.