저는 항상 Linux의 캐시된 메모리(free -m과 같이)를 다시 필요할 경우 재사용할 수 있거나 새 애플리케이션에 더 많은 메모리가 필요할 경우 신속하게 해제될 수 있는 메모리 페이지로 이해했습니다.이 기사몇 년 전에 도움이 되었습니다.)
실행 파일(예: Thunderbird와 같은 프로그램)과 데이터(예: 로그 파일 내용)가 모두 캐시될 수 있는 것으로 보입니다. 사실 *nix에서는 텍스트 파일과 실행 파일 사이에 차이가 없다고 생각합니다.
많이 변경되지 않는 데이터(예: 텍스트 파일)에 대해서는 이것이 어떻게 작동하는지 알 수 있지만 본질적으로 동적 프로그램에 대해서는 어떻게 작동합니까? 확실히 캐시 메모리는 동적으로 할당된 개체를 복원할 수 없습니까? 그러면 바이트코드(또는 스크립트의 경우 지침)만 캐시됩니까?
편집 1
캐시된 메모리란 "free"를 실행할 때 "캐시된" 열 아래의 메모리를 의미합니다.
$ free -m
total used free shared buffers cached
Mem: 7985 6650 1334 0 150 3201
-/+ buffers/cache: 3298 4686
Swap: 13178 2 13176
편집 2
제가 놓친 팁을 알려준 ls-lrt에게 감사드립니다. SE에 대한 이 답변에서 명확하게 언급했듯이 (먼저 검색해야 함),"캐시 메모리는디스크 캐시VFS에서 사용됨". 이는 실행 파일의 경우 동적으로 할당된 콘텐츠에 관계없이 명령(바이트코드, 스크립트 줄 등)만 이 열에 표시된다는 의미입니다. 내 인상은 전체 메모리 페이지(동적으로 생성된 개체 포함)가 "캐시"되어 있다는 것입니다.
편집 3
에 관한 좋은 예디스크 캐시 사용.
답변1
무료로 표시된 캐시는 파일 시스템 캐시입니다. 파일 시스템 수준에서 모든 것은 단지 데이터의 옥텟일 뿐입니다. 애플리케이션 데이터든 파일 데이터든 차이가 없습니다.그 수준에서. 파일 캐시에서 교체된 실행 파일을 다시 로드할 수는 있지만(실행 파일은아니요스왑 파일에 쓰면 메모리에서 쫓겨납니다. 일반적으로 파일 캐시가 먼저 희생되기 때문에 이런 경우는 드뭅니다.
이제 사용 가능한 메모리와 같은 파일 캐시와 실행 중인 프로그램에 포함될 수 있는 다른 유형의 메모리 간의 차이점을 명확히 이해하시기 바랍니다. "캐시 메모리는 동적으로 할당된 개체를 복원할 수 없습니다"가 무엇을 의미하는지 명확하지 않기 때문입니다. 애플리케이션에서 사용하는 모든 메모리는아니요파일 캐싱과 관련됩니다. 파일 캐시는 애플리케이션에 의한 어떤 종류의 메모리 할당도 캐시하지 않습니다. 파일 캐시는 디스크와 운영 체제 사이의 중개자일 뿐입니다.
심각한 질문에 답하려면 "그럼 캐시된 것은 바이트코드(또는 스크립트의 명령)뿐인가요?"입니다.
파일 캐싱은 디스크의 옥텟만 캐시합니다. 애플리케이션이 어떤 메모리를 사용하는지는 상관하지 않습니다.
답변2
기본적으로 Linux 커널이 메모리의 다양한 유형의 데이터를 처리하는 방식에는 차이가 없습니다. 이를 관리하는 커널 부분을 "가상 메모리 하위 시스템"이라고 하며 메모리의 특정 부분이 작동하는지 여부에만 관심이 있습니다. 프로그램에서 사용 중인지 아닌지.
Linux 커널은 사용 가능한 RAM을 "페이지"라는 작은 덩어리로 나눕니다. 그런 다음 페이지는 "사용 중" 페이지(예: 현재 실행 중인 프로그램의 코드나 데이터가 포함된 페이지)와 "사용되지 않은" 페이지로 분류됩니다. 페이지가 "사용 중"이 되려면 실행 코드, 텍스트 데이터, Java 바이트코드 또는 기타 다른 내용이 포함되어 있는지 여부는 중요하지 않습니다. 중요한 것은 해당 페이지가 "사용 중"이라는 것입니다. RAM에 있어야 합니다. 그 데이터를 끊임없이 방문했기 때문입니다.
RAM은 사용 가능한 가장 빠른 저장 장치이므로 "사용되지 않는" 페이지를 비활성 상태로 두는 것은 낭비이므로 커널은 디스크에서 가져온 캐시 데이터와 곧 다시 필요할 수 있는 데이터를 캐시하기 위해 사용되지 않는 페이지를 "재활용"합니다. 커널에는 이러한 예측을 위한 몇 가지 알고리즘이 있습니다. I/O 시스템 성능은 해당 알고리즘이 컴퓨터의 실제 작업 부하를 얼마나 잘 예측하는지에 크게 좌우됩니다.
또한 I/O 작업 속도를 높이기 위해 RAM의 일부가 디스크에 기록되는 데이터를 버퍼링하는 데 사용됩니다. 대용량 파일을 느린 디스크(예: USB 스틱)에 복사할 때, 명령 cp
은 데이터가 완전히 기록될 때까지 기다린 후 장치에 들어갑니다. 이는 커널이 (느린) 쓰기 작업 속도를 높이기 위해 일부 데이터를 디스크에 다시 기록하기 때문에 정확하게 발생합니다. 몇 초 후에 cp
프로그램이 완료될 수 있습니다. 데이터가 디스크에 기록되면 이 페이지는 다시 사용 가능한 것으로 간주됩니다(캐시된 데이터에 재사용되거나 필요한 경우 "사용 중" 풀로 이동됨).
지적했듯이 "캐시" 페이지는 "사용 중" 데이터에 더 많은 페이지를 할당해야 하는 경우 커널에서 (상대적으로) 빠르게 회수할 수 있습니다. "캐시" 페이지는 디스크에서 사용 가능한 데이터만 보유하기 때문입니다( 캐시 필요할 때 디스크에서 데이터를 다시 가져옵니다.
추가 자료: