다수의 작은 파일을 읽고 쓰기 위한 클러스터 파일 시스템 선택

다수의 작은 파일을 읽고 쓰기 위한 클러스터 파일 시스템 선택

저는 연구실을 위해 소규모 Linux 클러스터를 설정하고 있습니다. 현재 작업 제출을 위한 로그인 노드와 3개의 계산 노드가 있으며 이들은 기가비트 LAN(슬프게도 인피니밴드 없음)으로 연결되어 있습니다.

처음에는 단순히 NFS를 사용하여 클러스터 사용자를 위한 공유 저장소(홈 폴더)를 내보냈습니다. 그러나 우리는 NFS가 실제 페이로드에서는 제대로 작동하지 않는다는 사실을 곧 알게 되었습니다.

내 클러스터 사용자가 공유 저장소에서 GB 단위의 작은 그림 파일(1개는 100KB 미만)을 읽고 쓰는 것이 매우 일반적인 것으로 나타났습니다. NFS는 작은 파일 IO에 대해 성능이 매우 나쁩니다.

작은 파일 쓰기에 대한 NFS/CIFS/SSHFS 성능에 대한 간단한 테스트가 있습니다. 각 파일 시스템에서 20000개의 작은 파일(총 약 600MB)을 압축 해제하는 데 걸리는 시간은 다음과 같습니다.

  • CIFS: 25~30대
  • SSHFS: 45~55초
  • NFS(v3/v4): 너무 느려서 기다리지 않았어요 (예상 10분)

CIFS/SSHFS는 NFS에 비해 성능이 매우 뛰어납니다. 그러나 컴퓨터 클러스터 시나리오에서 Linux 홈 폴더에 CIFS/SSHFS를 사용하는 것은 일반적인 관행이 아닙니다. 그리고 CIFS는 실제로 posix 호환 파일 시스템 AFAIK가 아닙니다.

작은 파일 페이로드를 위한 네트워크 파일 시스템 선택에 대해 어떻게 생각하시나요? NFS를 다른 클러스터/분산 파일 시스템으로 교체해야 합니까? 아니면 작은 파일에 대해 NFS를 최적화하는 방법이 있습니까?

답변1

충분히 큰 설정이 있었다면 IBM Spectrum Scale(이전 GPFS)을 권장했을 것입니다. 하지만 작업 규모를 고려할 때 약간 변형하여 ZFS를 사용하는 것이 좋습니다. atime을 off로 설정하세요. 파일에 대한 액세스 시간 기록에 별로 관심이 없다면 ZFS는 해당 시나리오에서 꽤 잘 작동할 것입니다.

관련 정보