예.
디스크를 전혀 사용하지 않거나 네트워크 디스크 만 존재하는 등 매우 설득력 있고 불가피한 이유가있는 경우를 제외하고는 항상 스왑이 활성화되어 있어야합니다 . 자주 권장되는 말도 안되는 크기 (예 : RAM 크기의 두 배)로 교체해야합니까? 글쎄, 전혀 .
그 이유는 스왑이 실제 RAM보다 많은 메모리를 사용하는 경우에만 유용하지 않기 때문입니다 (실제로 스왑은 성능에 심각한 영향을 미치기 때문에 전혀 유용하지 않습니다 ). 스왑에 대한 주요 인센티브는 요즘 되지 마술 (32) 지브에 RAM의 16GiB를 켜하지만, 설치, 사용 가능한 RAM을보다 효율적으로 사용할 수 있도록.
최신 컴퓨터에서는 RAM이 사용되지 않습니다. 사용되지 않은 RAM은 돈을 사서 절약 할 수 없었던 것입니다. 따라서로드 한 내용이나 메모리로 매핑 된 내용, 나중에 (보안 제약 조건으로 제한됨) 누군가가 재사용 할 수 있는 내용은 캐시됩니다. 머신이 부팅 된 직후에 모든 물리적 RAM이 무언가 사용되었습니다 .
운영 체제에서 새 메모리 페이지를 요청할 때마다 메모리 관리자는 다음과 같이 교육 된 결정을 내려야합니다.
- 버퍼 캐시에서 페이지 제거
- 매핑에서 페이지를 제거합니다 (대부분의 시스템에서 효과적으로 # 1과 동일).
- 오랫동안 액세스하지 않은 페이지를 옮기십시오 (바람직하게는 절대로 절대로)
- 프로세스를 종료하거나 임의의 프로세스를 종료 (OOM)
- 커널 패닉
옵션 # 4 및 # 5는 매우 바람직하지 않으며 운영 체제에 다른 선택이없는 경우에만 발생합니다. 옵션 # 1과 # 2는 곧 다시 필요할 가능성이있는 것을 버립니다. 이는 성능에 부정적인 영향을 미칩니다.
옵션 # 3은 시간이 필요하지 않은 항목을 느린 스토리지로 곧바로 옮기는 것을 의미합니다. 이제 필요한 것이 빠른 RAM을 사용할 수 있기 때문에 괜찮습니다 .
옵션 # 3을 제거하면 운영 체제를 # 1 또는 # 2로 제한합니다. 디스크에서 페이지를 다시로드하는 것은 스왑에서 다시로드해야 할 가능성이 적다는 점을 제외하고는 스왑에서 다시로드하는 것과 동일합니다 (적절한 페이징 결정으로 인해).
즉, 스왑을 비활성화하면 아무것도 얻지 못하지만 메모리 요청을 처리 할 때 운영 체제의 유용한 옵션 수를 제한합니다. 어떤 되지 않을 수도 있습니다 ,하지만 매우 가능성이 있을 수 있습니다 단점을 (그리고 장점이 될하지 않습니다).
[편집하다]
mmap
맨 페이지를 주의 깊게 읽고 특히 설명을 MAP_NORESERVE
읽으면 "충분한"물리적 메모리가있는 시스템에서도 스왑이 필요한 이유가 있습니다.
"스왑 공간이 예약되지 않은 경우 사용 가능한 실제 메모리가 없으면 쓰기시 SIGSEGV를 얻을 수 있습니다."
-잠깐만, 그게 무슨 뜻이야?
파일을 매핑하면 마치 프로그램의 주소 공간에 마치 마법처럼 마치 파일의 내용에 직접 액세스 할 수 있습니다. 읽기 전용 액세스의 경우 운영 체제 는 원칙적 으로 다른 가상 페이지에 액세스 할 때마다 다른 데이터로 다시 채울 수있는 물리적 메모리의 단일 페이지를 필요 로 하지 않습니다 (효율적인 이유로, 물론 수행되지는 않지만 원칙적으로 단일 페이지의 물리적 메모리로 테라 바이트에 달하는 데이터에 액세스 할 수 있습니다). 이제 당신 도파일 매핑에 쓰시겠습니까? 이 경우 운영 체제에는 실제 페이지 또는 스왑 공간이 있어야 모든 페이지에 쓸 수 있습니다. 더티 페이지 쓰기 저장 프로세스가 작업을 완료 할 때까지 (몇 초 정도) 데이터를 보존 할 수있는 다른 방법은 없습니다. 이러한 이유로 OS는 스왑 공간을 예약하지만 (커밋하지 않을 수도 있음) 물리적 페이지를 사용하지 않는 동안 매핑에 쓰는 경우 (정상적으로 가능한 정상적인 조건) 여전히 작동한다는 것을 다시 보장 했습니다.
이제 스왑이 없으면 어떻게합니까? 이것은 스왑을 예약 할 수 없다는 것을 의미합니다 (duh!). 이것은 사용 가능한 실제 페이지가 남아 있지 않고 페이지에 쓰는 즉시 프로세스 수신의 형태로 즐거운 놀라움을 얻고 있음을 의미합니다 세그먼테이션 결함으로 인해 종료 될 수 있습니다.
[/편집하다]
그러나 스왑을 RAM 크기의 두 배로 만드는 기존의 권장 사항은 의미가 없습니다. 디스크 공간은 저렴하지만 많은 스왑을 할당하는 것은 의미가 없습니다. 저렴한 것을 낭비하는 것은 여전히 낭비이며, 수백 메가 바이트 (또는 더 큰) 크기의 작업 세트를 계속해서 교환 하고 싶지는 않습니다 .
하나의 "올바른" 스왑 크기 는 없습니다 (사용자와 의견이있는만큼 많은 "올바른"크기가 있습니다). 나는 일반적으로 RAM 크기에 관계없이 고정 512MiB를 할당하여 나에게 매우 효과적입니다. 그 이유는 512MiB가 작은 디스크에서도 요즘 항상 감당할 수 있는 것입니다 . 반면에 몇 기가 바이트의 스왑을 추가하는 것이 좋습니다. 무언가 잘못 될 경우를 제외하고는 사용하지 않을 것입니다.
SSD에서도 스왑은 (버스 대역폭 및 대기 시간으로 인해) RAM보다 수십 배 느리며, 다시는 필요하지 않은 스왑으로 무언가를 옮기는 것이 매우 수용 가능 합니다. 다시 스왑하면 사용 가능한 페이지 풀이 무료로 효과적으로 확대 됩니다. 상당한 양의 스왑 이 필요한 경우 (즉, 50GiB 데이터 세트를 사용하는 응용 프로그램이 있음) 손실이 거의 없습니다.
컴퓨터가 기가 바이트에 해당하는 페이지를 교환하기 시작하면 모든 것이 크롤링됩니다. 따라서 (나를 포함한) 대부분의 사람들에게 이것은 옵션이 아니며, 많은 스왑을 갖는 것은 의미가 없습니다.