내가 이해하는 한, 이 일을 하는 목적은교환Linux에서 파티셔닝은 RAM에서 "자주 액세스하지 않는" 일부 정보를 확보하고 이를 하드 드라이브의 특정 파티션으로 이동하는 것입니다(읽기 또는 쓰기 속도가 느려짐). 기본적으로 활성 응용 프로그램이 더 많은 액세스를 허용합니다. "빠른 메모리" 사용 .
이는 메모리가 적은 컴퓨터를 사용하고 메모리가 부족할 때 문제가 발생하고 싶지 않을 때 유용합니다. 그러나 시스템에16 기가 바이트또는32GBRAM, 그리고 StackExchange용 MySQL 데이터베이스를 실행하지 않거나 Linux에서 1080p 전체 길이 영화를 편집하지 않는다고 가정하면,스왑 파티션을 사용해야 합니까?
답변1
예.
넌 꼭 그래야 해언제나매우 설득력 있는 금지 사유가 없는 한(예: 디스크가 전혀 없거나 네트워크 디스크만 있는 경우) 스왑을 활성화합니다. 종종 권장되는 터무니없는 크기(예: RAM 크기의 두 배)로 교체해야 합니까? 훌륭한,아니요.
그 이유는 애플리케이션이 물리적 RAM보다 더 많은 메모리를 소비하는 경우에만 스와핑이 유용하지 않기 때문입니다(사실 이 경우에는 스와핑이 유용합니다).별로 유용하지 않음성능에 심각한 영향을 미치기 때문입니다.) 오늘 교환의 주요 동기는 다음과 같습니다.아니요16GiB RAM을 32GiB로 마술처럼 바꿔주지만, 설치된 RAM을 더욱 효율적으로 활용할 수 있습니다.
최신 컴퓨터에서 RAM은 결코 유휴 상태로 유지되지 않습니다. 사용하지 않는 RAM은 구입하지 않고 돈을 절약하는 것이 더 좋습니다. 따라서 로드하는 모든 것 또는 메모리 매핑된 모든 것, 모든 가능성가능한캐시된 내용은 향후(보안 제약 조건에 따라) 언제든지 누구나 재사용할 수 있습니다. 머신이 부팅된 직후 모든 물리적 RAM이 사용됩니다.무엇.
운영 체제에서 새 메모리 페이지를 요청할 때마다 메모리 관리자는 정보를 바탕으로 결정을 내려야 합니다.
- 버퍼 캐시에서 페이지 지우기
- 지도에서 페이지 지우기(실제로 대부분의 시스템에서 #1과 동일)
- 오랫동안 방문하지 않은(가급적이면 안 됨) 페이지를 교체로 이동합니다(실제로 이는 사전에 발생할 수도 있지만 반드시 마지막 순간에 발생할 필요는 없습니다).
- 프로세스를 종료하거나 임의 프로세스를 종료합니다(OOM).
- 커널 패닉
옵션 #4와 #5는 다음과 같습니다.매우 인기가 없다그리고 이는 운영 체제에 선택의 여지가 없는 경우에만 발생합니다. 옵션 #1과 #2는 곧 다시 필요할 수 있는 것을 버리는 것을 의미합니다. 이는 성능에 부정적인 영향을 미칠 수 있습니다.
옵션 #3은 저장 속도를 늦추기 위해 단기적으로 필요하지 않은 항목을 이동하는 것을 의미합니다. 그것은 중요하지 않습니다. 왜냐면 이제 당신은정말로 필요했다빠른 RAM을 사용할 수 있습니다.
옵션 #3을 제거하면 운영 체제가 #1 또는 #2를 수행하지 못하도록 효과적으로 제한할 수 있습니다. 디스크에서 페이지를 다시 로드하는 것은 스왑에서 페이지를 다시 로드하는 것과 동일합니다. 단, 스왑에서 다시 로드할 가능성은 일반적으로 적습니다(올바른 페이징 결정이 내려지기 때문에).
즉, 스왑을 비활성화하면 운영 체제가 메모리 요청을 처리할 때 갖는 유용한 옵션의 수를 제한하는 것 외에는 아무것도 얻을 수 없습니다. 어느아마, 그러나 그럴 가능성이 매우 높다아마도단점(그리고 결코 강점이 아님).
[편집하다]
주의깊은 독자mmap
맨페이지특히, MAP_NORESERVE
"충분한" 물리적 메모리가 있는 시스템에서도 스와핑이 필수적인 또 다른 타당한 이유를 지적할 수 있습니다.
"스왑 공간이 예약되지 않은 경우 물리적 메모리를 사용할 수 없으면 쓰기 시 SIGSEGV를 받을 수 있습니다."
——잠깐만, 이게 무슨 뜻이야?
파일을 매핑하면 마치 파일이 마술처럼 프로그램의 주소 공간에 위치한 것처럼 파일 내용에 직접 액세스할 수 있습니다. 읽기 전용 액세스의 경우 운영 체제에 다음이 필요합니다.원칙적으로다른 가상 페이지에 액세스할 때마다 다른 데이터로 다시 채울 수 있는 물리적 메모리의 단일 페이지(물론 효율성을 위해 이 방식으로 수행되지는 않지만 원칙적으로 단일 페이지로 TB에 액세스할 수 있음) 데이터 수준) 물리적 메모리 페이지). 이제 당신이반품파일 매핑에 쓰시겠습니까? 이 경우 운영 체제에는 기록되는 각 페이지에 대해 준비된 물리적 페이지(또는 스왑 공간)가 있어야 합니다. 더티 페이지 쓰기 저장 프로세스가 작업을 완료할 때까지(몇 초 정도 걸릴 수 있음) 데이터를 보존할 수 있는 다른 방법은 없습니다. 따라서 OS는 스왑 공간을 예약하지만(반드시 커밋하지는 않음) 맵에 작성 중이고 사용되지 않은 물리적 페이지가 없는 경우(매우 가능하고 일반적인 시나리오) 대략 다음과 같습니다.보장하다여전히 작동합니다.
이제 교환이 없으면 어떻게 되나요? 즉, 스와핑을 보존할 수 없다는 뜻입니다. 즉, 여유 물리적 페이지가 남아 있지 않고 페이지에 쓰고 있으면 이를 수신하는 프로세스의 형태로 예상치 못한 분할 오류가 발생하여 종료될 수도 있습니다. .
[/편집하다]
그러나 스왑 영역을 RAM 크기의 두 배로 설정하라는 기존 권장 사항은 의미가 없습니다. 디스크 공간이 저렴하더라도 그렇게 많은 스왑 공간을 할당하는 것은 의미가 없습니다. 값싼 물건의 낭비는 여전히 낭비이며, 당신은확실히 원하지 않는다수백 메가바이트(또는 그 이상)의 작업 세트를 지속적으로 교체합니다.
단 한 명도 없어"옳은"크기 교환(사용자 및 의견 수만큼 "올바른" 크기가 있습니다). 나는 일반적으로 RAM 크기에 관계없이 고정된 512MiB를 할당하는데 이는 나에게 매우 효과적입니다. 그 이유는 512MiB가 가능하기 때문입니다.언제나요즘에는 작은 디스크라도 가격이 저렴합니다. 반면에 몇 기가바이트의 스왑 공간을 추가하는 것은 그다지 좋지 않습니다. 심각한 문제가 발생하지 않는 한 사용하지 마세요.
SSD에서도 스와핑은 RAM보다 훨씬 느립니다(버스 대역폭과 대기 시간으로 인해).매우 수용 가능더 이상 필요하지 않은 항목을 교체하기 위해 이동하십시오(즉, 다시 교체하지 않을 가능성이 높으므로 무료 페이지 풀이 실제로 무료로 확장됩니다).필요많은 교환(즉, 50GiB 데이터 세트를 사용하는 애플리케이션이 있는 경우)이 발생하면 거의 손실됩니다.
컴퓨터가 기가바이트 페이지를 들어오고 나가기 시작하면 모든 것이 느려집니다. 따라서 나를 포함한 대부분의 사람들에게 이것은 선택 사항이 아니므로 그렇게 많은 교환을 수행하는 것은 의미가 없습니다.
답변2
나는 여기서 본 감정 중 일부에 동의하지 않습니다. 특히 프로덕션 환경에서는 여전히 스왑 파티션을 생성합니다. 저는 가정용 컴퓨터와 가상 컴퓨터에서도 이 작업을 수행합니다.
요즘에는 메모리 크기를 약 1-1.5배로 조정합니다. 경험상 2x RAM이 일반적이었습니다. 디스크 교체는 백업이나 보호가 필요하지 않기 때문에 "비용이 저렴"합니다.
메모리가 부족한 경우 스왑 공간을 사용하면 문제를 해결할 수 있는 약간의 시간과 버퍼를 얻을 수 있습니다.
/tmp와 같은 것이 스왑 공간에 상주할 수 있다는 점을 인식하십시오.
스왑 영역은 다음 재부팅 시 복원할 수 있도록 부분 코어 덤프를 저장할 수 있습니다. 이는 나중에 수행해야 하는 긴급 디버깅에 유용할 수 있습니다.
답변3
아마도:
나는 이 주제에 대해 많은 생각을 해왔고, 셀 수 없을 정도로 논쟁의 양측에 대한 더 많은 관점을 보았습니다. 나의 접근 방식은 알아낼 방법을 개발하는 것입니다.
크기가 충분하다고 생각되는 활성 스왑 파티션으로 시작하십시오.
그런 다음 작업 공간에서 터미널을 열고 명령을 실행하면 free -hs 1
매초 사용량이 보고됩니다.
다른 작업공간으로 전환하는 옵션이 있습니다.
당신이 할 수 있는 모든 일을 하고 더 많은 일을 하십시오. 모든 일반적인 앱을 한 번에 실행하고, 여러 탭을 탐색하고, 시스템이 실제로 작동하도록 필사적으로 노력하십시오. 이는 컴파일 작업을 실행하고 이메일 등을 확인하는 동안 12개의 비디오 1/2을 다시 인코딩하는 것을 의미할 수 있습니다. 현실을 직시하자, 모든 것은 어떻게 하느냐에 관한 것이다너시스템을 사용하세요.
시스템에 부하가 높은(또는 잠재적으로 부하가 높은) 느낌이 들면 터미널을 보고 결과를 확인하세요. 또는 >output.txt
전체 실행을 확인할 수 있도록 명령에 추가하여 출력을 파일로 리디렉션하는 것이 더 좋습니다.사용 가능한 메모리보다 더 많은 스왑 공간을 사용하지 않는다면 스왑 공간이 필요하지 않습니다. 그렇다면 이렇게 하세요.
교환할 필요 없어요. 아마도 그럴 것입니다. 왜 알아내지 않습니까?
크기 교환에 관한 경험 법칙은 사용법의 문제이기 때문에 종종 과대평가됩니다.
답변4
스왑 공간은 커널 스왑 인/아웃을 기다리는 동안 허용할 수 있는 최대 크기보다 커서는 안 됩니다. 그렇지 않으면 시스템에 대한 새로운 오류 모드가 생성되는 것입니다(스왑에서 복구할 수 없게 멈춤). 최신 드라이브는 GB/초 단위로 전송할 수 있지만 Linux는 일반적으로 초당 수백 kB 또는 최대 몇 MB의 속도로만 스왑을 이동할 수 있습니다. 이러한 대규모 교체로 인해 시스템을 몇 분, 몇 시간 또는 며칠 동안 사용할 수 없게 될 수 있습니다.
수행 중인 작업을 수행하기에 충분한 물리적 메모리가 있는 경우 이상적인 스왑 크기는 프로세스가 유지하지만 사용하지 않는 "정크 데이터"의 양과 일치시키는 것입니다. 그 범위는 몇 메가바이트에서 수백 메가바이트에 이릅니다. 이 정책을 사용하면 다시는 사용할 수 없는 데이터를 영구적으로 저장하는 대신 유용한 정보를 캐시하는 데 모든 물리적 메모리를 사용할 수 있습니다.
물리적 메모리가 충분하지 않은 경우 많은 스와핑으로 인한 심각한 속도 저하를 견딜 수 있는지 평가해야 합니다. 그렇다면 최대 1~2GB의 스왑 공간을 확보하세요.가능한매우 빠른 드라이브를 가지고 있다면 최대 4GB까지 가능합니다. 그러나 이 양을 초과하면 시스템 오류 모드가 더욱 악화될 뿐이므로 더 많은 RAM 구입을 고려해야 합니다.