/dev/shm이 /tmp보다 빠르나요?

/dev/shm이 /tmp보다 빠르나요?

이 질문/dev/shm또는 를 사용할지 여부를 쿼리합니다 /tmp. 제공된 답변 내에서 디스크 대신 RAM에 기록하는 것 /dev/shm보다 더 빠르다는 일반적인 인상이 나타납니다. /tmp이 주제에 관해 웹을 검색하면 이러한 인상이 막연하게 확인됩니다. 안타깝게도 측정 등을 통해 어느 것이 더 성능이 좋은지 확실히 보여주는 신뢰할 수 있는 소스를 찾을 수 없습니다.

예를 들어 첫 번째 답변의 인용문은 다음과 같습니다.

RAM은 디스크 스토리지보다 훨씬 빠르기 때문에 다음을 수행할 수 있습니다.성능 향상을 위해 /tmp 대신 /dev/shm을 사용하십시오., 프로세스가 I/O 집약적이고 임시 파일을 광범위하게 사용하는 경우.

링크된 기사에는 다음과 같이 명시되어 있습니다.

/dev/shm은 전통적인 공유 메모리 개념의 구현일 뿐입니다. 이는 프로그램 간에 데이터를 전달하는 효율적인 수단입니다. 하나의 프로그램은 다른 프로세스(허용된 경우)가 액세스할 수 있는 메모리 부분을 생성합니다. 이로 인해 Linux에서 작업 속도가 빨라집니다.

/dev/shm이는 이 웹사이트를 인용한 답변을 확인하지도 않으며 와 의 성능을 비교하지도 않습니다 /tmp. 오히려 그것은 무엇인지에 대한 단순한 설명입니다 /dev/shm.

그럼에도 불구하고 하나 있다.논평첫 번째 답변에서 (오늘 현재) 다음과 같이 말했습니다.

/dev/shm을 사용해도 성능이 향상되지 않습니다. /dev/shm은 디스크(스왑)가 지원하는 메모리(tmpfs)입니다. /var/tmp는 디스크(디스크 상의 파일 시스템)가 지원하는 메모리(디스크 캐시)입니다. 실제로 성능은 거의 동일합니다(tmpfs는 약간의 이점이 있지만 중요하지는 않습니다). /tmp는 관리자가 구성한 방법에 따라 tmpfs일 수도 있고 아닐 수도 있습니다. 스크립트에서 /dev/shm을 사용할 이유가 없습니다.

/dev/shm이 의견은 도전받지 않고 다른 답변과 의견은 다르게 제안하므로 더 빠른지 /tmp아닌지에 대한 질문이 남아 있습니다 .

NB: 나는 그 대답이 아마도 "상황에 따라 다르다"일 것이라는 것을 잘 알고 있습니다. 있다여기 SU:SE에 대한 질문이 있습니다/tmp에 사용할 파일 시스템에 대해 또 한있다SO에서 관련 질문이 끝났습니다..

답변1

사용하면 /dev/shmRAM을 직접 쓰지 않습니다. 이것은tmpfs파일 시스템,tmpfs모든 파일을 가상 메모리(RAM 확장 디스크)에 보관합니다.

에서kernel.org:

이를 ramfs(tmpfs를 생성하기 위한 템플릿)와 비교하면 스와핑 및 제한 확인 기능을 얻을 수 있습니다. 또 다른 유사한 것은 RAM 디스크(/dev/ram*)로, 물리적 RAM에 고정된 크기의 하드 디스크를 시뮬레이션하며 그 위에 일반 파일 시스템을 생성해야 합니다. Ramdisk는 교체할 수 없으며 크기를 조정할 수도 없습니다.

tmpfs는 페이지 캐시와 스왑에 완전히 존재하므로 모든 tmpfs 페이지는 /proc/meminfo에서 "Shmem"으로 표시되고 free(1)에서는 "Shared"로 표시됩니다. 이러한 카운터에는 공유 메모리도 포함되어 있습니다(shmem, ipcs(1) 참조). 개수를 얻는 가장 신뢰할 수 있는 방법은 df(1) 및 du(1)을 사용하는 것입니다.

램프RAM 기반 파일 시스템입니다.

Ramfs는 Linux의 디스크 캐싱 메커니즘(페이지 캐시 및 Dentry 캐시)을 동적으로 크기 조정 가능한 RAM 기반 파일 시스템으로 내보내는 매우 간단한 파일 시스템입니다.

따라서 귀하의 질문에 대답하면 둘 다(/dev/shm 및 /tmp) 디스크를 사용하고 있으므로 성능 향상이 없습니다.

다음 예를 통해 RAM에 쓸 때 확인할 수 있습니다.

mkdir /mnt/ram
mount -t ramfs -o size=2g ramfs /mnt/ram
# Create random file of 2GB
dd if=/dev/urandom bs=1024 count=2000000 of=/tmp/testfile conv=notrunc
# Check ram usage
free
cp /tmp/testfile /mnt/ram
# Check ram usage again
free

관련 정보