Linux가 캐시를 자동으로 지우지 않는 이유는 무엇입니까?

Linux가 캐시를 자동으로 지우지 않는 이유는 무엇입니까?

배경

내 질문은 기본적으로 이것에 대한 후속 조치입니다.질문그리고답변, 그리고 특히 이것은논평.

많은 양의 파일을 복사하거나 재동기화해야 할 때마다 시스템의 메모리가 가득 차는 경향이 있으므로 루트로 다음과 같은 스크립트를 실행합니다.

while true ; do echo "syncing" && sync && echo 3 > /proc/sys/vm/drop_caches && echo "done" && sleep 60 ; done ;

질문

  • 이것이 어떤 식으로든 시스템에 해를 끼치거나 부정적인 영향을 미칠 수 있습니까? (특히, 언급된 댓글에서 언급된 "위험"은 무엇입니까?)
  • 대답이 "아니요"(내가 의심하는 것임)라면 왜 Linux는 기본적으로 이 명령을 자동으로 실행하지 않습니까? (이로 인해 눈에 띄는 변화는 보이지 않고, 메모리가 부족하지 않다는 것만 알 수 있습니다...)

답변1

캐시를 삭제해도 아무런 이점이 없기 때문입니다. 물건을 잊어버리는 것은 이득이 있는 곳이 아닙니다. 이득은 메모리를 재사용하는 것인데, 어쨌든 이런 일이 일어날 것입니다. 일부 포인트 데이터가 메모리에서 제거됩니다.

그러나 이러한 대규모 작업을 수행하면 성능이 저하될 수 있습니다. 데이터가 캐시되었지만 재사용되지 않으면 아무런 이점도 없이 다른 데이터가 제거됩니다.

따라서 캐싱 없이 작업을 실행해야 합니다(불행히도 이 작업을 수행하는 명령이 기억나지 않습니다).

답변2

Linux가 캐시를 자동으로 지우지 않는 이유는 무엇입니까?

그럴 것이다.

ron> free -g
             total       used       free     shared    buffers     cached
Mem:           504        415         88          1          0        352
-/+ buffers/cache:         62        441
Swap:            0          0          0

캐시된 메모리는 여전히 사용 가능한 메모리로 간주되어야 합니다.

free가 0으로 떨어지면 캐시된 항목을 가져옵니다.

이것이 어떤 식으로든 시스템에 해를 끼치거나 부정적인 영향을 미칠 수 있습니까?

피해=아니요. 연구 echo 3 > /proc/sys/vm/drop_caches해 보면 이것이 다음과 같은 것임을 알게 될 것입니다.비파괴적인작업.

부정적인 영향은 캐시에 있던 것을 디스크에서 읽어야 함으로써 발생하는 성능 저하입니다. 예를 들어 10GB 데이터 파일을 읽는 C 프로그램을 작성해 보세요. 처음 실행하면 디스크에서 읽기 때문에 속도가 느려지지만 그 이후에는 해당 데이터 파일이 RAM에 캐시되어 있기 때문에 훨씬 빨라집니다. 캐시를 삭제하면 다음 번에 데이터 파일을 읽는 프로그램 실행이 처음 실행되었을 때처럼 느려집니다. 이는 쉽게 관찰할 수 있고 반복 가능합니다.

대답이 '아니오'라면 Linux가 기본적으로 이 명령을 자동으로 실행하지 않는 이유는 무엇입니까?

이런 일이 발생하는 방법과 장소를 자세히 설명해야 합니다. RHEL/CentOS 7.7과 같은 현재 Linux에서는 이 사실을 알지 못합니다. 그러나 이전 Linux(예: 3.x 이전 커널)에서는 캐싱이 지금만큼 강력하지 않았을 때 배포판에서 내린 결정이었을 수 있습니다(제 생각에는). 몇 년 전 SLES 11.4를 사용했을 때 SuSE 사람들은 캐시 삭제가 자동으로 발생하도록 코드를 작성하지 않았다고 확신합니다. 그러나 일부 작업 서버의 경우에는 당시 우리를 위해 구입하여 SLES를 구성한 사람들이 crontab을 수행했습니다. 주기적인 드롭 캐싱을 수행하기 때문에 왜 완료되었는지에 대한 회색 영역이 있습니다. 나는 그것이 관리 = 좋은 사고 방식이라고 생각하며 결코 파괴적인 명령이 아니기 때문에 실제로 해를 끼칠 수 없습니다. sles 11.4에서 수동으로 몇 번 echo 3 > drop_caches다시 수행한 것은 문제 해결을 위한 것이었습니다. 궁극적으로 재부팅이 필요한 부분은 실제로 해결되지 않았기 때문입니다.

RHEL 성능 조정 가이드 및 가상 메모리 조정을 살펴보세요. 나는 이것이 RHEL에만 국한된 것인지, 모든 Linux 커널과 관련이 있고 Linux 배포판에만 국한되지 않을 정도로 낮은 수준인지 알지 못합니다. 또한 커널 2.6에서 3.x, 4.x로 변경된 사항은 이 점에서 중요하다고 확신하므로 Linux 커널 릴리스 노트를 읽어 보는 것이 좋습니다.

관련 정보