RAM이 할 수 없지만 구체적으로 스왑이 할 수 있는 것은 무엇입니까?

RAM이 할 수 없지만 구체적으로 스왑이 할 수 있는 것은 무엇입니까?

스왑 파티션이 없으면 할 수 없는 스왑 파티션이 있는 경우 Linux는 무엇을 할 수 있습니까?

이 질문에서는 32GB RAM이 있고 스왑 영역이 없는 Linux PC와 16GB RAM과 16GB 스왑 영역이 있는 거의 동일한 Linux PC 간의 차이점에 초점을 맞추고 싶습니다. 참고로 저는 이런 것에는 관심이 없습니다"예, 하지만 32GB PC에 스왑을 추가하면 X 개선이 나타날 수 있습니다.". 이것은 이 질문에서 벗어난 것입니다.


RAM을 추가하는 것보다 스왑을 추가하는 것이 더 낫다는 생각을 처음 접했습니다.이전 질문에 대한 의견에서.

나는 확실히 이것을 읽었습니다:RAM이 충분하면 스왑 공간이 필요합니까?그리고...

  • 대답은 주로 스왑 추가에 중점을 두고 있으며, 예를 들어 디스크 캐시에 대해 논의합니다. RAM을 추가하면 디스크 캐시도 확장됩니다.
  • 누군가 조각 모음은 스왑을 통해서만 가능하다고 언급했지만 이를 뒷받침하는 증거를 찾을 수 없습니다.
  • MAP_NORESERVE에 대한 참조가 있지만 mmap이는 다음과 관련된 매우 구체적이고 모호한 위험인 것 같습니다.OOM상황에 따라사적인매핑.

스와핑은 종종 메모리를 확장하거나 성능을 향상시키는 저렴한 방법으로 간주됩니다. 그러나 임베디드 Linux 장치를 대량 생산하게 되면 상황이 바뀌게 됩니다...

...이 경우 스왑으로 인해 플래시 메모리가 마모되어 보증이 끝나기 몇 년 전에 플래시 메모리가 고장나게 됩니다. RAM을 두 배로 늘리면 장치 비용이 몇 달러 더 추가됩니다.

이것은 eMMC 플래시 메모리입니다.SSD가 아닙니다!. 일반적으로 eMMC 플래시 메모리에는 웨어 레벨링 기술이 없으므로 SSD보다 훨씬 빨리 마모됩니다.


이 문제에 대해 뜨거운 논의가 많이 있는 것 같습니다.. 나는 "해야 한다/하지 말아야 한다"는 의견이 아니라 능력에 관한 무미건조한 사실을 찾고 있습니다.

RAM을 추가하면 할 수 없는 일을 스왑으로 할 수 있나요?

답변1

최대 절전 모드(또는 디스크 일시 중지). 진정한 최대 절전 모드에서는 시스템 전원이 완전히 꺼지므로 RAM의 내용이 손실되므로 해당 상태를 일부 영구 저장소에 저장해야 합니다. 교환이라고도 합니다. 스왑 공간과 최대 절전 모드를 사용하는 hiberfil.sysWindows와 달리 pagefile.sysLinux는 오버 커밋된 메모리와 최대 절전 모드를 위해 스왑 공간을 사용합니다.

반면에 Hibernate는 Linux에서 제대로 작동하기에는 약간 까다로워 보입니다. 실제로 최대 절전 모드를 "할 수 있는지" 여부는 또 다른 문제입니다.

답변2

RAM을 추가하면 할 수 없는 일을 스왑으로 할 수 있나요?

이 질문은 실제로 다음과 같이 다시 작성할 수 있습니다.휘발성 RAM을 추가하여 수행할 수 없는 작업을 비휘발성 RAM을 사용하여 수행할 수 있는 작업은 무엇입니까?. 파티션을 페이징(휘발성 RAM과 상호 작용하는 전용 방법) 전용으로 지정했다고 해서 해당 파티션이 여전히 영구 보조 저장 매체의 일부라는 사실은 바뀌지 않습니다. 시스템을 최대 절전 모드로 전환하는 데 스왑 파티션도 필요하지 않으며 기존 파티션에 생성된 "스왑 파일"을 사용할 수도 있습니다.

결국 스왑 파티션을 사용하든 스왑 파일을 사용하든 RAM에 기록되거나 RAM에서 기록되는 내용을 저장하게 됩니다. 스왑이 활성화된 시스템에서 전원 코드를 뽑는 경우 스왑 파티션은 마술처럼 삭제되지 않습니다.

이 스왑 데이터는 다음 부팅 시 읽혀지지 않지만(페이징 파일에는 더 이상 실행되지 않는 프로세스에 해당하는 항목이 있으므로) 일부 배포판에서는 적절한 종료 또는 적절한 재시작 중에 스왑 데이터를 파기하기 위한 의도적인 조치를 취할 수 있습니다. , 누군가 시스템에서 코드를 빼내면 해당 스왑 파티션을 법의학적으로 조사할 수 있습니다.


귀하가 언급한 임베디드 장치의 경우 비휘발성 RAM(NVRAM 또는 EEPROM) 저장소의 일종인 플래시 메모리는 I/O 적중을 견딜 수 있는 능력으로 인해 마모됩니다(플래시 셀 내구성은 프로그램 수로 표현됨). ) / 지우기 주기)는 휘발성 RAM과 비교할 때 약합니다. 해당 위치에서 쓰기 작업이 수행될 때마다 실제로 산화물 층이 떨어져 나가고 결국 전하를 지속적으로 저장할 수 있도록 산화물이 전혀 남지 않으며 후속 읽기 전에 실제로 누출됩니다.

반면, 플래시 메모리에 비해 전원 공급이 차단되면 휘발성 RAM의 생존성은 거의 존재하지 않습니다(이상적인 실험 조건에서는 몇 분 정도). 휘발성 RAM의 경우 전하 누출과 피드백 제어 래치라고도 알려진 플립플롭의 해당 상태(입력, 출력 결정, 입력 재결정)를 방지할 수 있는 방법이 없습니다.

답변3

32GB RAM(스왑 제외)과 16GB RAM(16GB 스왑 포함).

이런 식으로 질문하면 교체는 비용을 절약하고 비용 성능을 향상시키며 와트당 성능도 향상시킬 수 있습니다.


그러나 스와핑은 여전히 ​​"디스크만큼 느린 메모리"가 아닙니다. 필요할 때 RAM에 직접 로드할 수 있는(더러워도 파일 시스템 오버헤드 없이) 메모리 페이지의 임시 저장소입니다.

물론 부하에 따라 많은 것이 달라집니다(유형로드), 교환 아이디어는 비생산적일 수도 있습니다. 이것이 swapon/ 자체 외에 "swappiness" 매개변수가 있고 swapoff올바른 크기에 대한 논의가 있는 이유입니다 .

Wikipedia에서 Linux의 "스와핑"에 대한 설명을 얻었습니다("Paging" 기사에서).

Linux 커널은 스왑 백엔드(장치 또는 파일...)를 거의 무제한으로 지원합니다.

여러 스왑 백엔드에 동일한 우선순위가 할당되면 라운드 로빈 방식으로 사용됩니다(RAID 0 스토리지 레이아웃과 다소 유사).

이는 스왑을 하드웨어 수준에서 더 적합한 것으로 전환할 수 있음을 의미합니다. 즉, 스왑 아웃된 페이지에 더 나은 홈을 제공하는 전용 "임시 드라이브"입니다. 이상적으로 스크래치 드라이브는 (매우) 작지만 빠르고 튼튼해야 합니다.


"새로운" 크기 규칙에 따라(정사각형뿌리Giga), 귀하의 예는 다음을 비교해야 합니다:

16 GB RAM+0 GB Swap+1000 GB Disk

16 GB RAM+4 GB Swap+ 996 GB Disk

실제로 말이 안되는 것은 다음과 같습니다.

16 GB RAM+0 GB Swap+1000 GB Disk

12 GB RAM+4 GB Swap+1000 GB Disk

이것은 tmpfs("ramdisk")의 스왑 파티션이 될 것입니다. 아마도 큰 해를 끼치지는 않을 것입니다. 그러나 여기에는 어떤 이점도 없을 것 같습니다. 동면도 할 수 없습니다.

(단, 추가 시 아래의 zram 및 zswap을 참조하세요.압축이것에 관해서)


스위칭을 이해하려면 전체 시스템과 부하 평균을 고려해야 합니다. 그리고 vm/mm(가상 메모리 관리)은 복잡한 시스템이기 때문에 뚜렷한 장점을 꼽기는 어렵습니다. 나는 과부하된 시스템으로의 "부드러운" 전환이라는 아이디어를 좋아합니다.

8GB RAM이 있고 스왑 영역이 없습니다. 그러나 나는 여전히 그 개념을 옹호합니다. AFA 공감할 수 있습니다 :-)


OP 링크 중 하나에서 이 redhat 참조를 찾았습니다. 내가 정확하게 기억한다면 시나리오에서는 메모리 요구 사항이 2GB RAM + 2GB 스왑으로 증가합니다.

...[방금 설명된] 우리의 경우에는 사용 가능한 스왑이 상당히 많기 때문에 성능 저하 기간이 깁니다.

그러나 대안은 OOM훨씬 더 빠릅니다!

그렇습니다. "성능 저하 시간"은 길지만 부하에 비례하여 성능이 저하될 뿐입니다. 맥락은 모르겠지만 아마도 경고하고 싶었을 것입니다.너무 큰파티션을 교환합니다. 그것소리스왑 방지는 가능하지만 면밀한 검사에서는 그렇지 않습니다.

이번에도 같은 이유로 교체하지 않았습니다. 나와 내 응용 프로그램이 언제 한계에 도달했는지 알고 싶습니다. 그런 다음 로드를 줄여야 할지, RAM을 더 구입해야 할지, 스왑용 파티션을 활성화해야 할지 결정하겠습니다(이를 위해 작은 파티션이 한두 개 있습니다).


이거 찾아봤는데즈람, 그런 다음교환내용: 매우 흥미롭습니다...:

이와 대조적으로 zswap은 스왑 장치에 대한 RAM 기반 캐시 역할을 합니다. 이는 zram에는 부족한 덜 사용되는 스왑 페이지에 대한 제거 메커니즘을 zswap에 제공합니다.

반면에 zram스위칭 장비 없이도 작동합니다. 이로 인해 내가 말하는 내용이 이해되지 않을 수도 있지만 압축을 고려하지 않은 것입니다.

내 요점은 이것이다내쫓다"교환"의 고유한 메커니즘. 이것할 수 있는교체 또는 압축을 통한 교체 등 부하가 높은 환경에서 매우 유용합니다.

답변4

RAM과 달리 스왑 영역은용이하게비활성화, 제한, 속도 저하 또는 크기 조정 - 이는 애플리케이션의 메모리 할당 전략을 개발할 때 유용한 기능입니다.

커널에 4G RAM과 4G 스왑 공간이 있다고 가정하면 운영 체제와 개발 애플리케이션(브라우저, IDE 등)은 3G를 사용합니다. 이것은 5G 무료 가상: 1G 실제 네트워크와 4G 전환 네트워크입니다.

핫 리소스를 로드하기 위해 2G가 필요한 새로운 데이터베이스나 게임을 개발 중입니다. 그래서 도중에,sbrk그리고 mmap이 작업을 반복해서 수행하고 스왑을 활성화하여 커널 VM 계층의 경이로움을 통해 실제 2G를 얻으십시오. 만세, 코드가 훌륭하게 작동합니다. (귀하의 브라우저 또는 기타 모든 것이 페이지에 의해 지옥으로 교환되도록 강등되었습니다.)

이제 프로그램을 중지하세요. swapoff프로그램을 다시 실행하세요. 이번에는 계속해서 sbrk으르렁거림 에 따라 ENOMEM코드에서 처리해야 하는 불쾌한 경로가 발생합니다. 어떻게 반응합니까? 이 장면에서 춤은 어떻게 추나요?

또는 USB 메모리 스틱을 설치 mkswap하고 swaponUSB 홀더에 추가하세요.vm.min_free_kbytes커널이 USB 스틱에 더 많은 액세스 권한을 갖도록 강제합니다. 프로그램을 다시 실행하세요. 현재 느린 메모리 할당 가상 머신에서 애플리케이션이 어떻게 작동하나요?

애플리케이션이 실행되는 동안 위의 모든 작업을 수행하는 것은 어떻습니까? 실행되고 OOM 조건이 발생하기 시작하면 어떻게 작동합니까?

즉석에서 스왑 하위 시스템을 조정하여 여유 실제 RAM이 부족한 시스템을 고문할 수 있는 방법은 셀 수 없이 많습니다. cgroups나 rusage와 달리 사용 가능한 가상 RAM을 변경하기 위해 프로세스를 종료할 필요가 없습니다.

모의 객체를 사용하여 에뮬레이트 ENOMEM하거나 속도를 늦추는 방식으로 이러한 유형의 메모리 남용을 테스트할 수 있습니다 brk. 이는 안정적이므로 적합한 방법입니다. 그러나 확률론적 과정의 금을 채굴하기 위해 메모리가 적은 환경에서 실사격 훈련을 실행하는 것만큼 좋은 것은 없습니다. 스와핑을 사용하면 테스터가 실제 메모리가 부족한 환경과 유사한 방식으로 커널의 메모리 리소스와 기능을 동적으로 쉽게 조정할 수 있습니다. RAM 스틱을 추가하거나 제거해도 이 값은 제공되지 않습니다.

관련 정보