스왑 공간을 실제 메모리의 두 배로 설정해야하는 이유는 무엇입니까?


11

우리가 리눅스 시스템을 설정하고자 할 때, 스왑 공간을 실제 메모리의 두 배로 설정하는 것이 일반적입니다. 왜 우리에게 이것이 필요한지, 그리고 이것이 어떻게 제안되는지 알고 싶습니다.

답변:


8

짧은 대답은 "당신은하지 않습니다이다 에".

커널 / 시스템 유형에 따라 스왑 공간의 크기를 조정 하는 것이 합리적 일 수 있습니다. 예를 들어 FreeBSD의 tuning (7) 맨 페이지에서 스왑 크기에 대한 다음의 이론적 근거는 물리적 메모리 크기의 2 배 이상입니다.

일반적으로 스왑 공간의 크기는 RAM이 2GB 미만인 시스템의 경우 약 2x 주 메모리 또는 더 많은 경우 주 메모리의 약 1x로 조정해야합니다. 그러나 RAM이 많지 않으면 일반적으로 더 많은 스왑이 필요합니다. 시스템에서 256M 미만의 스왑을 구성하지 않는 것이 좋으며 스왑 파티션 크기를 조정할 때 향후 메모리 확장을 염두에 두어야합니다. 커널의 VM 페이징 알고리즘은 주 메모리보다 최소 2 배의 스왑이있을 때 최상의 성능을 발휘하도록 조정되었습니다. 스왑을 너무 적게 구성하면 VM 페이지 검색 코드가 비효율적 일 수 있으며 나중에 컴퓨터에 메모리를 추가하면 나중에 문제가 발생할 수 있습니다. 마지막으로 여러 SCSI 디스크 (또는 다른 컨트롤러에서 작동하는 여러 IDE 디스크)가있는 더 큰 시스템에서는 각 드라이브에서 스왑을 구성하는 것이 좋습니다. 드라이브의 스왑 파티션 크기는 대략 같아야합니다. 커널은 임의의 크기를 처리 할 수 ​​있지만 내부 데이터 구조는 가장 큰 스왑 파티션의 4 배로 확장됩니다. 스왑 파티션을 같은 크기로 유지하면 커널이 N 개의 디스크에서 스왑 공간을 최적으로 스트라이프 할 수 있습니다. 스왑 공간은 UNIX의 절약 기능이며, 스왑 공간을 많이 사용하지 않더라도 일반적으로 스왑을 많이 사용하지 않아도 다시 부팅하기 전에 런 어웨이 프로그램에서 복구하는 데 더 많은 시간을 할애 할 수 있습니다. 스왑 파티션을 같은 크기로 유지하면 커널이 N 개의 디스크에서 스왑 공간을 최적으로 스트라이프 할 수 있습니다. 스왑 공간은 UNIX의 절약 기능이며, 스왑 공간을 많이 사용하지 않더라도 일반적으로 스왑을 많이 사용하지 않아도 다시 부팅하기 전에 런 어웨이 프로그램에서 복구하는 데 더 많은 시간을 할애 할 수 있습니다. 스왑 파티션을 같은 크기로 유지하면 커널이 N 개의 디스크에서 스왑 공간을 최적으로 스트라이프 할 수 있습니다. 스왑 공간은 UNIX의 절약 기능이며, 스왑 공간을 많이 사용하지 않더라도 일반적으로 스왑을 많이 사용하지 않아도 재부팅 전에 강제 실행 프로그램에서 복구하는 데 더 많은 시간을 할애 할 수 있습니다.

할당 할 스왑 공간의 양, 할당 위치 등을 결정할 때 다른 요소가 중요 할 수 있습니다. 예를 들어, 실제 메모리가 128GB 인 큰 서버를 설치하는 경우 절대 사용되지 않는 스왑을 위해 256GB의 디스크 공간을 미리 할당하지 않는 것이 좋습니다.

반면에 갖는 일부 스왑 공간은 종종 (개 루프, Net-와 FreeBSD에서 예를 들어)이 가능 커널 덤프를 잡아 수 있습니다. 따라서 공황 상태에서 전체 커널 덤프를 가져 오기에 충분한 스왑 공간을 확보하는 것이 좋습니다.

모든 경우에 맞는 절대 규칙은 없습니다 . 당신은 당신의 특정 시스템의 행동에 대해 읽어 작동 방법, 시스템의 용도에 대해 생각하고 맞는 스왑 공간의 최적의 크기를 결정해야합니다 귀하의 요구 사항을.


5

전혀 필요하지 않습니다. 이전 버전의 창은 스왑 파일에서 할당 된 메모리의 각 페이지를 기본적으로 mmap으로 취급하므로 유용 할 수 있도록 스왑에서 최소한 총 물리적 RAM 크기가 필요했습니다. 오늘날에는 더 이상 그렇지 않으며 리눅스에서는 사건이지만 소문은 계속됩니다.

그러나 RAM과 같은 스왑을 갖는 것이 바람직한 경우가 있습니다 (최대 절전 모드). Linux는 최대 절전 모드 (일명 디스크 일시 중지)에 스왑 파일을 사용하므로 RAM에있는 모든 데이터와 이미 스왑 된 모든 데이터 (캐시 RAM 빼기)를 보유 할 수있는 충분한 스왑이 필요합니다. 물론 랩톱과 같은 최대 절전 모드가 필요한 시스템의 경우에만 해당됩니다.

마지막으로, 다른 사람들의 말에도 불구하고 너무 많은 스왑을 갖는 것은 나쁜 일이 될 수 있습니다 . 생각하십시오-4G의 RAM이 있고 그 위에 8G의 추가 스왑이 필요한 경우 시스템을 계속 사용할 수 있다고 생각하십니까? 디스크와의 모든 스와핑은 무엇입니까? 스왑 안팎에서 데이터를 마샬링하는 데 모든 시간을 소비하기 시작할 때 전체 시스템을 사용할 수없는 수준으로 느리게하는 것보다 메모리가 부족할 때 즉시 메모리 호깅 프로세스를 종료하는 것이 좋습니다.


1

오래 전에 스왑 공간에 모든 가상 메모리 페이지를 할당하는 일반적인 유닉스 변형 (BSD라고 생각하지만 지금은 참조를 찾을 수 없음)이있었습니다. 따라서 RAM만큼 스왑이 많은 경우 가상 메모리의 크기는 여전히 RAM과 동일합니다. 그런 다음 일반적인 권장 사항은 RAM보다 2 배 많은 스왑이 있어야 가상 메모리가 RAM보다 2 배 커졌습니다.

현대의 유니스가 그런 식으로 행동하지 않으므로 규칙의 이유는 쓸모가 없습니다 (1992 년에 이미 사용되지 않았으므로 Linux와 관련이 없었습니다). 그러나 이상하게도 그 규칙은 살아 남았습니다. 지금 따라 가면 RAM의 3 배에 해당하는 가상 메모리를 얻을 수 있지만 원래 의도는 두 배가됩니다.

규칙 뒤에 숨겨진 역사적 이유가 멍청하다는 의미는 아닙니다. 디스크 공간이 저렴 해 졌으므로 더 많은 스왑을 할당하는 것이 합리적입니다. 스왑 용량은 RAM 용량과 사용 방법에 따라 다릅니다. 스왑없이 시스템을 실행할 수는 있지만 RAM이 가득 차면 죽일 프로그램을 선택할 기회를 얻지 못하고 시스템이 느려질 수 있습니다 (때로는 RAM을 사용하여 캐시하고 일부 프로그램 메모리를 스왑하는 것이 좋습니다) 밖). 스왑을 너무 많이 할당하면 적은 양의 RAM (커널 데이터 구조용)과 디스크 공간이 필요하지만 (현재는 SSD를 제외하고는 일반적으로 먼지가 많이 듭니다). 최대 절전 모드로 전환하려면 모든 가상 메모리에 맞도록 충분한 스왑이 필요합니다.


Windows도 그렇게합니다 : 메모리 관리자가 충분한 스왑 공간을 가지고 있다면 메모리에있는 페이지 사본도 유지합니다 (최근에 수정 된 것부터 시작합니다). 스왑 해야하는 경우 스왑 공간이 필요합니다. 메모리에서 페이지를 던져 버립니다.
pqnet

0

일반적인 시스템 메모리 용량, 메모리 버스 속도 대 디스크 속도 및 프로세스가 다양한 대기 상태에서 소요되는 시간의 백분율에 대한 가정을 기반으로 한 고대 권장 사항입니다. 요즘은 스왑 공간에서 물리적 메모리의 1/2 이상을 원할 것입니다. 메모리 사용량이 거의 다 찼을 때 임의의 OOM 킬을 방지하기에 충분합니다. 그러나 전적으로 일반적인 작업량, YMMV 등에 달려 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.