방금 Linux에서의 스왑에 관한 내용을 읽었습니다. 왜 기본값이 60으로 설정되어 있는지 이해가 되지 않습니다.
나에 따르면 교환을 줄이려면 이 매개변수를 10으로 설정해야 합니다. 스왑은 내 하드 드라이브에 있으므로 내 RAM보다 훨씬 느립니다.
왜 커널을 이렇게 구성합니까?
답변1
커널 2.6.28부터 Linux는 다음을 사용합니다.가장 최근에 사용한 항목을 분할합니다.(LRU) 페이지 교체 전략. 파일 시스템 소스(예: 프로그램 텍스트 또는 공유 라이브러리)가 있는 페이지는 파일 캐시에 속합니다. 파일 시스템 백업이 없는 페이지를 익명 페이지라고 하며 애플리케이션용으로 예약된 스택 공간과 같은 런타임 데이터로 구성됩니다. 일반적으로 파일 캐시에 속한 페이지는 메모리에서 제거하는 것이 더 저렴합니다(이러한 페이지는 필요할 때 디스크에서 간단히 다시 읽을 수 있기 때문입니다). 익명 페이지는 파일 시스템을 지원하지 않으므로 이를 저장할 스왑 공간이 없는 한 프로그램이 필요로 하는 한 메모리에 남아 있어야 합니다.
이것이 일반적인 오해이다.스왑 파티션어떤 식으로든 시스템 속도가 느려집니다. 스왑 파티션이 없다고 해서 커널이 메모리에서 페이지를 제거하지 않는다는 의미는 아닙니다. 단지 커널이 제거할 페이지에 대한 선택권이 적다는 의미일 뿐입니다. 사용 가능한 스왑 양은 사용량에 영향을 미치지 않습니다.
Linux는 기본적으로 커널 메모리 통계 정책이 스왑 공간 부족에 대처할 수 있습니다.과도한 메모리 사용량. 단점은 물리적 메모리가 고갈되고 커널이 익명 페이지를 디스크로 교환할 수 없는 경우,메모리 부족 킬러(OOM-killer) 메커니즘은 메모리를 차지하는 "불량" 프로세스를 종료하여 다른 프로세스를 위해 메모리를 확보합니다.
이것vm.swappiness
옵션은 익명 페이지를 위해 파일 캐시 페이지를 교체하는 것 사이의 균형을 변경하는 수정자입니다. 파일 캐시에는 vm.swappiness
수정자( )를 뺀 임의의 우선순위 값 200이 지정됩니다 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
직관뿐만 아니라 실제 워크로드와 비교할 수 있는 벤치마크 데이터를 기반으로 해야 합니다.
답변2
문제는 단일 기본값이 모든 요구 사항을 충족할 수 없다는 것입니다. swappiness 옵션을 10으로 설정하는 것은 데스크탑에 적합한 설정일 수 있지만, 서버에는 기본값 60이 더 좋을 것입니다. 즉, 데스크탑과 서버, 애플리케이션 유형 등 사용 사례에 따라 호환성을 맞춤화해야 합니다.
또한 Linux 커널은 메모리를 디스크 캐시로 사용합니다. 그렇지 않으면 RAM이 사용되지 않습니다. 이는 효율적이지도 예상되지도 않습니다. 디스크 데이터를 캐시에 저장한다는 것은 동일한 데이터가 다시 필요한 경우 메모리에서 가져올 가능성이 높다는 것을 의미합니다. 거기에서 데이터를 가져오는 것이 디스크에서 다시 가져오는 것보다 훨씬 빠릅니다. swappiness 옵션은 Linux 커널이 디스크 캐시를 축소하기 위해 디스크로 교체하는 것을 선호하는 메커니즘입니다. 오래된 데이터를 캐시에서 제거해야 합니까, 아니면 일부 프로그램 페이지를 교체해야 합니까?
이 기사주제에 대해 어느 정도 밝힐 수도 있습니다. 특히 교류 동향을 추정하는 방법.
답변3
위의 답변에 자세한 내용을 추가합니다.
가상 머신을 점점 더 많이 사용함에 따라 Linux 호스트는 이러한 클라우드 환경 중 하나의 가상 머신이 될 가능성이 높습니다. 예제 1과 2에서는 실행 중인 애플리케이션과 해당 애플리케이션이 소비하는 RAM의 양에 대한 좋은 아이디어를 얻었습니다. 3. 그다지 많지는 않다
- 예 1
디스크가 매우 비싼 스토리지 어레이로 제공되고 IO가 매우 우수한 고성능 프라이빗 클라우드(대부분의 은행이 구입하는 데 수백만 달러를 소비하는 유형)입니다. 이 스토리지의 일부는 SSD 디스크로 지원되고 스핀들이 있는 일반 디스크로 지원되는 RAM(디스크 배열)에 있을 수 있습니다. 이 경우 VM이 보는 디스크는 액세스할 수 있는 RAM보다 약간 느릴 수 있습니다. 단일 가상 머신의 경우 스왑 영역과 메모리 간에 큰 차이가 없습니다. - 예제 2
는 예제 1과 동일하지만 단일 가상 머신 대신 수백, 수천 또는 그 이상의 가상 머신이 있습니다. 이 경우 서버(하이퍼바이저) RAM은 저렴하고 풍부한 반면, 스토리지 RAM은 상대적으로 비싸다는 것을 알 수 있습니다. RAM 요구 사항을 매우 비싼 스토리지 어레이에서 제공되는 하이퍼바이저 RAM과 SWAP으로 나누면 스토리지 어레이의 모든 RAM을 빠르게 사용한 다음 블록은 SSD에서, 마지막으로 스핀들에서 제공된다는 것을 알 수 있습니다. 갑자기 모든 것이 매우 느리게 움직이기 시작합니다. 이 경우 하이퍼바이저에서 대량의 RAM을 VM에 할당하고 모든 VM의 누적 효과가 영향을 미치므로 스왑성을 0(메모리 부족 상태를 피하기 위한 스왑만)으로 설정할 수 있습니다. VM 스토리지의 성능을 고려하여 스왑 가능성을 더 높게 설정하면 현재 상호 작용하지 않는 애플리케이션이 (대부분) 스왑 아웃되었기 때문에 사용되지 않는 RAM이 더 많아지기 때문에 성능이 크게 향상될 수 있습니다. - 예 3 SSD가 장착된 최신 노트북 또는 데스크탑. 메모리 요구 사항은 알 수 없는 것으로 간주됩니다. 사용자가 사용할 브라우저, 열려 있는 탭 수, 문서 편집, RAW 이미지 또는 비디오 편집 여부 등 모두 RAM을 소모합니다. 스왑성을 더 낮은 값으로 설정하고 다른 파일 시스템 조정을 수행하면 SSD에 쓰는 횟수가 줄어들어 지속 시간이 길어집니다.