swappiness가 기본적으로 60으로 설정된 이유는 무엇입니까?


109

나는 리눅스에서 swappiness에 관한 것들을 읽었다. 왜 기본값이 60으로 설정되어 있는지 이해할 수 없습니다.

나에 따르면이 매개 변수는 스왑을 줄이기 위해 10으로 설정해야합니다. 스왑은 하드 드라이브에 있으므로 메모리보다 훨씬 느립니다.

왜 커널을 그렇게 구성 했습니까?


2
@Mat swappiness 벤치마킹을 수행하는 방법에 대해서는 내용을 참조하십시오 .
Geremia

답변:


133

커널 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.swappiness100, 우선 순위는 (동일한 것 file_prio=200-100=100, anon_prio=100). 익명 페이지를 선호하여 파일 캐시의 페이지를 제거하지 않으려는 경우 I / O 헤비 시스템에 적합합니다.

반대로 설정 vm.swappiness하는 0파일 캐시에서 페이지에 찬성 익명 페이지를 퇴거에서 커널을 방지 할 수 있습니다. 프로그램이 대부분의 캐싱을 자체적으로 수행하는 경우에 유용 할 수 있으며 일부 데이터베이스의 경우가 이에 해당합니다. 데스크톱 시스템에서는 대화 형 기능이 향상 될 수 있지만 단점은 I / O 성능이 저하 될 수 있다는 것입니다.

기본값은이 두 극단 사이의 대략적인 중간 지로 선택되었을 가능성이 높습니다. 모든 성능 매개 변수와 마찬가지로 조정 vm.swappiness은 단순한 느낌이 아니라 실제 워크로드와 비교할 수있는 벤치 마크 데이터를 기반으로해야합니다.


4
솔리드 스테이트 장치에 OS를 설치하면 트레이드 오프에 어떤 영향을 미칩니 까?
gerrit

3
@gerrit 기본 저장 매체의 유형은 관련이 없습니다. 이러한 종류의 세부 사항은 메모리 관리 서브 시스템에 표시되지 않습니다.
Thomas Nyman

기본 저장 매체의 유형은 메모리 사용 관점과 관련이 없습니다. 수명을 늘리기 위해 매체가 제한된 양의 읽기 / 쓰기 (예 : 플래시 메모리)를 지원하는 스왑 성을 낮추는 것을 고려할 수 있습니다.
MatrixManAtYrService 1

2
@MatrixManAtYrService 내부 마모 수준 및 내장 이중화 덕분에 최신 SSD (이전 의견에서 언급 한 질문) 오류가 발생하기 전에 최대 2PB (!) 의 쓰기 가 지속되는 것으로 나타났습니다 . 이 실험에서 더 저렴한 드라이브조차도 공식 보증 등급 인 약 100TB를 훨씬 뛰어 넘는 오류가 발생하기 전에 300TB 동안 지속되었습니다. 적어도 내 의견으로는 워크 스테이션이나 랩톱의 SSD에 맞게 스왑을 조정하는 것은 실제로 보증되지 않습니다.
토마스 Nyman

2
@ThomasNyman 당신은 걱정할 가치가없는 대부분의 사용자에게 좋은 지적을합니다. 이 게시물로 데려 간 사례는 SD 카드의 스왑 공간과 관련이 있으며, 이는 약간의 경우입니다.
MatrixManAtYrService

9

문제는 모든 요구에 맞는 하나의 기본값이 없다는 것입니다. swappiness 옵션을 10으로 설정하면 데스크탑에 적합한 설정이 될 수 있지만 기본값 60은 서버에 더 적합 할 수 있습니다. 다시 말해, 사용 사례 (데스크톱 대 서버, 응용 프로그램 유형 등)에 따라 swappiness를 조정해야합니다.

또한 Linux 커널은 디스크 캐시에 메모리를 사용합니다. 그렇지 않으면 RAM이 사용되지 않으며 효율적이지 않습니다. 캐시에 디스크 데이터가 있으면 다시 같은 데이터가 필요한 경우 메모리에서 가져옵니다. 디스크에서 데이터를 가져 오는 것이 디스크에서 다시 가져 오는 것보다 훨씬 빠릅니다. swappiness 옵션은 Linux 커널이 디스크 캐시를 축소하기 위해 디스크로 스왑 아웃하는 것을 선호하는 메커니즘입니다. 캐시에서 오래된 데이터를 제거해야합니까, 아니면 일부 프로그램 페이지를 스왑해야합니까?

이 기사 는 주제에 대해 약간의 설명 을 해줄 수 있습니다. 특히, 스와핑 경향이 어떻게 추정되는지.


서버에 60이 더 적합한 이유를 모르겠습니다. 여유 RAM이 40 % 인 경우에도 서버가 있고 일부 프로세스가 교체됩니다. 나에게는 이해가되지 않습니다.
휴고

7
메모리에 액세스 할 가능성이 거의없는 경우 메모리 부분을 스왑으로 이동하는 것이 합리적입니다. 이렇게하면 Linux가 실제로 필요한 경우 상황에 대비할 수 있도록 실제 램을 가능한 한 많이 확보합니다.
재생


기사에 대한 링크는 죽었지 만 Wayback Machine
drs

링크 된 기사는 유익합니다. 공유해 주셔서 감사합니다.
Pistos

5

위의 답변에 더 자세한 내용을 추가하십시오.
점점 더 많은 VM을 사용함에 따라 Linux 호스트는 이러한 클라우드 환경 중 하나에서 vm 일 수 있습니다. 예제 1과 2에서 우리는 실행중인 응용 프로그램과 그들이 소비하는 RAM의 양에 대한 좋은 아이디어를 얻었습니다. 3에서는별로

  • 예제 1
    고성능 프라이빗 클라우드 (대부분의 은행이 수백만 달러를 지불 할 것이라고 생각)는 매우 좋은 IO를 가진 매우 비싼 스토리지 배열에 의해 디스크가 제공되는 클라우드입니다. 해당 스토리지의 일부는 SSD 디스크가 지원하는 RAM (디스크 어레이의 RAM)에 있고 스핀들이있는 일반 디스크가 지원할 수 있습니다. 이 상황에서 VM이 보는 디스크는 액세스 할 수있는 RAM보다 약간 느릴 수 있습니다. 단일 vm의 경우 스왑과 램간에 큰 차이가 없습니다.
  • 실시 예 2
    예제 1과 동일하지만 단일 vm 대신 수백, 수천 이상이 있습니다. 이 상황에서 스토리지 RAM이 비싼 (상대적으로 말하면) 서버 (하이퍼 바이저) RAM이 저렴하고 풍부하다는 것을 알 수 있습니다. 고가의 스토리지 어레이가 제공하는 하이퍼 바이저 RAM과 SWAP간에 RAM 요구 사항을 분할하면 스토리지 어레이의 모든 RAM을 신속하게 사용하고 블록은 SSD와 최종적으로 스핀들에 의해 제공됩니다. 갑자기 모든 것이 정말로 느려지기 시작합니다. 이 경우 모든 VM의 누적 효과가 성능에 영향을 미치므로 하이퍼 바이저에서 많은 RAM (하이퍼 바이저에서)을 VM에 할당하고 swappiness를 0 (메모리 부족 상태를 피하기 위해 스왑 만)으로 설정하려고합니다. 저장고
  • 예 3 SSD가 장착 된 최신 랩톱 또는 데스크탑. 메모리 요구 사항은 알 수없는 것으로 간주됩니다. 사용자가 사용할 브라우저, 탭 수, 문서, RAW 이미지 또는 비디오를 편집하는 경우 모두 RAM을 사용합니다. swappiness를 낮은 값으로 설정하고 다른 파일 시스템 조정을 수행하면 SSD 쓰기 횟수가 줄어들어 더 오래 지속될 수 있습니다.

3
최종 사용자 시스템에 대한 SSD 쓰기 내구성 문제가 과대 평가되었습니다. 최신 SSD는 일반적으로 수백 테라 바이트의 쓰기 볼륨을 유지합니다. 스왑 사용량이 많은 일반적인 데스크탑 시스템은 수년 동안 그 정도를 사용하지 않을 것입니다.
Jules
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.