전체 스왑아웃을 위해 커널을 어떻게 조정할 수 있나요?

전체 스왑아웃을 위해 커널을 어떻게 조정할 수 있나요?

다음과 같은 스와핑 정책을 배포하고 싶습니다.

  • 기본적으로 메모리의 모든 페이지는 스왑 공간에도 있어야 합니다.
  • 메모리의 페이지가 변경되면(즉, 더티) 페이지는 가능한 한 빨리 기록되어야 하지만 다른 프로세스보다 우선순위가 낮습니다.
  • 특정 구성 가능한 워터마크에 도달하면(페이지의 80%가 더티라고 가정) 우선순위는 다른 프로세스와 동일합니다.

리눅스 커널에서 이런 종류의 스와핑 정책이 가능합니까? 그렇다면 이를 달성하기 위해 커널 설정을 어떻게 설정합니까?

편집하다:

분명히 그 이유는 교체해야 하는 페이지 수를 줄이기 위한 것입니다. 더티 페이지만 디스크에 기록해야 하며 이는 시간이 지남에 따라 백그라운드에서 발생합니다. 따라서 페이지 누락이 발생하면(즉, 페이지가 메모리에 없는 경우) 메모리에서 디스크로 페이지를 쓸 필요가 없고 디스크에서 메모리로만 페이지를 쓸 필요가 있습니다. 따라서 스왑 인과 스왑 아웃 모두 동시에 디스크에 액세스하려고 시도하므로 I/O 병목 현상이 발생할 가능성이 줄어듭니다.

답변1

/proc/sys/vm/swappiness메모리에 보관된 데이터 세그먼트에 대해 교환된 데이터 세그먼트의 비율을 제어하기 위해 값을 설정할 수 있습니다 . 값이 0이면 어떤 경우에도 교체가 완전히 방지됩니다.

이는 다음 중 하나를 사용하여 수행할 수 있습니다.

  • echo 0 > /proc/sys/vm/swappiness
  • sysctl -w vm.swappiness=0
  • 해당 설정을 저장/etc/sysctl.conf

일반적으로 약간의 스왑만 사용하는 것은 나쁜 것이 아닙니다. 디스크에서 읽은 데이터를 캐싱하는 데 여유 메모리를 사용할 수 있으며, 애플리케이션에서 갑자기 많은 양의 메모리가 필요할 경우 시스템은 미리 계획을 세울 수 있습니다.

그러나 너무 많은 프로그램이 교체되면 모든 프로그램 전환 중에 많은 디스크 관련 활동이 발생하여 실제로 모든 것이 느려집니다. 어떤 것을 사용하려면 먼저 메모리에 다시 로드해야 합니다.

디스크 읽기는 데이터가 도착하는 데 훨씬 더 오랜 시간이 걸리기 때문에 메모리 액세스에 비해 엄청나게 느립니다. 시스템은 다른 읽기/쓰기 요청 사이에 읽기를 예약해야 하며, 드라이브는 올바른 실린더를 찾으려고 시도하기 시작하고 마지막으로 천천히 데이터 전달을 시작합니다.

그러므로 나는 당신의 논리에 결함이 있다고 생각합니다. 일반적으로 갑작스러운 증가에 대비해 충분한 공간을 유지하면서 프로그램을 메모리에서 계속 실행하기를 원합니다. "디스크에 쓰기"를 위해 스왑을 너무 자주 사용하지 마십시오. 이는 백업도 아니고 성능 향상도 아니기 때문입니다.

구형 컴퓨터에는 메모리가 적고 결과적으로 스와핑 문제가 발생했습니다. 한꺼번에 많은 프로그램을 열면 시스템 속도가 느려지고 디스크가 스왑 파일을 순서대로 읽고 쓰는 소리가 들렸다.

답변2

시스템이 교체된다고 해서 문제가 있다는 의미는 아닙니다. 시스템 성능을 방해하지 않고 스왑을 최대한 활용할 수 있도록 미세 조정된 응용 프로그램이 있습니다. 대부분의 관계형 데이터베이스 시스템은 다음과 같이 조정됩니다. IE: Oracle과 Cache는 아마도 가장 큰 두 가지일 것입니다.

최대 절전 모드를 사용하는 경우 RAM 저장을 위해 스왑 공간을 사용합니다. 시스템 백업을 부팅하면 스왑의 모든 내용이 RAM에 다시 추가됩니다. 이렇게 하면 대기처럼 배터리를 씹지 않고도 시스템 전원을 끌 수 있으며 전원이 꺼지기 전에 중단했던 위치로 계속 돌아갈 수 있습니다. 결과적으로 배터리는 훨씬 더 오래 지속됩니다.

스와핑은 더 많은 활성 RAM을 확보하여 시스템 성능을 높게 유지하므로 좋은 일이 될 수 있습니다. 활성 RAM이 채워지고 스왑이 채워졌는데도 여전히 더 많은 공간이 필요한 경우에만 문제가 있는 것입니다. 그 시점까지 스왑은 귀하를 해치는 것이 아니라 도움을 주기 위해 존재합니다.

답변3

vdboor의 답변에 추가하여 원하는 것을 달성하려면 swappiness. 스왑 사용 방법을 제어하는 ​​더 많은 커널 조정 가능 항목이 있습니다. 사용자는 /proc/sys/vm/*파일을 통해 런타임에 해당 항목에 액세스하거나 영구적으로 설정할 수 있습니다 /etc/sysctl.conf(이렇게 하려면 부팅 순서에 init 스크립트를 추가해야 sysctl효과가 있을 수 있음).

설정은 Linux 커널 문서에 잘 설명되어 있습니다. 에서 찾을 수 있습니다 <your_kernel_sources_path>/Documentation/sysctl/vm.txt. 일부 온라인 문서를 살펴볼 수도 있습니다.이것과 같은.

관련 정보