Linux - 디스크의 데이터를 버퍼링/캐시하기 위해 메모리 내 파일 시스템(ramdisk/tmpfs)을 생성할 수 있습니까?

Linux - 디스크의 데이터를 버퍼링/캐시하기 위해 메모리 내 파일 시스템(ramdisk/tmpfs)을 생성할 수 있습니까?

외장 하드 드라이브에 저장된 대량의 데이터를 처리하는 코드가 있습니다. 디스크에는 약 6.5GiB의 데이터가 있지만 전체 내용이 아닌 일부 파일만 처리됩니다.

필요한 처리 시간을 단축하기 위해 디스크 내용의 복사본을 메모리에 저장하기 위해 tmpfs 파일 시스템을 사용하여 램디스크를 만들었습니다. 시스템을 재부팅할 때마다 디스크의 내용을 이 램디스크에 다시 복사해야 합니다.

모든 것이 내가 가지고 있는 사용 가능한 메모리 양에 맞을 수 있기 때문에 이것은 잘 작동합니다.

그러나 나중에 다른 더 큰 데이터 세트로 변경하면 작동하지 않을 수 있습니다.

실제로 읽고 있는 데이터의 양이 1GB 정도에 불과하기 때문에 이는 상당히 비효율적입니다. (10% 조금 넘는다고 봅니다.)

외부 디스크에서 읽은 데이터를 캐시하기 위해 메모리에 램디스크를 만드는 방법이 있습니까?

나는 이와 같은 일이 Linux에서 가능할 것이라고 확신합니다. 그러나 무엇을 검색해야 할지 모르겠습니다. Ramdisks는 이미 꽤 틈새 주제입니다.

그런데 저는 이 글을 쓰는 시점에서 Debian 10 이전 테스트 브랜치인 Debian Test를 사용하고 있습니다.

편집: 차이가 있다면 해당 디스크에 다시 쓰지 않을 것입니다.

답변1

사용을 고려해 볼 수도 있습니다.파일 시스템 덮어쓰기. 오버레이 파일 시스템을 사용하면 디스크 마운트 지점과 램디스크 마운트 지점을 스택 파일 시스템(오버레이 파일 시스템)으로 결합할 수 있습니다.

OverlayFS는 쓰기 시 복사 방식으로 작동하므로 오버레이가 빈 램디스크로 시작하는 경우 쓰기 권한으로 파일을 여는 경우에만 데이터가 램디스크에 기록됩니다. 이론적으로는 touch원하는 파일을 RAM에 미리 복사할 수 있습니다.

그러나 Linux가 이미강력한 디스크 캐시. 여기에서 바퀴를 재발명하지 않는지 확인하고 싶을 수도 있습니다.

답변2

이는 귀하의 질문에 대한 답변은 아니지만 설명된 문제를 해결하는 데 도움이 될 수 있습니다. 당신이 원하는

필요한 처리 시간을 단축하려면 디스크 내용의 복사본을 메모리에 저장하세요.

아무것도 할 필요가 없습니다. 이는 기본적으로 발생합니다.

직접 시도해 보세요:

dd if=/dev/urandom bs=1M count=1M of=test.bin # create a file of 10 GB random data
echo 3 | sudo tee /proc/sys/vm/drop_caches # drop caches
dd if=test.bin bs=1G count=1 of=/dev/null # read 1 GB of data
dd if=test.bin bs=1G count=1 of=/dev/null # read again

처음 읽을 때 시간이 좀 걸립니다.

1073741824 bytes (1.1 GB, 1.0 GiB) copied, 10,43 s, 103 MB/s

처음 읽은 후에도 데이터는 메모리에 남아 있습니다. 후속 읽기는 훨씬 빠릅니다.

1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.320478 s, 3.4 GB/s

사용 가능한 메모리가 충분하다면 Linux는 최근 읽은 파일의 내용을 메모리에 유지하여 사용자의 노력을 기꺼이 지원합니다.

관련 정보