더 나은 성능을 얻으려면 어떤 합리적인 교환 값을 구성해야 합니까?

더 나은 성능을 얻으려면 어떤 합리적인 교환 값을 구성해야 합니까?

안드로이드 시스템 최적화 과정에서는 Swapiness 값의 구성이 중요합니다. 값 경로는 입니다 /proc/sys/vm/swappiness. 일부 소스에서는 60으로 설정하는 것을 권장하고 다른 소스에서는 120으로 설정하는 것을 권장합니다. 일부 소식통에서는 최대값이 100이라고 주장하고 다른 소식통에서는 200이라고 주장하여 혼란스럽습니다.

내 시스템이 지원하는 최대값을 어떻게 확인합니까?

Stack Overflow에서 찾을 수 있는 링크:

답변1

5.8 이전 커널 버전에서는 최대값이 swappiness100이었고, 커널에서는 값이 200으로 늘어났습니다.5.8.

링크의 답변을 주의 깊게 읽으면(Google에서 다른 유사한 질문과 기사를 많이 찾을 수 있음) 다음을 찾을 수 있습니다.전혀최고의 가치를 제공합니다. 이는 운영 체제를 실행하는 시스템의 정확한 작업 부하와 특정 동작에 따라 달라지며 약간의 벤치마킹이 필요합니다.

일반적으로 기본값(60)이 가장 균형이 잘 맞습니다.

귀하의 링크에 있는 답변은 swappiness시스템에 영향을 미치는 방법을 설명하지만 다른 사람들이 답변에 추가한 계산 및 숫자를 사용하지 않고 더 간단하게 만들어 더 정확하지만 읽기 어려울 수 있도록 노력하겠습니다.

매우 단순화된 방식으로(좀 더 직관적으로 만들기 위해) 요점을 파악하려면 RAM에 두 가지 주요 유형의 페이지가 포함되어 있다고 말할 수 있습니다.

  1. 익명의페이지는 프로세스에서 사용하는 "일반" 메모리입니다. 변수 등의 동적 데이터를 처리하는 데 사용되는 메모리입니다.
  2. 파일 백업 메모리, 또는페이지 캐시(나는 차이점을 다루지 않을 것이다). 이는 디스크에서 메모리로 파일을 캐시하는 데 사용됩니다. 일반적으로 디스크에서 직접 파일을 읽는 비용은 상당히 높으므로 일반적으로 커널은 디스크에서 읽은 데이터를 페이지 캐시에 저장하므로 다음에 파일에서 데이터를 읽을 때 RAM에서 직접 읽을 수 있습니다. 디스크에 다시 액세스할 필요가 없습니다. 이렇게 하면 디스크에서 파일을 읽는 속도가 크게 향상됩니다.

메모리 압력이 높고 커널이 RAM의 일부 공간을 확보해야 하는 경우 어려운 결정에 직면합니다.

  1. 파일이 지원하는 메모리를 지워야 합니까?이렇게 하면 새 페이지에 대한 메모리가 매우 빠르게 지워지지만 파일에 다시 액세스하면 디스크에서 다시 읽어야 하므로 비용이 많이 듭니다.
  2. 일부 익명 페이지를 교체해야 할까요?아마도 오랫동안 사용되지 않았고 오랫동안 프로세스에 필요하지 않은 일부 비활성 페이지가 있을 수 있으므로 이를 스왑 영역에 쓰고 추가 입력을 절약하기 위해 파일 캐시를 메모리에 유지하는 것이 좋습니다. / 출력?

이는 swappiness커널이 무엇을 선호해야 하는지를 암시합니다. "0" 값은 가능하면 익명 페이지 교환을 피하고 더 많은 공간을 확보하기 위해 항상 파일을 메모리/캐시로 다시 지우도록 커널에 지시합니다. 더 많이 늘릴수록 익명 메모리가 교체되고 파일 지원 메모리가 선호될 가능성이 커집니다. 커널 > 5.8에서 값 200은 항상 익명 페이지를 우선적으로 교체하고 파일 지원 메모리를 RAM에 유지해야 함을 의미합니다.

그렇기 때문에 권장값은다양한 요인에 따라 달라집니다, 워크로드 유형, I/O 속도, 전환 속도 등이 있습니다.

  • 데이터베이스를 실행하는 서버의 경우 일반적으로 교환성을 0으로 낮추는 것이 좋습니다. 고성능을 보장하려면 데이터베이스가 RAM에 모든 데이터를 유지할 수 있어야 하는 것이 중요하기 때문입니다.
  • I/O를 많이 수행하고 디스크가 상대적으로 느리고 swappiness프로세스에 사용되지 않을 수 있는 비활성 메모리 페이지가 많은 경우 I/O를 최소화하기 위해 늘리는 것이 좋습니다.
    • 사용중인 기계에zswap, 스왑이 디스크가 아닌 RAM의 전용 섹션에 압축되어 저장되는 경우 스왑 비용이 훨씬 낮으므로 RAM에서 파일 데이터를 지우는 것보다 스왑을 우선시할 수 있습니다.

그러나 결론은 다음과 같습니다.일반적인 권장 사항 없음. 표준 사례 및 작업 부하의 경우 기본값이 괜찮습니다. 스와핑이나 I/O가 너무 많다는 것을 발견하면 이 값을 주의 깊게 조정해야 할 수도 있지만 테스트해야 합니다. 특정 시스템 및 워크로드에 가장 적합한 값에 도달할 때까지 값을 변경하고 해당 값이 시스템 성능에 어떤 영향을 미치는지 검토하면 됩니다.

관련 정보