안드로이드 시스템 최적화 과정에서는 Swapiness 값의 구성이 중요합니다. 값 경로는 입니다 /proc/sys/vm/swappiness
. 일부 소스에서는 60으로 설정하는 것을 권장하고 다른 소스에서는 120으로 설정하는 것을 권장합니다. 일부 소식통에서는 최대값이 100이라고 주장하고 다른 소식통에서는 200이라고 주장하여 혼란스럽습니다.
내 시스템이 지원하는 최대값을 어떻게 확인합니까?
Stack Overflow에서 찾을 수 있는 링크:
답변1
5.8 이전 커널 버전에서는 최대값이 swappiness
100이었고, 커널에서는 값이 200으로 늘어났습니다.5.8.
링크의 답변을 주의 깊게 읽으면(Google에서 다른 유사한 질문과 기사를 많이 찾을 수 있음) 다음을 찾을 수 있습니다.전혀최고의 가치를 제공합니다. 이는 운영 체제를 실행하는 시스템의 정확한 작업 부하와 특정 동작에 따라 달라지며 약간의 벤치마킹이 필요합니다.
일반적으로 기본값(60)이 가장 균형이 잘 맞습니다.
귀하의 링크에 있는 답변은 swappiness
시스템에 영향을 미치는 방법을 설명하지만 다른 사람들이 답변에 추가한 계산 및 숫자를 사용하지 않고 더 간단하게 만들어 더 정확하지만 읽기 어려울 수 있도록 노력하겠습니다.
매우 단순화된 방식으로(좀 더 직관적으로 만들기 위해) 요점을 파악하려면 RAM에 두 가지 주요 유형의 페이지가 포함되어 있다고 말할 수 있습니다.
- 익명의페이지는 프로세스에서 사용하는 "일반" 메모리입니다. 변수 등의 동적 데이터를 처리하는 데 사용되는 메모리입니다.
- 파일 백업 메모리, 또는페이지 캐시(나는 차이점을 다루지 않을 것이다). 이는 디스크에서 메모리로 파일을 캐시하는 데 사용됩니다. 일반적으로 디스크에서 직접 파일을 읽는 비용은 상당히 높으므로 일반적으로 커널은 디스크에서 읽은 데이터를 페이지 캐시에 저장하므로 다음에 파일에서 데이터를 읽을 때 RAM에서 직접 읽을 수 있습니다. 디스크에 다시 액세스할 필요가 없습니다. 이렇게 하면 디스크에서 파일을 읽는 속도가 크게 향상됩니다.
메모리 압력이 높고 커널이 RAM의 일부 공간을 확보해야 하는 경우 어려운 결정에 직면합니다.
- 파일이 지원하는 메모리를 지워야 합니까?이렇게 하면 새 페이지에 대한 메모리가 매우 빠르게 지워지지만 파일에 다시 액세스하면 디스크에서 다시 읽어야 하므로 비용이 많이 듭니다.
- 일부 익명 페이지를 교체해야 할까요?아마도 오랫동안 사용되지 않았고 오랫동안 프로세스에 필요하지 않은 일부 비활성 페이지가 있을 수 있으므로 이를 스왑 영역에 쓰고 추가 입력을 절약하기 위해 파일 캐시를 메모리에 유지하는 것이 좋습니다. / 출력?
이는 swappiness
커널이 무엇을 선호해야 하는지를 암시합니다. "0" 값은 가능하면 익명 페이지 교환을 피하고 더 많은 공간을 확보하기 위해 항상 파일을 메모리/캐시로 다시 지우도록 커널에 지시합니다. 더 많이 늘릴수록 익명 메모리가 교체되고 파일 지원 메모리가 선호될 가능성이 커집니다. 커널 > 5.8에서 값 200은 항상 익명 페이지를 우선적으로 교체하고 파일 지원 메모리를 RAM에 유지해야 함을 의미합니다.
그렇기 때문에 권장값은다양한 요인에 따라 달라집니다, 워크로드 유형, I/O 속도, 전환 속도 등이 있습니다.
- 데이터베이스를 실행하는 서버의 경우 일반적으로 교환성을 0으로 낮추는 것이 좋습니다. 고성능을 보장하려면 데이터베이스가 RAM에 모든 데이터를 유지할 수 있어야 하는 것이 중요하기 때문입니다.
- I/O를 많이 수행하고 디스크가 상대적으로 느리고
swappiness
프로세스에 사용되지 않을 수 있는 비활성 메모리 페이지가 많은 경우 I/O를 최소화하기 위해 늘리는 것이 좋습니다.- 사용중인 기계에
zswap
, 스왑이 디스크가 아닌 RAM의 전용 섹션에 압축되어 저장되는 경우 스왑 비용이 훨씬 낮으므로 RAM에서 파일 데이터를 지우는 것보다 스왑을 우선시할 수 있습니다.
- 사용중인 기계에
그러나 결론은 다음과 같습니다.일반적인 권장 사항 없음. 표준 사례 및 작업 부하의 경우 기본값이 괜찮습니다. 스와핑이나 I/O가 너무 많다는 것을 발견하면 이 값을 주의 깊게 조정해야 할 수도 있지만 테스트해야 합니다. 특정 시스템 및 워크로드에 가장 적합한 값에 도달할 때까지 값을 변경하고 해당 값이 시스템 성능에 어떤 영향을 미치는지 검토하면 됩니다.