2010-02-17 3 views
17

나는 파일 시스템을 아주 많이 치는 프로그램을 가지고 있으며, 작업 파일 세트를 읽고 쓰고있다. 파일 크기는 수 기가 바이트이지만 RAM 디스크에 맞지 않을 정도로 크지는 않습니다. 이 프로그램이 실행되는 머신은 대개 우분투 리눅스 박스입니다.연속 기입 RAM 디스크 또는 대용량 파일 시스템 캐싱?

파일 관리자가 매우 큰 캐시를 가지도록 설정하는 방법이 있습니까? 나중에 디스크에 기록 할 수 있도록 쓰기 캐시를 설정하는 방법이 있습니까?

또는 실제 디스크에 쓰는 RAM 디스크를 만드는 방법이 있습니까?

+1

수퍼 유저에게이 질문을하는 것이 좋습니다. – extraneon

+0

간단하게 유지하십시오 :/dev/shm에서 작업하고 수시로 영구 저장 장치에 복사본을 만드십시오. –

답변

22

기본적으로 Linux는 사용 가능한 RAM (거의 모든 디스크)을 사용하여 디스크 액세스를 캐시하고 쓰기 작업을 지연시킵니다. 커널이 캐싱 전략을 결정하는 데 사용하는 경험적 방법은 완벽하지는 않지만 특정 상황에서이를 피하는 것은 쉽지 않습니다. 또한 저널링 파일 시스템 (즉, 모든 기본 파일 시스템)에서 디스크에 대한 실제 쓰기는 충돌이 발생하지 않는 방식으로 수행됩니다. 이것은 약간의 오버 헤드를 의미합니다. 당신은 파일 시스템 옵션을 가지고 시도해 볼 수 있습니다. 예 : ext3의 경우 data=writeback 또는 async으로 마운트를 시도하십시오 (이러한 옵션을 사용하면 파일 시스템 성능이 향상 될 수 있으며 충돌에 대한 복원력이 감소합니다). 또한 파일 시스템 활동을 줄이려면 noatime을 사용하십시오.

프로그래밍 방식으로 메모리 매핑 (mmap)을 통해 디스크 액세스를 수행 할 수도 있습니다. 이것은 조금 손을 벌었지만 데이터 관리 및 최적화에 대한 더 많은 제어를 제공합니다.

+3

관련 파일 시스템을'noatime'으로 마운트하는 것은이 경우에 확실히 좋은 조언입니다. – caf

+0

'vmtouch'는 커널이 (현재처럼) 캐쉬를 유지하도록하고 싶다면 유용합니다. –

16

디스크가 내장 쓰기 캐시를 사용하는지 확인 했습니까? 그것은 상당한 차이를 만들 수 있습니다. 리눅스에서, 당신은 hdparm로 동작을 전환 할 수 있습니다 : 쓰기 캐싱이 활성화 된 경우

/sbin/hdparm -W 0 /dev/hda 0 Disable write caching 
/sbin/hdparm -W 1 /dev/hda 1 Enable write caching 

물론, 다음, 데이터 손실 또는 손상에 대한 가능성이있는 시스템이 uncleanly (예를 들어, 정전)을 종료합니다.

리눅스 커널은 소프트웨어의 관점에서 쓰기 동작을 매개 변수화하기 위해 두 개의 주 번호를 사용합니다.

/proc/sys/vm/dirty_ratio 
/proc/sys/vm/dirty_background_ratio 

최신 기본값은 huge write spikes을 피하기 위해 더 자주 쓰는 것이 좋습니다. 당신은 당신의 요구에 맞게 조정할 수 있습니다. 다음은 사용 가능한 매개 변수의 excellent discussion과 조정 방법입니다.

12

실제 파티션을 사용하여 램 디스크를 만들고 RAID-1을 만들 수 있습니다. --write-mostly 및 --write-behind 옵션을보십시오. 이들을 사용하여 읽기 전용이 아닌 물리 디스크를 작성하고 쓰기 작업의 수를 설정할 수 있습니다.

또는 pdflush에 대한 설명서를 참조하십시오. 여기에 좋은 페이지가 있습니다 : http://www.westnet.com/~gsmith/content/linux-pdflush.htm (또한 ire_and_curses로 링크 됨) 언급 한 것 이외에 스왑을 통해 디스크 캐시를 사용하기 위해 swappiness를 최대 100까지 크랭크하려는 것이 좋습니다.

하지만 어떻게 작동하는지 배우고 특정 앱으로 조정하는 것이 좋습니다. Linux는 일반적인 경우에 맞게 이미 조정되어 있으므로 사용자의 상황이 어떻게 다른지 알 수 있습니다. :)

+3

Dannysauer는'--write-mostly'와'--write-behind' 옵션의'mdadm'을 의미합니다 – mabraham

+0

Linux 소프트웨어 RAID-1은 정상 종료시 write-behind 장치에서 모든 데이터가 복제 될 때까지 기다리지 않습니다. 간단하게 쓰기 비트 맵에서 동기화가 필요한 영역을 표시하고 시스템이 다시 켜지면 데이터 복사를 계속할 계획입니다. 그러나 다시 켜면 기본 RAID 장치가 사라지거나 새로운 RAM 디스크로 교체됩니다. 데이터 손실. –

-4

5 월 RAM 기반 SSD 디스크가 필요합니까?

+0

그는 디스크 IO를 최적화하기 위해 RAM을 사용하려고합니다. 새로운 드라이브가 아닙니다. – alfonx

1

여기의 질문은 실제로 얼마나 내구성이 필요한가요?

일반적으로 Linux는 파일을 잠시 캐시 한 것처럼 행복하게 사용하고 변경 사항을 다시 작성합니다. 이것은 일반적으로 원하는 것이므로 충돌이 발생할 경우 데이터를 너무 많이 잃지는 않을 것입니다.

물론 애플리케이션은 fdatasync() 및 fsync()를 사용하여 강제로 다시 쓰기를 수행 할 수 있습니다.

더 나은 성능을 얻으려면 fdatasync를 덜 자주 호출 할 수 있습니다 (예 : 내구성 저하).

관련 문제