![Overcommit_memory =0의 경험적 방법은 무엇을 의미합니까?](https://linux55.com/image/115392/Overcommit_memory%20%3D0%EC%9D%98%20%EA%B2%BD%ED%97%98%EC%A0%81%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9D%84%20%EC%9D%98%EB%AF%B8%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
나는 man proc 문서를 읽었습니다. overcommit_memory=0의 경험적 방법은 overcommit_memory와 관련하여 잘 이해되지 않습니다. 휴리스틱은 실제로 무엇을 의미합니까?
"MAP_NORESERVE를 확인하지 않고 mmap(2)을 호출"한다는 것은 커널이 가상 메모리만 할당하고 스왑 공간이 존재한다는 사실조차 모른다는 의미입니까?
이 파일에는 커널 가상 메모리 계산 모델이 포함되어 있습니다. 값은 다음과 같습니다. 0: 경험적 오버커밋(기본값) 1: 항상 과도하게 사용하고 확인하지 마십시오. 2: 자주 확인하고 과도하게 투자하지 마세요. 모드 0에서는 MAP_NORESERVE를 사용하는 mmap(2) 호출이 검사되지 않으며 기본 검사가 매우 약하여 위험이 따릅니다. 프로세스를 "OOM-killed"로 만듭니다.
이전 질문에 덧붙여, 가상 주소 공간이 소진되면 남은 물리적 메모리가 충분한지 여부에 관계없이 OOM이 발생할 수 있는지 여부에 대해 질문드립니다.
감사해요.
답변1
overcommit_memory
메모리 관리 하위 시스템에는 이 설정을 고려하는 세 가지 위치가 있습니다.
주요한 것은
__vm_enough_memory
inmm/util.c
은 메모리 할당을 진행하기에 충분한 메모리가 있는지 여부를 결정합니다(반드시 호출되지 않는 유틸리티 함수라는 점에 유의하세요). 1 이면overcommit_memory
함수가 항상 성공합니다. 2이면 실제 사용 가능한 메모리를 확인합니다. 0이면 다음과 같이 언급한 유명한 경험적 방법을 사용합니다.- 사용 가능한 페이지 수 계산
- 파일 지원 페이지 수 추가(복원 가능)
- 공유 메모리에 사용되는 페이지 삭제
- 교환 페이지 추가
- 재활용 가능한 페이지 추가
- 페이지를 예약할 계정
- 루트용으로 일부 메모리 예약(
cap_sys_admin
프로세스에서 할당이 수행되지 않은 경우)
결과 합계는 메모리 할당을 위한 임계값으로 사용됩니다.
mmap
또한 설정을 확인합니다.MAP_NORESERVE
오버커밋이 허용되는지(모드 0 및 1) 할당에 백업 스왑이 없는지(VM_NORESERVE
) 확인합니다. 이 특별한 경우에 모드 0은 실제로 모드 1과 동일합니다. 이는 "mmap(2)
확인 없이 호출MAP_NORESERVE
"을 의미합니다. 이는MAP_NORESERVE
mmap
호출이 항상 성공하고 초과 할당으로 인해 OOM 킬러가 개입하게 됨을 의미합니다. 사실, 또는 쓰기를 시도하는 동안 세그먼트 충돌이 발생합니다.shmem
와 유사한 동작을 갖습니다mmap
.
주소 공간이 부족하면 할당이 실제로 진행될 수 없으므로 OOM 종료가 아닌 할당 실패가 발생합니다.