Linux 및 메모리 버프/캐시 및 디스크 스토리지

Linux 및 메모리 버프/캐시 및 디스크 스토리지

메모리 버프/캐시에 관해 질문하고 싶습니다.

디스크가 있는 Linux 시스템과 /var/data 디스크에 데이터를 쓰는 일부 애플리케이션이 있다고 가정해 보겠습니다.

응용 프로그램이 디스크에 데이터를 썼을 때 이 데이터는 메모리 캐시에도 저장된다는 것을 이해합니다.

일정 시간 동안, 그리고 X 시간이 지나면 애플리케이션 데이터가 메모리 캐시에서 제거됩니다.

특정 데이터를 디스크가 아닌 메모리 캐시에 강제로 저장하는 것이 가능합니까?

내 질문의 이유는 빠른 읽기/쓰기를 원하는데 디스크가 매우 느리기 때문입니다.

답변1

메모리 캐시에 저장됨

실제로 그런 것은 없습니다. 당신은 이것부터 시작합니다버프/캐시:

]# free -g
              total        used        free      shared  buff/cache   available
Mem:              7           0           3           0           3           6
Swap:             0           0           0

이는 현재 버퍼 또는 캐시로 사용되는 RAM의 양을 제공합니다. 커널은 디스크가 느리고 RAM이 충분한 경우가 많기 때문에 정확히 이 작업을 수행합니다.

특정 파일에 대해 RAM의 일부를 예약하려면 해당 파일을 RAM 디스크( mount -t tmpfs ...)에 넣을 수 있습니다. 하지만 그런 다음 이를 다시 디스크에 복사해야 한다는 것을 기억해야 합니다.

답변2

메모리 계층 구조가 어떻게 작동하는지에 대해 오해가 있을 수 있다고 생각합니다. 계층 구조는 CPU에 가장 가까운 것부터/가장 빠른 것부터 가장 느린 것까지 진행됩니다.

CPU 레지스터 > 캐시 메모리 > RAM/메인 메모리 > 디스크

캐시 메모리는 CPU와 메인 메모리 사이에 있으며 메인 메모리보다 액세스 속도가 빠릅니다. 일반적으로 메모리 위치에 액세스할 때 근처 데이터 청크(예: 주소 범위 블록의 복사본)가 캐시에 복사됩니다. 그런 다음 다음에 메모리 위치에 액세스할 때 캐시를 먼저 검사하여 데이터가 이미 있는지 확인하고 메인 메모리에 액세스하지 않고도 시간을 절약할 수 있습니다.

그래서 귀하의 질문은 말이되지 않는다고 생각합니다. 일반적으로 주 메모리와 디스크 사이에는 중간 저장소나 캐시가 없습니다. 현재 사용 중인 데이터는 RAM에 저장되며, 이는 RAM에 저장하고 액세스하는 가장 효율적인 방법입니다. 나중에 사용하기 위해 저장하려면 컴퓨터를 끈 후 디스크에 복사하세요(이것이 유일한 옵션이기 때문입니다). 지금 빠르게 데이터에 액세스하려면 꼭 필요한 경우가 아니면 디스크를 만지지 마십시오.

나는 캐시 메모리 관리를 쉽게 무시하고 캐시에 무언가를 저장하지만 명시적으로 RAM에는 저장하지 않는 방법을 알지 못합니다. 일반적으로 메모리 캐싱을 관리하기 위한 매우 우수하고 효율적인 시스템이 이미 마련되어 있습니다.

또한 X 시간이 지나면 데이터가 캐시 메모리에서 제거된다는 것을 믿지 않습니다. 일반적으로 CPU가 액세스하려는 최신 데이터에 의해 푸시됩니다.

관련 정보