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에는 저장할 수는 없습니다. 일반적으로 메모리 캐시 관리를 위한 매우 우수하고 효율적인 시스템이 이미 있습니다.

또한 X 시간이 지나면 데이터가 캐시에서 제거될 것이라고 생각하지 않습니다. 일반적으로 CPU가 액세스하려는 최신 데이터에 의해 푸시됩니다.

관련 정보