컴퓨터에 64GB RAM과 240GB SSD 가 있는데 메모리 사용량이 많은 계산 (머신 러닝, 데이터 마이닝 등)에 사용할 것입니다. 인터넷에서 찾은 대부분의 조언은 약 2-4-8GB RAM 컴퓨터이며 RAM 스왑 파티션 크기의 2 배 (128GB)를 권장합니다.
128GB 스왑 파티션을 만드는 것이 합리적입니까? 거대한 스왑 파티션을 만들면 어떤 이점이 있습니까?
실제 RAM이 부족한 경우 올바르게 이해하고 있습니까?
- 스왑이 없으면 ‘메모리 부족’오류가 발생합니다.
- 스왑이 있으면 일부 RAM 페이지가 스왑 파티션으로 복사되고 프로그램은 계속 실행됩니다 (더 느리지 만).
일부 사람들은 읽기 / 쓰기주기가 제한되어 있기 때문에 SSD를 교체하는 것이 좋지 않다고 말합니다. 스왑을 사용하면 SSD 읽기 / 쓰기주기를 얼마나 빨리 소모 할 수 있습니까 (내가 아는 한, 쓰기 IOPS는 약 50000입니다)?
Linux를 사용하고 있습니다 ( Ubuntu 14.04 (Trusty Tahr)).
16GB 스왑을 설정하면 충분할 것이므로 (예 : RedHat에서 4GB를 제안) 16GB의 디스크 공간은 실제로 큰 문제가 아닙니다.
답변
적은 양의 스왑 만 필요할 것입니다. 컴퓨터의 일반적인 작업 세트에 충분한 RAM이 있으면 확실하게 두 가지만 교환하면됩니다.
-
디스크 캐시를위한 더 많은 공간을 확보하기 위해 RAM에서 액세스 할 수없는 정보를 얻으려면 스왑이 필요합니다. 많은 응용 프로그램은 시스템 시작시 실행되며 다시 액세스하지 않습니다. 더러워진 페이지가 RAM에 영원히 갇히는 것을 원하지 않습니다. 그래서 당신은 그들을 잡기 위해 스왑이 필요합니다.
-
채워지지 않을 할당을 처리하려면 스왑이 필요합니다. 이 공간은 사용되지 않더라도 사용 가능해야합니다. 이를 사용하지 않으면 시스템에 사용 가능한 실제 RAM이 많이있는 경우에도 모든 할당을 한 번에 사용할 수있는 백업 저장소가 충분하지 않기 때문에 메모리 할당을 거부해야합니다.
둘 다 많은 양의 스왑이 필요하지 않습니다. 예를 들어 16GB 이상이면 충분합니다. 그 목적은 더 빠른 작업 비용으로 더 큰 작업 세트를 실행할 수 있도록하는 것이 아닙니다. 64GB를 효과적으로 사용하고 정크로 막히거나 절대 발생하지 않는 에지 케이스를 예약하지 않아도됩니다.
(4GB면 충분하다고 Bert에 동의합니다.)
답변
RedHat 은 64GB 시스템에서 4GB를 권장 합니다.
그러나 사이징 스왑은 과학보다 예술에 가깝습니다. 머신의 용도, 디스크 공간 및 메모리 용량 및 기타 요인에 따라 다릅니다. 기억, 당신은 항상 나중에 스왑을 추가 할 수 있습니다.
2X 실제 메모리 규칙 사용은 요즘의 메모리 시스템 양에 따라 구식입니다. 그러나 수행중인 작업을 알지 못하면 제로 스왑으로 실행하지 않는 것이 좋습니다. 4GB를 권장하는 것이 좋은 출발점입니다.
답변
Linux에서는 사용 가능한 총 가상 메모리 (RAM + SWAP)가 한 번에 실행하려는 모든 프로세스 및 최대 가상 풋 프린트에 충분하도록 충분한 스왑이 필요합니다.
이보다 스왑이 적거나 전혀 스왑이없는 경우 다음 상황이 발생합니다. 시스템에 페이지를 할당하려는 메모리가 부족합니다. 그러나 스왑이 없어도 시스템에 여유 공간을 만들기 위해 제거 할 수있는 “피해자”페이지가 많이 있기 때문에 이는 여전히 소프트 실패입니다. 즉, 실행 파일과 같은 모든 파일 백업 메모리 맵핑의 페이지 공유 라이브러리!
시스템이 점점 더 많은 데이터 공간 (스왑 아웃 할 수 없음)을 요구함에 따라, 실행 코드 (공유 라이브러리 및 실행 파일)가 점차 대피되어 작업 세트가보다 단단하고 강화 된 페이지.
스왑 공간은 익명 (파일 매핑되지 않음) 페이지를 스왑 아웃 할 수있는 공간을 제공하여이 문제를 완화합니다. 메모리 할당에 사용되는 페이지로, 실행 코드가 메모리에 남아있을 수 있습니다.
그럼에도 불구하고 메모리를 많이 사용하는 작업을 자주 실행하지 않으면 대부분의 시간 동안 스왑리스를 실행하지 않아도되고 스왑 파일 (전용 파티션 대신)을 필요할 때 수동으로 구성 할 수 있습니다. 스왑 파일을 즉석에서 만들려면 루트가되어 다음을 수행하십시오.
dd if=/dev/zero of=/path/to/swapfile size=$((1024 * 1024)) count=32768 # 32 Gb.
mkswap /path/to/swapfile
swapon /path/to/swapfile
더 이상 필요하지 않은 경우 :
swapoff /path/to/swapfile
rm /path/to/swapfile
노트:
-
RAM이있는만큼 스왑을 구성 할 필요는 없습니다. 이 경험 법칙은 스와핑이 설계되는 방식으로 인해 어려운 요구 사항이었던 운영 체제로 거슬러 올라갑니다.
-
사용 가능한 메모리가 없을 때, 즉 다음 sysctl 항목의 값을 조작하여 Linux에 장애를 발생시키는 방법이 있습니다.
vm.overcommit_memory vm.overcommit_ratio
답변
더 고려해야 할 사항이 있습니다. 작업을 일시 중단 해야하는 경우 적어도 RAM 크기가 필요하고 일부는 필요합니다. 그러나 주로 계산 작업 말을 만드는 것처럼 보이면 필요할 것 같지 않습니다.
이 경우 파티션 대신 스왑 파일을 사용해보십시오. 크기 조정에 대해 걱정할 필요가 없으며 나중에 제거하거나 나중에 추가해도 파티션을 다시 나눌 필요가 없습니다. 파티션을 통해 파일을 사용하면 눈에 띄는 성능 저하가 없습니다. 당신이 그것을 필요로한다면, 크기를 보아라. 그러면 이것은 또한 당신에게 좋은 힌트를 줄 것이다.
답변
머신에 적용하려는 워크로드에는 일정량의 메모리가 실행되어야하며 (최대로드를 처리하기 위해 방정식에 충분히 추가해야 함) 최소한 그 정도의 컴퓨터를 구성해야합니다.
최신 운영 체제는 실제 메모리와 스왑 공간의 조합으로 가상 메모리를 제공하므로 시스템에서 사용할 수있는 것보다 더 많은 메모리가 필요한 경우 간격을 채우기에 충분한 스왑 공간을 추가 해야합니다 . 즉, 최대 80GB가 필요하고 시스템에 64GB가 있으면 16GB 스왑이 필요합니다.
일반적으로 운영 체제 설치 프로그램은 초기 스왑 영역을 작성하도록 요청합니다 (이것은 가장 단순하고 작은 컴퓨터도 설치할 수 있기 때문에). 일반적인 Unix 작업에 대한 경험 법칙은 가상 메모리 크기를 갖는 것입니다. 실제 메모리의 3 배이므로 일반적으로 권장됩니다. 그러나 사용 패턴에 대해 더 잘 알고 있으므로이를 적절하게 변경할 수 있습니다.
메모리 부족이 항상 적은 경우 스왑 공간없이 작업해도 아무런 문제가 없습니다. Linux는 사용되지 않은 메모리를 디스크 캐시로 투명하게 사용합니다.
답변
“많은 교체”를하는 것보다 훨씬 더 좋은 아이디어는 작업 세트를 메모리에 맞도록 작업을 재구성 한 다음 파일 시스템을 사용하여 작업을 저장하고 검색하는 것입니다. 즉, OS에서 메모리 사용 패턴을 추측하도록하는 대신 문제에 대해 알고있는 것을 사용하여 메모리 사용 패턴을 제어하십시오.
올 여름에 나에게 즉시 관련된 임의의 예로서 … 2 차 체를 구현할 때, 마크 업하기 위해 (명확하게) 큰 연속 배열이 필요합니다 (세부 사항은 실제로이 예제와 관련이없는 복잡한 알고리즘으로). 어레이는 ~ 100 기가 항목이어야하므로 1TB 범위에서 쉽게 사용할 수 있습니다. 나는 그것을 할당하는 척하고 OS가 어레이를 통한 모든 순차적 쓰기를 지원하기 위해 RAM에 페이지를 가져 오기 위해 엄청난 양의 비효율적 인 스와핑을 할 수있게했습니다. 뼈대가 달린 무언가를하는 대신 메모리에 정확히 맞는 훨씬 작은 배열을 할당 한 다음 작은 배열을 재사용하여 나머지 큰 배열을 반복적으로 덮습니다. 또한 OS를 제거하고 실행중인 서비스 세트를 제거하고 쉘을 교체했습니다.
SSD는 빠를 수 있지만 스왑을 멈추지 않고 동일한 작업을 수행하도록 계산을 구성하는 것만 큼 빠르지는 않습니다.
답변
다른 사람들이 언급했듯이 스왑 파티션은 RAM이 많더라도 좋은 생각입니다. SSD에 넣는 것은 좋지 않습니다. 스왑 파티션을 자주 쓰면 결국 드라이브가 마모됩니다.
여분의 USB 3.0 포트가있는 경우 스왑 공간에 플래시 드라이브를 사용하는 것이 좋습니다. SSD만큼 빠르지 만 고장이 나면 교체하기에 충분히 저렴한 고속 플래시 드라이브가 많이 있습니다. 아마존에서 빠른 검색을 통해 20 달러 미만의 저렴한 16GB USB 3.0 플래시 드라이브와 60 달러 미만의 일부 64GB 드라이브가 있음을 알 수 있습니다.
전체 플래시 드라이브를 스왑 공간으로 분할하면 필요할 때 스왑 공간을 확보 할 수 있으며 반복해서 작성되는 메모리를 쉽게 (그리고 저렴하게) 교체 할 수 있다는 것을 알고 안심할 수 있습니다.