Mac의 Dynamic_pager를 비활성화하시겠습니까?

Mac의 Dynamic_pager를 비활성화하시겠습니까?

Mac OS X의 메모리 관리에 관한 다음 블로그 게시물을 읽었습니다.http://workstuff.tumblr.com/post/20464780085/something-is-deeply-broken-in-os-x-memory-management

이 문제에 대한 귀하의 의견을 듣고 싶습니다.

메모리가 "단" 4GB이므로 커널 패닉이 발생할 가능성이 있습니다.

나는 회전하는 디스크(SSD와 반대)를 가지고 있고 가끔씩 비치볼을 보거나 때로는 계속하기 전에 외부 HD를 회전시키기도 합니다.

활동 모니터 화면

현재 스왑이 사용되지 않는다고 하는데, 이는 Dynamic_pager를 비활성화해도 아무 일도 일어나지 않는다는 뜻인가요? 일부 페이지 인이 있습니다.

그냥 사용해 보는 것이 얼마나 안전합니까? 메모리가 부족해지면 호출기를 다시 활성화하는 스크립트를 작성할 수 있을까요?

[업데이트]: 결국 26MB 스왑, 더 많은 페이지 입출력, 많은 비활성 메모리가 발생했습니다.

답변1

OS X에는 이에 기여하는 세 가지 문제가 있습니다.

  1. 기본적으로 디스크에 쓰거나 디스크에서 읽는 모든 데이터는 최근 프로그램 데이터보다 높은 우선 순위로 RAM에 캐시됩니다. 애플리케이션은 F_NOCACHE옵션을 사용하여 설명자별로 이를 비활성화할 수 있지만 fcntl()그렇게 하는 경우는 거의 없습니다. 결과적으로 대량의 디스크 활동으로 인해 바로 그 순간에 사용되지 않는 메모리가 교체됩니다. 이로 인해 원래 디스크 활동 외에 교체 및 잠시 후 해당 메모리를 다시 읽기 위한 더 많은 디스크 활동이 생성됩니다.

  2. HFS+는 동시 파일 액세스를 잘 처리하지 못합니다. 특히, 동시에 여러 파일을 열고 닫으면 엄청난 경합이 발생하며 한 번에 하나의 열기/닫기 작업만 발생할 수 있습니다.

  3. 많은 OS X 응용 프로그램은 많은 작은 파일에 디스크 액세스를 분산시킵니다.

결과적으로 두 개 이상의 응용 프로그램이 동시에 많은 파일에 액세스하려고 하면 스왑 활동이 응용 프로그램과 I/O 경쟁을 벌이기 때문에 디스크 I/O 로드가 기하급수적으로 증가합니다.

동적 호출기를 비활성화하면 개인/더티 애플리케이션 페이지를 디스크에 푸시하는 기능을 제거하여 지수 곡선의 초기 부분을 방지할 수 있습니다. 대신 시스템은 공개/클린 매핑 파일(실행 파일, 라이브러리 등)과 처음에 캐시되어서는 안 되는 캐시된 파일 데이터에서 페이지를 청소할 가능성이 높습니다. 실제로 성능이 향상되는지 여부는 사용 중인 응용 프로그램에 따라 크게 달라집니다. 예를 들어 Safari는 디스크 I/O 관리에 매우 취약하므로 이것이 도움이 될 것이라고 생각합니다.

필요한 RAM 양이 실제로 사용 가능한 양을 초과하면 문제가 발생합니다. 패닉 충돌은 하루를 끝내는 매우 갑작스러운 방법입니다. 그러나 대용량 파일을 편집하지 않거나 본질적으로 메모리를 많이 사용하는 작업을 수행하지 않는 경우 위험을 고려할 만큼 드물게 발생할 수 있습니다.

그런데 lsof명령을 사용하면 어떤 프로세스에서 어떤 파일이 열리는지 확인할 수 있고, fs_usage명령을 사용하면 파일 작업의 실행 로그를 볼 수 있습니다. 둘 다 루트로 실행하거나 sudo.

관련 정보