저는 Xubuntu 14.04 64비트, Linux 버전 3.8.0-25, 8GB RAM을 실행하고 있습니다.
나는 한 번에 많은 수의 데이터 파일(~23k), 총 약 45G의 데이터를 로드하는 스크립트(MATLAB에 그 가치가 있는)를 가지고 있습니다. 내가 겪고 있는 문제는 각 파일이 로드된 후에도 파일 캐시에 남아 있다는 것입니다. Linux는 다른 메모리 콘텐츠보다 이러한 파일을 메모리에 캐싱하는 것을 선호하는 것 같습니다. 이로 인해 다른 모든 항목이 강제로 스왑되어 시스템이 크롤링 속도가 느려집니다. 초당 여러 파일을 읽고 있으므로 이 작업은 상당히 빠르게 진행됩니다. 각 파일을 한 번만 읽기 때문에 파일 사용을 마친 후에 파일을 캐시에 보관할 필요가 없습니다.
나는 어느 정도 작동하는 스왑을 끄려고 시도했지만 나쁜 해결책인 것 같습니다(다른 프로그램이 너무 많은 메모리를 사용하기 시작했을 때 이미 한 번 실패했습니다). 파일 캐싱을 위해 Linux에서 사용하는 RAM의 양을 제한하는 방법이 있습니까?
답변1
답변은 아니지만 댓글이 너무 깁니다.
Linux의 메모리 관리는 매우 똑똑한 사람들에 의해 오랜 수명 동안 신중하게 조정되었으며 일반적으로 메모리에 유지할 항목과 삭제할 항목을 선택할 때 올바른 결정을 내리는 데 탁월한 역할을 합니다.
불행하게도 귀하의 작업 부하가 해당 결정과 그다지 호환되지 않는 것 같습니다. :-( 그러나 귀하의 보고서에 상당히 놀랐습니다. 그러나 실제로는 캐시에서 무언가를 제거하는 대신 더티 메모리를 강제로 교체하는 것을 선호하는 경우가 많습니다. 사이의 결정 캐시에서 콘텐츠 A를 삭제하는 것과 캐시에서 콘텐츠 B를 삭제하는 것은 어려운 선택일 수 있지만 캐시에서 콘텐츠 C를 삭제하는 것과 더티 메모리 D를 스왑에 쓰는 것 사이의 결정은 비용이 훨씬 낮기 때문에 콘텐츠 C를 삭제하는 것이 좋습니다.
앞으로 특정 캐시 메모리가 더 이상 필요하지 않음을 Linux에 알리는 방법이 있는데, 그것이 시스템 madvise()
호출 MADV_DONTNEED
이지만 MATLAB 스크립트에서 해당 시스템 호출을 호출하는 데 어려움을 겪을 것 같습니다...
어쨌든 파일 캐시 크기를 줄이는 것이 실제로 원하는 작업은 아니라고 생각합니다. MATLAB 자체, GUI 환경 및 기타 시스템 소프트웨어용 스크립트, 실행 파일 및 라이브러리, 런타임 파일 및 플러그인 등도 파일 캐시에 있으므로 이를 파일 캐시에서 강제로 제거한다는 점을 기억하십시오( 파일 캐싱을 선호) 또는 힙 메모리 및 기타 파일 기반이 아닌 매핑을 용이하게 합니다. 이로 인해 교체와 마찬가지로 시스템 속도가 느려집니다.