캐싱 이해 및 구성

캐싱 이해 및 구성

몇 가지 질문이 있습니다.캐시 메모리.

내 시스템에서 "free -h" 명령은 다음과 같은 출력을 제공했습니다.

      total        used        free      shared  buff/cache   available
Mem:   7.6G        2.1G        1.5G         46M        4.0G        4.8G
Swap:  1.6G         28M        1.6G
  1. 주 메모리에 "캐시"가 필요한 이유는 무엇입니까?

    내가 아는 한, "캐시"는 주 메모리(RAM)와 동일하지 않습니다. 이것은 매우 비싸고 훨씬 빠릅니다. 내가 틀렸다면 정정해주세요.

  2. 1시간 전 캐시 메모리는 3GB였습니다. 지금 1GB가 추가된 이유는 무엇입니까?

    새로운 프로세스를 시작/실행하지 않는다는 점에 유의하세요.

  3. 새 프로세스/애플리케이션을 시작할 수 있는 최대 한도는 얼마입니까?

    free -h명령 출력 에 따르면 ,

    free memory = 1.5 GB, Cache memory = 4 GB and Swap memory = 1.6 GB
    

    새 지원서를 시작할 수 있나요 (1.5 + 1.6) GB or (1.5 + 1.6 + 4) GB?

  4. 이 캐시 값을 설정/구성할 수 있나요?

    그렇다면 어떻게?

답변1

  1. 정정하겠습니다! 가장 비싼 것은CPU 캐시.
  2. 이것이기 때문에디스크 캐시, 모든 파일 액세스에 사용됩니다.
  3. 나쁜 소식: 복잡하고 성가시다.
  4. 좋은 소식: 이제 너무 걱정할 필요가 없습니다. 일반 데스크탑 시스템에는 8GB RAM이면 충분합니다.

1. 당신을 정정하고 싶습니다! 가장 비싼 것은CPU 캐시.

CPU에는 빠른 내부 RAM의 작은 부분이 있습니다. CPU는 자주 액세스하는 데이터를 주 메모리에서 이 캐시로 자동 복사합니다.

free다른 곳에서 설명 했듯이디스크 캐시. CPU 캐시는 표시되지 않습니다. 디스크 캐시는 디스크 블록을 제외하고 동일한 작업을 수행합니다. 메인 메모리에 저장되며 운영체제에 의해 관리됩니다.

따라서 우리는 세 가지 다른 수준의 메모리를 가지고 있습니다! 이는 "메모리 계층 구조"로 설명됩니다. 이것을 디스크와 비교하면 디스크 캐싱에 사용하는 주 메모리는 실제로 바이트당 더 빠르고 더 비쌉니다.

2. 이래서디스크 캐시, 모든 파일 액세스에 사용됩니다.

따라서 새로운 프로그램을 로드할 필요가 없습니다. 그냥 사용하기만 하면 바로 사용할 수 있습니다. 예를 들어 웹 사이트를 방문하면 해당 웹 사이트가 디스크에 복사됩니다(또 다른 캐싱 전략!)

"자주 액세스하는" 데이터가 캐시되어 있다고 거짓말을 했습니다. 모든 것을 캐싱하는 것이 가장 쉽고 효율적입니다.

디스크 캐시는 사용 가능한 메모리가 더 이상 없을 때까지 계속 증가합니다.

더 많은 메모리가 필요하면 공간을 확보하기 위해 일부 블록이 디스크 캐시에서 제거됩니다. 이러한 퇴거는 효율성을 극대화하도록 고안된 정책에 의해 통제됩니다. 예: "LRU": 퇴거가장 최근에 사용됨막혔습니다.

3. 나쁜 소식: 복잡하고 짜증난다.

Windows는 이러한 문제를 염두에 두고 개발되었습니다. 너무 많은 앱을 열려고 하면 사용자를 차단하고 불평해야 하며, 이를 통해 동시에 열 수 있는 앱 수에 대한 아이디어를 얻을 수 있습니다.

Linux에서 예상되는 동작은 스왑 공간을 채우기 시작하고 시스템이 갑자기 너무 느려져서 복구할 수 없게 되는 것입니다. 또는 스왑이 없는 경우 프로그램 코드 캐시 및 기타 중요한 파일이 제거되는 유사한 상황이 발생할 수 있습니다. 하지만 충분히 진행했는데 디스크 지원이 없는 페이지에 대한 메모리가 부족하다면,충분한 저장살인자는 기억을 되찾고 싶어하지 않는 프로세스를 살해하기 시작할 것입니다.

얼마나 많은지 대략적인 아이디어를 얻을 수 있습니다. 결국 복구하려면 하드 재부팅을 해야 합니다 :).

"과도한 커밋"을 방지하고 스왑을 비활성화하거나 매우 작게 유지하도록 구성할 수 있습니다. 이것은 Windows에 가장 가까운 것입니다. 그러나 많은 Linux 코드는 "과용"을 가정하여 설계되었습니다. 메모리가 충분하다면 그렇지 않습니다.또한이것은 큰 문제입니다. 그리고 디스크 캐시는 여전히 덜 위험한 남용으로 작용합니다.~ 해야 하다결국 많은 메모리가 필요하게 되고 그로부터 어떤 이점도 얻지 못합니다.

실제로... 어떤 사람들은 스왑을 전혀 하지 않거나 거의 하지 않고 실행하는 것을 선호하는데, 이는 괜찮습니다. 그러나 과도한 사용을 비활성화하는 경우는 드뭅니다. 따라서 이것은 제안이 아닙니다. 활성화하면 다른 세계로 들어가게 됩니다. 예를 들어, 질문을 하고 그것이 실제로 남용을 비활성화하는 것과 관련이 있는 경우 이를 인식하는 경험을 가진 사람은 많지 않을 것입니다.

4. 좋은 소식: 이제 너무 걱정할 필요가 없습니다. 일반 데스크탑 시스템에는 8GB RAM이면 충분합니다.

4GB도 현재 사용 가능하며 그다지 비싸지 않습니다. 실행하려는 경우 이는 단지 제한 사항일 뿐입니다.시스템, 즉 가상 머신보다. 이제는 4GB로 실행하는 경향이 있습니다. 마지막으로 메모리 부족 문제가 발생한 것이 언제인지 기억이 나지 않습니다. 내 경험은 메모리가 훨씬 적은 구형 시스템에서 비롯되었습니다.

다른 답변에서 언급된 sysctls는 다음을 수행합니다.아니요디스크 캐싱을 제한합니다. 보유할 수 있는 "더티" 디스크 캐시의 양을 제한합니다. 이는 프로그램이 데이터를 기록했지만 아직 디스크에 다시 동기화하지 않은 캐시 블록을 나타냅니다. 이러한 유형의 캐시를 "후기입 캐시"라고 합니다.


즉, 활용률을 대략적으로 파악하려면

  1. 포괄적인 보기를 얻으려면 계산에서 "사용된" 및 "버프/캐시" 합계를 고려하십시오.
  2. 오래된 캐시 파일을 제외하기 위해 새로 부팅할 때 측정이 수행됩니다. 또는 실행 후 다시 로그인하세요 sync; echo 3 | sudo tee /proc/sys/vm/drop_caches. 나는 후자의 결과가 약간 낮을 것으로 예상합니다. 이들 중 어느 것이 더 현실적인지는 논쟁의 여지가 있습니다. 분명히 캐시를 삭제하는 것은 좀 더 인위적인 테스트이지만 작업에 실제로 삭제된 파일이 필요한 경우 어쨌든 해당 파일을 다시 읽습니다.
  3. 이는 디스크 캐시에 많은 데이터 파일이 남지 않고 파일이 맞지 않아도 괜찮으며 디스크 성능에 만족할 것이라고 가정합니다. 비디오 파일을 재생한 후 측정을 하면 이런 일이 발생할 수 있습니다. 이 경우에는 더 어려울 것입니다. 전체 비디오 파일이 메모리에 맞으면 버퍼/캐시에서 해당 크기를 빼면 됩니다.

예를 들어 옵션을 사용하여 커널을 부팅하면 X 메모리 양이 작업 부하에 충분한지 확인할 수 있습니다 mem=X. mem=256M원래 Raspberry Pi 모델 A와 동일한 양의 RAM에서 32비트 소프트웨어를 테스트하려는 것과 같습니다 .

답변2

1. 메인 메모리 내부에 "캐시 메모리"가 필요한 이유는 무엇입니까?

"캐시"라고 하면 디스크 캐시에 사용되는 메모리, 즉 향후 프로세스 속도를 높이기 위해 하드 디스크 정보를 저장하는 데 사용되는 RAM을 생각하시는 것 같습니다. 향후 프로세스가 아직 메모리에 없는 정보를 사용해야 하는 경우 이러한 새로운 프로세스에서 사용되면 해당 정보는 해제됩니다.

2. 1시간 전 캐시 메모리는 3GB였습니다. 지금 1GB가 추가된 이유는 무엇입니까?

사용되지 않은 메모리는 낭비되는 메모리이기 때문에 이것에 대해 나쁘거나 특이한 것은 없습니다. 시스템은 미래에 사용할 수 있을 것으로 생각되는 코드를 미리 로드할 수 있습니다.

3. 새로운 프로세스/애플리케이션을 시작할 수 있는 상한선은 얼마입니까?

기본적으로 available다음 메모리 buffers/cached가 0이 될 때까지. 이런 일이 발생하면 시스템은 디스크의 스왑 메모리를 사용하기 시작합니다(이것은 RAM이 아니라 하드 드라이브의 공간입니다). 이는 디스크 속도가 RAM 속도보다 훨씬 느리고 시스템 속도가 매우 느려질 수 있기 때문에 바람직하지 않습니다.

4. 이 캐시 값을 설정/구성할 수 있나요?

Linux/Unix이므로 당연히 설정 가능합니다 :) 이건지침Linux 디스크 캐시 구성 정보.

당신은 또한 볼 수 있습니다이 답변각 영역에 대해 잘 설명되어 있습니다. 좀 더 유머러스한 접근 방식은 다음과 같습니다.www.linuxatemyram.com.

답변3

캐싱은 Linux 운영 체제의 가장 큰 성능 이점 중 하나입니다.

  1. 주 메모리에 "캐시"가 필요한 이유는 무엇입니까?

Linux 운영 체제는 처음부터 이러한 방식으로 설계되었습니다. Linux 커널은 일부 애플리케이션이 해당 메모리의 일부를 요구하지 않는 한 디스크 캐싱에 사용 가능한 메모리를 사용합니다. 이렇게 하면 성능이 약간 향상됩니다. 더 이상 사용 가능한 물리적 메모리 페이지가 없으면 커널은 일부 오래된 페이지를 다시 디스크로 교체합니다.

  1. 1시간 전 캐시 메모리는 3GB였습니다. 지금 1GB가 추가된 이유는 무엇입니까?

물리적 메모리를 사용하지 않는 경우 커널은 이를 디스크 버퍼 캐시로 사용합니다. 디스크 버퍼는 최근에 액세스한 디스크 데이터를 메모리에 저장합니다. 동일한 데이터가 다시 필요한 경우 캐시에서 신속하게 검색하여 성능을 향상시킬 수 있습니다.

  1. 새 프로세스/애플리케이션을 시작할 수 있는 최대 한도는 얼마입니까?

OS가 할당할 물리적 메모리의 양을 결정하기를 원할 때마다 애플리케이션을 시작할 수 있지만 이는 캐싱과는 아무런 관련이 없습니다. 일반적으로 일부 비정상적으로 큰 규모의 응용 프로그램을 실행할 때 Linux OOM(메모리 부족) 커널 문제가 발생할 가능성이 있지만 이는 운영 체제 설정보다 응용 프로그램 자체 및 설계 및 코딩 방식과 더 관련이 있습니다.

  1. 이 캐시 값을 설정/구성할 수 있나요?

이 링크를 확인하실 수 있습니다캐시/버퍼 지우기캐시/버퍼를 지우는 방법. 제가 아는 한, 캐시에 정적 값을 설정하는 것은 불가능합니다.

관련 정보