답변:
커널 2.6.28부터 Linux는 LRU ( Split Least Recent Used) 페이지 교체 전략을 사용합니다. 프로그램 텍스트 또는 공유 라이브러리와 같은 파일 시스템 소스가있는 페이지는 파일 캐시에 속합니다. 파일 시스템 백업이없는 페이지를 익명 페이지라고하며 응용 프로그램 등을 위해 예약 된 스택 공간과 같은 런타임 데이터로 구성됩니다. 일반적으로 파일 캐시에 속하는 페이지는 메모리에서 제거하는 데 더 저렴합니다 (필요할 때 디스크에서 간단히 읽을 수 있기 때문에). . 익명 페이지에는 파일 시스템 백업이 없기 때문에 저장할 스왑 공간이 없으면 프로그램에서 필요로하는 한 메모리에 남아 있어야합니다.
스왑 파티션으로 인해 시스템 속도가 느려지 는 것은 일반적인 오해입니다 . 스왑 파티션이 없다고해서 커널이 메모리에서 페이지를 제거하지 않는다는 의미는 아니며, 어떤 페이지를 제거할지에 대한 커널의 선택이 적다는 것을 의미합니다. 사용 가능한 스왑의 양은 스왑 사용량에 영향을 미치지 않습니다.
기본적으로 커널 메모리 계정 정책이 메모리를 초과 커밋 할 수 있기 때문에 Linux는 스왑 공간이 없을 경우 대처할 수 있습니다 . 단점은 실제 메모리가 소진되고 커널이 익명 페이지를 디스크로 스왑 할 수없는 경우 메모리 부족 킬러 (OOM-killer) 메커니즘이 메모리를 비우기 위해 "호그"프로세스를 강제 종료하기 시작한다는 것입니다. 다른 프로세스.
이 vm.swappiness
옵션은 익명 페이지를 위해 파일 캐시 페이지 교체 간의 균형을 변경하는 수정 자입니다. 파일 캐시에는 임의의 우선 순위 값 200이 주어지며 여기서 vm.swappiness
수정자가 공제됩니다 ( file_prio=200-vm.swappiness
). 익명 페이지는 기본적으로 60 ( anon_prio=vm.swappiness
)으로 시작합니다 . 즉, 기본적으로 우선 순위 가중치는 익명 페이지 ( anon_prio=60
, file_prio=200-60=140
) 를 선호 합니다. 동작은 mm/vmscan.c
커널 소스 트리에 정의되어 있습니다.
특정 vm.swappiness
의 100
, 우선 순위는 (동일한 것 file_prio=200-100=100
, anon_prio=100
). 익명 페이지를 선호하여 파일 캐시의 페이지를 제거하지 않으려는 경우 I / O 헤비 시스템에 적합합니다.
반대로 설정 vm.swappiness
하는 0
파일 캐시에서 페이지에 찬성 익명 페이지를 퇴거에서 커널을 방지 할 수 있습니다. 프로그램이 대부분의 캐싱을 자체적으로 수행하는 경우에 유용 할 수 있으며 일부 데이터베이스의 경우가 이에 해당합니다. 데스크톱 시스템에서는 대화 형 기능이 향상 될 수 있지만 단점은 I / O 성능이 저하 될 수 있다는 것입니다.
기본값은이 두 극단 사이의 대략적인 중간 지로 선택되었을 가능성이 높습니다. 모든 성능 매개 변수와 마찬가지로 조정 vm.swappiness
은 단순한 느낌이 아니라 실제 워크로드와 비교할 수있는 벤치 마크 데이터를 기반으로해야합니다.
문제는 모든 요구에 맞는 하나의 기본값이 없다는 것입니다. swappiness 옵션을 10으로 설정하면 데스크탑에 적합한 설정이 될 수 있지만 기본값 60은 서버에 더 적합 할 수 있습니다. 다시 말해, 사용 사례 (데스크톱 대 서버, 응용 프로그램 유형 등)에 따라 swappiness를 조정해야합니다.
또한 Linux 커널은 디스크 캐시에 메모리를 사용합니다. 그렇지 않으면 RAM이 사용되지 않으며 효율적이지 않습니다. 캐시에 디스크 데이터가 있으면 다시 같은 데이터가 필요한 경우 메모리에서 가져옵니다. 디스크에서 데이터를 가져 오는 것이 디스크에서 다시 가져 오는 것보다 훨씬 빠릅니다. swappiness 옵션은 Linux 커널이 디스크 캐시를 축소하기 위해 디스크로 스왑 아웃하는 것을 선호하는 메커니즘입니다. 캐시에서 오래된 데이터를 제거해야합니까, 아니면 일부 프로그램 페이지를 스왑해야합니까?
위의 답변에 더 자세한 내용을 추가하십시오.
점점 더 많은 VM을 사용함에 따라 Linux 호스트는 이러한 클라우드 환경 중 하나에서 vm 일 수 있습니다. 예제 1과 2에서 우리는 실행중인 응용 프로그램과 그들이 소비하는 RAM의 양에 대한 좋은 아이디어를 얻었습니다. 3에서는별로