ramfs와 tmpfs의 성능 차이


23

많은 100kb 단일 파일 (이미지)로 구성된 약 10GB의 데이터에 대해 메모리 저장 시스템을 설정해야합니다. 많은 읽기와 상당히 정기적 인 쓰기가있을 것입니다 (새 파일 추가, 일부 오래된 파일 삭제).
이제 tmpfs 가 예를 들어 df로 여유 공간 / 사용 공간을 확인할 수있는 일반 파일 시스템처럼 작동 한다는 것을 알고 있습니다. 그러나 나는 램프 가 IO 작업 속도와 관련하여 몇 가지 장점을 제공 하는지에 관심 이 있습니다. 나는 램프를 사용할 때 소비되는 메모리의 크기를 제어 할 수없고 여유 RAM을 완전히 소비하면 시스템이 멈출 수 있지만이 시나리오에서는 문제가되지 않는다는 것을 알고 있습니다.

요약하면, 나는 관심이 있습니다 :
-성능 현명한, 어느 쪽이 더 빠릅니다 : ramfs 또는 tmpfs (그리고 아마도)? -tmpfs
는 언제 스왑 공간을 사용합니까? 이미 저장된 데이터를 스왑 (현재 실행중인 다른 프로그램의 RAM을 확보하기 위해)으로 옮기거나 여유 RAM이없는 경우 새 데이터 만 이동합니까?


음, 서버에 얼마나 많은 RAM이 있습니까?
ewwhite

1
서버에는 총 16GB의 RAM이 있습니다. 또한 SSD 스토리지가 없지만 단일 7200 rpm HDD가 있다는 점도 주목할 가치가 있습니다. 그렇기 때문에 일부 유형의 RAM 스토리지 사용을 고려하고 있습니다.
Ivan Kovacevic

답변:


21

내 추천 :

정상적인 조건에서 실제 활동을 측정하고 관찰하십시오.

이러한 파일이 모두 필요한 것은 아니며 캐시에서 항상 제공 될 수 있습니다. 그러나 주어진 순간에 캐시에 무엇이 있는지 알려주 는 vmtouch 라는 멋진 도구 가 있습니다. 또한 특정 디렉토리 나 파일을 캐시에 잠그는 데 사용할 수도 있습니다. 정기적으로 사용한 후에는 어떤 모양인지 확인하십시오. 이 상황에서는 tmpfs 및 ramfs를 사용할 필요가 없습니다.

참조 : http://hoytech.com/vmtouch/

가장 활동적인 파일이 이미 캐시에 상주한다는 사실에 놀랄 것입니다.


tmpfs와 ramfs에 대해서는 성능 차이가 눈에 띄지 않습니다. 작동상의 차이점이 있습니다. 실제 사용 사례는 Oracle이며, RAM이 스왑의 위험없이 RAM에서 데이터를 관리 할 수 ​​있도록 ramfs를 사용했습니다. 메모리 부족으로 tmpfs 데이터를 교체 할 수 있습니다. 설정의 크기 조정 및 수정에는 차이가 있습니다.


1
멋진 작은 유틸리티! +1
Janne Pikkarainen

1
@ewwhite 우수 답변. 몇 년 전 우리의 경우 중 하나에서 우리는 대부분 사용 된 파일이 이미 캐시에 상주한다는 것을 알았습니다. 힌트 : 오늘날 파일 시스템은 제 생각보다 훨씬 지능적입니다.
giannisapi

13

이것을 지나치게 생각하지 마십시오. 시스템에 충분한 RAM을 넣고 커널의 디스크 캐시가 처리하도록하십시오. 이렇게하면 디스크에서 데이터를 계속 유지하면서 메모리에서 직접 읽을 수있는 이점을 얻을 수 있습니다.


1
내 시스템에는 현재 16GB의 RAM이 있습니다. 해당 이미지를 제공하기 위해 Nginx를 실행하는 일반 데비안 설치입니다. 나는 1Gbit 네트워크 연결을 가지고 있으며 항상 100 % 미만으로로드되어 특정 순서없이 이미지를 제공합니다. 이 시나리오에서 커널이 캐시에 10 기가의 이미지를 모두로드 할 것이라고 생각하십니까?
Ivan Kovacevic

3
예. 시스템에 충분한 RAM이 있고 서버의 다른 응용 프로그램이 RAM 리소스와 경쟁하지 않는 경우 해당 파일은 캐시에 남아 있습니다.
EEAA

2
나는 ~ 15 년 동안 유닉스 관리를 해왔 으며 , tmpfs / ramfs가 원시 커널 fs 캐시에 비해 어떤 이점을 제공 수 없는 상황에 처한 적이 없습니다 . 상황이 보증되는 곳에는 존재하지 않지만 아주 드 quite니다. 일반적으로 RAM 캐시가 필요한 경우 목적 빌드 캐싱 레이어 (Redis / Memcache / etc.)를 사용합니다.
EEAA

4
디스크 캐싱은 이미지를 읽어야하는 경우에는 확실히 작동하지만, 임의 / 작은 쓰기 속도를 높이고 임의 I / 영형. 기계가 고장 나거나 정전이 발생하면 tmpfs의 내용은 메모리에있는 곳에서만 사라집니다.
Martijn

1
@Martijn이 맞습니다. tmpfs와 ramfs는 실제로 유용합니다. 예를 들어, git 저장소를 집중적으로 다시 작성 (필터 브랜치)하고 있습니다. 메모리에서 수행하는 것이 SSD에서 수행하는 것보다 빠릅니다. 캐싱은 일반적으로 리눅스가 디스크 작업의 영속성에 대한 보증을 충족시켜야하기 때문에 읽기가 아닌 쓰기에 도움이됩니다.
Paul Draper

7

1) 성능 벤치 마크.

이 페이지를 참조 로 사용하여 tmpfs와 ramfs간에 I / O 비교를 수행 한 결과 성능 측면에서 거의 동일합니다.

# !mount
mount | grep -E "tmp|ram"
tmpfs on /dev/shm type tmpfs (rw)
ramfs on /mnt/ram type ramfs (rw,size=1G)

# dd bs=1M count=1024 if=/dev/zero of=/dev/shm/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.634054 s, 1.7 GB/s

# dd bs=1M count=1024 if=/dev/zero of=/mnt/ram/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.559557 s, 1.9 GB/s

# dd bs=1M count=4096 if=/dev/zero of=/dev/shm/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.5104 s, 1.7 GB/s

# dd bs=1M count=4096 if=/dev/zero of=/mnt/ram/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.36923 s, 1.8 GB/s

2) 이 페이지 에 따르면 tmpfs는 swap을 사용하고 ramfs는 swap을 사용하지 않습니다.


2
당신의 대답은 바른 길에 있습니다. 그러나 성능에 관한 귀하의 결론에 동의하지 않습니다. 귀하의 테스트에 따르면 램프에 찬성하여 0.2GB / s와 0.1GB / s의 차이가있는 것으로 나타났습니다. 유효한 통계 샘플을 제공하기 위해 이것이 더 테스트되어야한다고 생각합니다. 2) 예에 대해서는 알려져 있지만 스왑이 사용되는 정확한 시점에 대한 더 나은 통찰력을 얻을 수 있기를 바랍니다.
Ivan Kovacevic

크기가 다른 파일로이 벤치 마크를 여러 번 수행했다면 차이가 없을 것입니다. 크기를 4 번 올렸을 때 차이가 실제로 넓어지지 않고 좁아 졌다는 것을 알 수 있습니다.
Michael Martinez

1
작은 파일이 많은 경우는 어떻습니까? 예를 들어 백만 개의 100-200kb 파일 작성. 또한 동일한 파일 크기에 대해 0.2GB / s의 차이가 반복적으로 발생합니까? 성능 차이를 분명히 지적합니다. 내 일정에있을 때 아마 이것을 직접 테스트 할 것입니다. 그러나 이것이 내가 여기에 요청한 이유이므로 다른 사람이 이미 해본 적이 있다면 할 일 목록에서 벗어날 수 있습니다.
Ivan Kovacevic

네, 확실하게 알 수있는 유일한 방법은 테스트를하는 것입니다.
Michael Martinez

1

다양한 커널 버퍼를 호스팅하기에 충분한 양의 RAM이 설치되어 있으면 응용 프로그램 스택 및 힙, 일반 파일 시스템 캐시 및 여기에 넣을 모든 파일이 위험 ramfs하지 않을 정도로 느려서는 안됩니다. tmpfs설계 상 물리적 I / O. 물리적 I / O는 의심 할 여지없이 해당 영역에서 성능 저하의 주요 원인입니다.

그러나 RAM 용량이 설치되어 있지 않은 경우 , 후자는 가상 메모리 휴리스틱을 사용하여 디스크 (즉, 스왑 영역)와 RAM에 무엇이 더 나은지를 결정하기 위해 가상 메모리 휴리스틱을 사용하는 ramfs것보다 느릴 tmpfs수 있습니다. 로 tmpfs파일 시스템 데이터가 RAM에 멈춰 있으면 리소스가 낭비 될 수 있습니다.

두 번째 질문에 대답하기 위해, 예 tmpfs. 마지막 "핫"데이터가 아닌 이전 데이터를 먼저 스왑 영역으로 이동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.