커널 공간이 부족해지면 OOM Killer가 실행됩니까?

커널 공간이 부족해지면 OOM Killer가 실행됩니까?

사용자 공간 프로그램이 malloc()을 유지하면 결국 OOM 킬러가 발생할 수 있다는 것을 알고 있습니다. 하지만 커널 공간은 어떻습니까? 커널 공간에 메모리가 부족해지면 OOM Killer가 실행되어 메모리를 해제합니까? 감사해요

답변1

기본적으로 Linux에서는 커널 할당과 사용자 공간 할당 간에 중요한 차이점이 있습니다(OOM 킬러가 요인일 때마다 적용됨). 커널 메모리 할당 기능은 주소 공간을 할당합니다.그리고할당 함수가 반환될 때 호출자는 반환된 유효한 포인터가 즉시 사용 가능하다는 것을 알 수 있도록 물리적 페이지를 사용합니다. 메모리 할당은 사용자 공간에서 주소 공간을 할당하고 기본적으로 필요한 경우에만 페이지를 할당합니다(이때 OOM 킬러가 작동합니다).

즉, 커널 메모리 할당은 절대 오버커밋이 허용되지 않습니다.

커널 메모리 할당은 결국 OOM 킬러를 트리거하여 사용자 공간에 할당된 페이지를 해제할 수 있습니다. 이에 대한 조건은 다양합니다. I/O가 불가능하거나 파일 시스템을 다시 입력할 수 없는 경우 등에 할당이 이루어질 수 있습니다. 보다GFP 플래그 문서더 알아보기. 커널 할당, 캐시 등에 사용할 수 있는 다른 재활용 메커니즘이 있습니다. 커널에 메모리가 부족하면 일부 메모리를 복구하기 위해 해당 메모리를 비울 수 있습니다.

관련 정보