AFAIK, Linux에는 성능을 향상시키기 위한 페이지 캐시가 있습니다(예: 파일을 열면 Linux는 파일을 RAM에 캐시합니다). 따라서 파일이 다시 요청되고 파일이 캐시되면 OS는 디스크 파일에서 해당 파일을 읽지 않습니다. 그리고 캐시에서...
내 질문은: 파일이 있는 경우임시 파일 시스템파일과 상호 작용(읽기)하면 RAM에서 중복됩니까(하나는 tmpfs에 하나는 페이지 캐시에 있습니까?)
답변1
tmpfs는 Linux 페이지 캐시를 사용합니까?
tmpfs와 페이지 캐시는 동전의 양면입니다.
에서 언급했듯이https://www.kernel.org/doc/Documentation/filesystems/tmpfs.txt(강조는 내 것)
tmpfs는 모든 것을 커널 내부 캐시에 넣습니다.원하지 않는 페이지를 교체 공간으로 교체하는 기능을 통해 포함된 파일을 수용할 수 있도록 확장 및 축소됩니다.
[...]
~부터tmpfs는 페이지 캐시에 완전히 존재합니다.스왑 시 모든 tmpfs 페이지는 /proc/meminfo에 "Shmem"으로 표시되고 free(1)에 "Shared"로 표시됩니다.
따라서 이 캐시가 복사되는 것은 매우 예상치 못한 일입니다. 이미 캐시에 있으며 tmpfs는 캐싱 시스템의 프런트 엔드일 뿐입니다.
내 질문은: tmpfs에 파일이 있고 해당 파일과 상호 작용(읽기)하는 경우 파일이 RAM에 복제됩니까(하나는 tmpfs에 있고 다른 하나는 페이지 캐시에 있습니까?)
이는 실험적으로 결정될 수 있습니다.
# sync
# echo 3 > /proc/sys/vm/drop_caches
# free -m
total used free shared buff/cache available
Mem: 15940 2005 13331 264 603 13390
Swap: 0 0 0
그래서 저는 약 13000개의 여유 메모리를 갖고 있고, 메모리를 많이 변경하는 실행 중인 프로세스도 없고 스왑도 없습니다. tmpfs에서 ~6000을 태워봅시다:
# mount -t tmpfs -o size=6000M none /mnt/tmp
# dd if=/dev/urandom of=/mnt/tmp/big.file
dd: writing to '/mnt/tmp/big.file': No space left on device
6291456000 bytes (6.3 GB, 5.9 GiB) copied
따라서 tmpfs는 임의의 데이터로 채워집니다. 지금은 무엇이 무료인가요?
# free -m
total used free shared buff/cache available
Mem: 15940 1958 7347 6269 6633 7429
Swap: 0 0 0
그래서 free
13331에서 7347까지, shared
둘 다 buff/cache
6000씩 올랐습니다. 웃긴데 여전히 1로만 계산되는군요. 그래서 공유라고 부르는 것 같아요 -.-'
의도적으로 파일을 읽으십시오.
# cat /mnt/tmp/big.file > /dev/null
# free -m
total used free shared buff/cache available
Mem: 15940 2055 7237 6269 6647 7332
Swap: 0 0 0
개수는 증가하지 않았습니다(어쨌든 6000개 정도는 아님).
의도적으로 다른 내용을 읽으십시오.
# cat /some/other/file > /dev/null
# free -m
total used free shared buff/cache available
Mem: 15940 2011 157 6303 13771 7334
Swap: 0 0 0
...이제 free
157까지 내려가면 캐시가 거의 가득 찼습니다.
요약하자면 tmpfs 자체는 이미 페이지 캐싱을 나타냅니다. 페이지 캐시는 더 이상 파일을 읽을 때 tmpfs의 파일을 복사하지 않습니다.