스왑이 꺼져 있을 때 주 메모리의 쓰기 중 복사가 작동합니까?

스왑이 꺼져 있을 때 주 메모리의 쓰기 중 복사가 작동합니까?

오버 커밋이 없으면 대부분의 페이지에서 쓰기 중 복사가 전혀 발생하지 않더라도 각 fork()에는 주소 공간을 복사할 수 있는 충분한 여유 저장 공간이 필요합니다.

위의 설명은 Robert Love의 저서(Linux 시스템 프로그래밍 2판, 메모리 관리 장, 오버커밋 및 OOM 주제)에서 발췌한 것입니다.

스왑을 끄면 주 메모리를 오버커밋할 수 없습니다. 이 경우 쓰기 중 복사(예: fork, malloc, mmap 등)가 주 메모리에서 수행됩니까, 아니면 지연 할당 메커니즘 없이 메모리에 전체 데이터를 사전 할당하려고 시도합니까?

누락된 부분이 있으면 수정해 주세요.

업데이트: 친구 여러분, 처음에는 거래소를 닫으면 무리하지 않을 것이라고 생각했습니다. 아래 논의에서 언급했듯이 스왑을 해제하더라도 오버커밋할 수 있습니다.

답변1

교체하지 않고 과용할 수 있습니다. Robert Love의 책에서 "스토리지"라는 단어는 이러한 맥락에서 물리적 RAM을 나타냅니다. 커널은 아직 물리적 RAM에 대한 매핑이나 기록 중 복사의 경우 공유 페이지 프레임에 대한 포인터를 포함하지 않는 프로세스를 위한 메모리 공간을 설정합니다. 페이지에 액세스하면 요청 시 매핑이 생성됩니다. 모든 매핑이 동시에 필요한 것은 아니라고 가정하므로 과잉 커밋은 상대적으로 안전합니다.

답변2

이것은 좋은 기사입니다:열쇠 - 남용

/proc/sys/vm/실제로 파일 구성 에 따라 기본 메모리 제한이 있습니다 . "No Overcommit"으로 설정하고 백분율을 선택하면 다음과 같은 결과를 얻을 수 있습니다.

Memory Allocation Limit = Swap Space + RAM * (Overcommit Ratio / 100)

기본 비율은 50(%)이며, 4G RAM 및 4G 스왑의 경우 할당 한도는 6G입니다.

이 특별한 "과용 금지" 모드에서는 (를 통해 /proc/sys/vm/overcommit_memory)과도하게 커밋하다적극적으로 사용될 것으로 예상되는 스왑 공간의 양을 의미합니다. 8GB를 할당하고 많이 사용하면 속도가 너무 느려지므로 이는 의미가 있습니다. 따라서 스왑 공간은 절반으로 "계산"됩니다.


RAM 크기를 엄격하게 제한하고 교체하지 않으려면 overcommit_memory를 2(= 오버커밋 없음)로 설정하고 overcommit_ratio를 100%로 설정할 수 있습니다.

기본적으로 커널하다몇 가지 확인사항:

경험적 알고리즘을 적용하여 사용 가능한 메모리가 충분한지 확인합니다.

(세 번째 모드는 OOM이 발생할 때까지 확인하지 않음, 즉 오버커밋입니다.)

관련 정보