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


10

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

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

내 질문은 :

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

답변:


6

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

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

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

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

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

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

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

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


커널이 어쨌든 필요한 모든 메모리를 사용할 수 있다면이 매개 변수를 노출 (또는 생성)하는 시점은 무엇입니까?
Dan Tumaykin

해당 매개 변수에 대해 자세히 설명하는 공식 문서가 있습니까? kernel.org/doc/Documentation/vm/overcommit-accounting 외에도 커널 메모리에 대한 참조가 없습니다.
Dan Tumaykin

1
"전체 주소 공간 커밋"을 참조 할 때 정확하게 고려해야 할 사항을 충분히 자세하게 설명하는 문서를 아직 찾지 못했습니다. "대부분의 상황에서 프로세스가 종료되지 않음을 의미합니다 ..."라는 링크를 제공하는 문서는 다른 곳에서 일부 메모리를 사용할 수 있는지 확인하기에 충분하며이 메모리의 명백한 소비자는 커널입니다.
jlliagre

2

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.