tmpfs(/dev/shm)는 Linux 페이지 캐시를 사용합니까? 그렇다면, 그래서 무엇입니까?

tmpfs(/dev/shm)는 Linux 페이지 캐시를 사용합니까? 그렇다면, 그래서 무엇입니까?

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

그래서 free13331에서 7347까지, shared둘 다 buff/cache6000씩 올랐습니다. 웃긴데 여전히 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

...이제 free157까지 내려가면 캐시가 거의 가득 찼습니다.

요약하자면 tmpfs 자체는 이미 페이지 캐싱을 나타냅니다. 페이지 캐시는 더 이상 파일을 읽을 때 tmpfs의 파일을 복사하지 않습니다.

관련 정보