it-swarm-ko.tech

수백만 개의 작은 파일을위한 파일 시스템

다음 시나리오에서 best speed로 선택할 Linux 파일 시스템 :

  • 1 억 개의 파일
  • 평균 ~ 2k 파일 크기
  • > 95 % 읽기 권한
  • 꽤 임의 접근
  • 높은 동시성 (> 100 프로세스)

참고 : 파일은 큰 디렉토리를 피하기 위해 깊은 계층 구조 트리에 저장됩니다. 각 리프 디렉토리에는 약 1,000 개의 파일이 있습니다.

어떻게 벤치마킹하겠습니까?

44
bene

다음은 모든 주요 Linux FS를 비교 한 결과 를 시작 지점으로 사용할 수있는 보니 ++와 비교 한 것입니다.

무작위 탐색 측면에서 Reiser가 이기고 EXT4가 이어 JFS가 이깁니다. 이것이 디렉토리 조회와 정확히 상관되는지 확실하지 않지만 지표가 될 것 같습니다. 구체적으로 자신의 테스트를 수행해야합니다. EXT2는 저널이 없기 때문에 파일 작성 시간 동안 모든 것을 뛰어 넘지 만, EXT4는 hans reiser의 현재 상태로 인해 사용하고 싶지 않은 Reiser를 제외한 모든 것을 이깁니다.

NCQ를 지원하는 드라이브를 살펴보고이를 사용하도록 설치가 설정되어 있는지 확인하십시오. 많은 노력을 기울이면 속도가 향상됩니다.

마지막으로, 머신에 엄청난 양의 램이 있는지 확인하십시오. 파일이 자주 업데이트되지 않기 때문에, 리눅스는 여유 공간이 있으면 대부분의 파일을 캐싱하게됩니다. 사용 패턴이 올바른 경우 속도가 크게 향상됩니다.

20
Andrew Cholakian

Reiser4 또는 더 오래된 (그러나 더 잘 지원되는) ReiserFS 를 권장한다는 점을 제외하고 Andrew가 말한 대부분의 내용에 동의합니다. 이러한 테스트 (및 ReiserFS 문서)에서 알 수 있듯이이 테스트는 요청한 상황 (작은 수의 작은 파일 또는 디렉토리)을 위해 설계되었습니다. 나는 과거에 Gentoo와 Ubuntu에서 아무런 문제없이 ReiserFS를 사용했습니다.

Hans Reiser의 상태에 관해서는 파일 시스템 자체의 코드 또는 안정성에 문제가 있다고 생각하지 않습니다. Reiser4는 DARPA와 Linspire가 후원하기 때문에 Reiser File System의 추가 개발이 결정되지 않는다는 데 동의하지만 다른 사람이 사용해야하는지 여부를 결정하는 요소는 아닙니다.

8
Mike

나는 이것이 귀하의 질문에 대한 직접적인 대답이 아니라는 것을 알고 있지만,이 경우 데이터베이스가 이것을 호스팅하는 데 더 적합 할 것이라고 생각합니다. 작은 파일은 데이터베이스 테이블에 이진 형식으로 저장되어 wil에서 검색 될 수 있습니다. 이 파일을 사용하는 소프트웨어는 이것을 지원할 수 있어야합니다 ...

4
Jeroen Landheer

Unix StackExchange의 누군가가이 시나리오 만 테스트하기 위해 벤치 마크 (소스 포함)를 만들었습니다.

Q : 많은 작은 파일 (SSD가 아닌 HDD)을 저장하기위한 가장 고성능 Linux 파일 시스템은 무엇입니까?

최고의 읽기 성능은 ReiserFS에서 비롯된 것 같습니다.

3
thenickdude

내 경험상 ext2는 작은 파일을 위해 ext4를 물 밖으로 날려 버립니다. 쓰기 무결성에 신경 쓰지 않으면 좋습니다. 예를 들어, Subversion은 ext4 및 기타 파일 시스템 (XFS)이 질식하는 수많은 작은 파일을 많이 생성합니다 (30 분마다 ext2에서 데이터를 ext4로 재 동기화하는 크론 작업을 실행하여 사실상 문제를 해결합니다).

이러한 명령을 실행하면 ext2가 더 빨라집니다 (이 옵션의 대부분은 충돌 전에 동기화를 실행하지 않으면 충돌 후 파일 시스템을 불안정하게 만듭니다). 이 명령은 작은 파일을 가진 ext4에는 거의 영향을 미치지 않습니다.

echo 15 > /proc/sys/vm/swappiness
echo 10 > /proc/sys/vm/vfs_cache_pressure
echo 99 > /proc/sys/vm/dirty_ratio
echo 50 > /proc/sys/vm/dirty_background_ratio
echo 360000 > /proc/sys/vm/dirty_expire_centisecs
echo 360000 > /proc/sys/vm/dirty_writeback_centisecs
echo "2000" > /proc/sys/vm/vfs_cache_pressure
3
Jason Hall

Ext3 (또는 ext4), 아마도 JFS가 좋은 해결책 일 것입니다. 나는 ext4와 btrfs에주의를 기울였습니다 (파일 시스템은 까다 롭습니다-최신의 최신 것을 사용하려면 백업으로 준비하십시오).

Mkfs 시간 동안 원하는대로 파일 시스템을 조정하기 위해 조정할 수있는 다양한 매개 변수가 있습니다.

확실히 against XFS를 권장합니다. 파일 시스템이 좋지 않기 때문에 생성/삭제가 비용이 많이 드는 작업입니다.


디렉토리 검색과 관련된 문제를 피하려면 다음과 같은 지능형 이름 지정 체계를 사용하십시오.

<first letter of id>_<last letter of id>/<id>

또는 유사하고 더 복잡한 체계. 이렇게하면 디렉토리 검색 속도가 빨라져 전체 액세스 속도가 빨라집니다. (V7에서 돌아온 오래된 유닉스 트릭입니다.)

1
p_l

대부분의 FS 디렉토리에 65K가 넘는 파일로 질식 할 것입니다. 다른 것은 확실하지 않지만 ReiserFS의 사용 시나리오 중 하나입니다.

1
Ronald Pottol