[unix] vm.overcommit_ratio의 남은 메모리는 어디로 갑니까?

로 설정 vm.overcommit_memory하여 메모리 오버 커밋을 비활성화하면 2기본적으로 시스템은 여기에 설명 된대로 스왑 + 물리적 메모리의 50 %까지 메모리를 할당 할 수 있습니다 .

vm.overcommit_ratio파라미터 를 수정하여 비율을 변경할 수 있습니다 . 80 %로 설정하여 실제 메모리의 80 %가 사용될 수 있다고 가정 해 봅시다.

내 질문은 :

  • 나머지 20 %로 시스템이 무엇을합니까?
  • 왜이 매개 변수가 처음에 필요한가요?
  • 왜 항상 100 %로 설정하지 않아야합니까?


답변

나머지 20 %로 시스템이 어떻게됩니까?

커널은 나머지 물리적 메모리를 자체 목적 (내부 구조, 테이블, 버퍼, 캐시 등)으로 사용합니다. 메모리 초과 커밋 설정은 사용자 응용 프로그램 가상 메모리 예약을 처리하며 커널은 가상 메모리를 사용하지 않고 물리적 메모리를 사용합니다.

이 매개 변수가 처음에 왜 필요한가요?

overcommit_ratio매개 변수는 응용 프로그램이 향후에 합리적으로 사용할 수있는 것보다 더 많은 가상 메모리를 예약하지 못하도록 (즉, 실제로 메모리에 액세스 할 때 또는 최소한 시도하려고 할 때) 방지하도록 설계된 구현 선택입니다.

overcommit_ratioLinux 커널 개발자는 50 %로 설정 하는 것이 합리적인 기본값으로 간주되었습니다. 커널이 실제 RAM의 50 % 이상을 사용할 필요가 없다고 가정합니다. 마일리지는 조정 가능한 이유에 따라 달라질 수 있습니다.

왜 항상 100 %로 설정하지 않아야합니까?

커널을 0 % (또는 너무 적은)의 RAM을 사용한다고 가정 할 수 없으므로 100 % (또는 “너무 높은”값)로 설정해도 초과 커밋을 확실하게 비활성화 할 수 없습니다.

커널이 어쨌든 필요한 모든 물리적 메모리를 선점 할 수 있기 때문에 애플리케이션 충돌을 막지 않습니다.


답변

비율을 100 %로 설정하면 파일 지원 페이지 또는 커널 코드, 네트워크 버퍼 등과 같은 커널 내 할당을위한 공간이 예약되지 않습니다.

커널 내부 구조는 오버 커밋을 일으켜 관계없이 할당됩니다. 일반적으로 개별적으로 제한됩니다 (예 : 네트워크 버퍼 설정이 있습니다). 전체 제한이 컨테이너 호스팅을 목적으로 노력하고 있지만 전체 제한이 50 %라고 생각하지 않습니다.

파일 백업 페이지는 일반적으로 사용자 공간 코드를 실행하는 곳이므로이 공간도 필요합니다.


답변