vm.swappiness 매개 변수는 실제로 무엇을 제어합니까?


36

커널 설명서에 따라 :

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
그렇습니다. 교환 애매합니다 ;-)
–aphink

답변:


27

커널 버전 2.6.28부터 Linux는 LRU ( Split Least Recent Used) 페이지 교체 전략을 사용합니다. 프로그램 텍스트 또는 공유 라이브러리와 같은 파일 시스템 소스가있는 페이지는 파일 캐시에 속합니다. 파일 시스템 백업이없는 페이지를 익명 페이지라고하며 응용 프로그램 등을 위해 예약 된 스택 공간과 같은 런타임 데이터로 구성됩니다. 일반적으로 파일 캐시에 속하는 페이지는 메모리에서 제거하기에 더 저렴합니다 (필요할 때 디스크에서 간단히 읽을 수 있기 때문에). . 익명 페이지에는 파일 시스템 백업이 없기 때문에 저장할 스왑 공간이 없으면 프로그램에서 필요로하는 한 메모리에 남아 있어야합니다.

vm.swappiness옵션은에 get_scan_count()정의 된대로 작동 mm/vmscan.c합니다. get_scan_count()제거 할 페이지를 찾을 때 익명 및 파일 LRU 목록을 얼마나 적극적으로 스캔해야하는지 결정합니다. 각 사례의 값은 시스템의 변화하는 작업 부하를 고려하기 위해 최근 참조가 이전 참조보다 가중치가 높은 최근 회전 및 최근 스캔 비율의 부동 평균에 의해 결정됩니다.

vm.swappiness익명 페이지에 찬성 파일 캐시 페이지를 스와핑 사이의 균형을 변경하는 수정입니다. vm.swappiness익명 페이지에 지정된 우선 순위 값 이며 기본적으로 60으로 설정됩니다 . 파일 캐시에는 우선 순위 값 200이 주어지며 여기서 vm.swappiness수정자가 공제됩니다 ( file_prio=200-anon_prio). 즉, 기본적으로 우선 순위 가중치는 익명 페이지 ( anon_prio=60, file_prio=200-60=140) 를 선호 합니다. 그러나 시스템이 메모리 부족 조건에 가까운 경우 vm.swappiness0으로 설정 하지 않으면 익명 및 파일 LRU 목록이 모두 동일하게 스캔 됩니다.

하면 vm.swappiness(100)에 설정되어, 우선 순위는 (동일한 것 anon_prio=100, file_prio=200-100=100). vm.swappiness0으로 설정 하면 커널이 파일 캐시의 페이지를 위해 익명 페이지를 제거하지 못합니다.


file_prio의 교체를 변경하는 방법이 있습니까? 아니면 특정 디렉토리로 제한 하시겠습니까?
CMCDragonkai

13

스왑 될 페이지를 계산하는 데 사용되는 수식이 있습니다. 에서 vmscan.c당신이 알고리즘을 볼 수 있습니다 :

스왑 경향 = map_ratio / 2 + 조난 + vm_swappiness

여기서 swappiness는 스케일이며 일부 알고리즘에 추가되어 있으며이 매개 변수로 커널이 스왑해야 할 때 동작하는 방식을 제어 할 수 있습니다. 일부 비활성 메모리 페이지가 교체 될 확률을 백분율로 계산할 수 있습니다. swappiness를 100으로 설정하면 확률은 없지만 스왑을 보장하며 0으로 설정하면 빈 메모리가있는 한 커널이 전혀 스왑하지 않습니다.


6

엘리베이터의 "CLOSE DOOR"버튼이 종종 깨지거나 처음에는 아무 것도 연결되지 않았다고합니다 (Norman 1986 생각). 이로 인해 ersatz는 엘리베이터 조작 방법이 아니라 지나치게 급한 라이더를 진정시키는 방법을 제어합니다.

비슷한 방식으로 swappiness는 커널 술어에 대한 잘 정의 된 결정 론적 제어와 관련이없는 영향을 미칩니다. askubuntu.com의 @neon_overlord 이 언급 한 것처럼

대부분의 경우 교환 = 나쁜 것으로 생각하고 교환을 줄이지 않으면 시스템이 실제로 필요하지 않을 때 교환합니다. 둘 다 사실이 아닙니다. 사람들은 스와핑을 시스템이 다운되는 시간과 연관 시키지만 시스템은 다른 방식이 아닌 스왑 다운되기 때문에 스와핑됩니다. 스와핑이 눈에 띄는 페널티를 가질 수있는 특정 시간이 있다는 것은 사실이지만, 그 경우에 대한 스와핑을 줄이면 나중에 눈에 띄게 될 수있는 다른 방법으로 전체 시스템 성능이나 안정성이 떨어질 수 있습니다.

그래서 실제로 무엇을 제어합니까? 이미 제공된 정답과 더불어 한 가지 유효한 답변은 시스템을 더 잘 제어하고 노브를 돌리면 해당 제어를 의미있는 방식으로 적용 할 수 있다는 기대를 수정한다는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.