저는 연구실에 소규모 Linux 클러스터를 설정하고 있습니다. 현재 작업 제출을 위한 로그인 노드와 기가비트 LAN을 통해 연결된 3개의 컴퓨팅 노드가 있습니다(아쉽게도 무제한 대역폭은 없음).
처음에는 단순히 NFS를 사용하여 클러스터 사용자를 위한 공유 저장소(홈 폴더)를 내보냈습니다. 그러나 우리는 NFS가 실제 부하에서 제대로 작동하지 않는다는 것을 곧 발견했습니다.
내 클러스터의 사용자가 공유 저장소에서 작은 GB 이미지 파일(100KB 미만)을 읽고 쓰는 것이 일반적인 것으로 나타났습니다. NFS는 작은 파일 IO에 대한 성능이 매우 낮습니다.
작은 파일 쓰기에 대한 NFS/CIFS/SSHFS 성능에 대한 간단한 테스트를 수행했습니다. 각 파일 시스템에서 20,000개의 작은 파일(총 ~600MB)의 압축을 푸는 데 걸리는 시간은 다음과 같습니다.
- CIFS:25~30초
- SSHFS:45~55초
- NFS(v3/v4): 너무 느려요. 기다리지 않았어요. (약 10분 정도)
CIFS/SSHFS의 성능은 NFS에 비해 매우 좋습니다. 그러나 컴퓨터 클러스터 시나리오에서 Linux 홈 폴더에 CIFS/SSHFS를 사용하는 것은 일반적인 관행이 아닙니다. 그리고 CIFS는 실제로 posix 호환 파일 시스템이 아닙니다.
작은 파일 로드를 위한 네트워크 파일 시스템 선택에 대해 어떻게 생각하십니까? NFS를 다른 클러스터/분산 파일 시스템으로 교체해야 합니까? 아니면 작은 파일에 대해 NFS를 최적화하는 방법이 있습니까?
답변1
충분히 큰 설정이 있는 경우 IBM Spectrum Scale(이전 GPFS)을 권장하지만 작업 규모를 고려하면 몇 가지 조정을 통해 ZFS를 사용하는 것이 좋습니다. atime을 off로 설정합니다. 파일 액세스 시간 기록에 별로 관심이 없다면 ZFS는 해당 시나리오에서 잘 작동할 것입니다.