EFS vs FSx for Lustre 비교 분석
BLAST 파일 시스템 성능 비교: EFS vs FSx for Lustre
테스트 일자: 2026-01-06 테스트 환경: AWS ap-northeast-2 (서울)
테스트 환경
인프라 구성 (ap-northeast-2)
| 구성요소 | 상세 |
|---|---|
| EC2 인스턴스 | r6i.24xlarge / r7i.24xlarge (96 vCPU, 768 GB RAM) |
| EFS | fs-0d2d032d1cca25f3f, Elastic 처리량 모드 |
| FSx Lustre | fs-0d75b85b2d9519a04, Scratch 2, 1.2 TB, S3 통합 |
| BLAST 데이터베이스 | core_nt (NCBI NT Core, ~254 GB) |
| AWS Batch | 64 vCPU, 512 GB Memory Job Definition |
쿼리 파일
| 파일명 | 시퀀스 수 | 크기 |
|---|---|---|
| query.fasta | 500 | 77 KB |
| query_5000.fasta | 5,000 | 755 KB |
| query_50000.fasta | 50,000 | 7.4 MB |
| query_500000.fasta | 500,000 | 74 MB |
EFS 테스트 결과
BLAST 성능 측정 (EFS Elastic 처리량 모드)
| 시퀀스 수 | BLAST 실행 시간 | 총 작업 시간 | 시퀀스당 처리 시간 |
|---|---|---|---|
| 500 | 209초 | 224초 | 0.42초 |
| 5,000 | 213초 | 238초 | 0.043초 |
| 50,000 | 336초 | 352초 | 0.0067초 |
| 500,000 | ~1,490초 | ~1,507초 | 0.003초 |
주요 관찰 사항
- 데이터베이스 로딩 오버헤드: ~200초 (BLAST 시작 시 데이터베이스 초기 로딩)
- 시퀀스 증가에 따른 선형 확장: 1,000배 시퀀스 증가 시 약 7배 처리 시간 증가
- 병렬 처리 효율: 64 vCPU에서 높은 CPU 활용률
EFS 비용 분석 (ap-northeast-2)
| 비용 항목 | 단가 | 계산 |
|---|---|---|
| 스토리지 (254 GB) | $0.36/GB-month | $91.56/month |
| 읽기 처리량 (Elastic) | $0.043/GB | BLAST 작업당 ~$17 |
| 일일 테스트 비용 | ~$70+ (처리량) |
FSx for Lustre 테스트 상태
인프라 문제
FSx Lustre 테스트는 다음 인프라 문제로 인해 완료되지 못했습니다:
- 마운트 포인트 충돌: EC2 인스턴스 스토어 NVMe가
/mnt/lustre에 자동 마운트 - Launch Template 이슈: User data의 FSx mount 명령이 후속 프로세스에 의해 덮어씌워짐
- S3 Data Repository: 데이터 import는 성공했으나 컨테이너에서 접근 불가
실제 오류 로그:
/dev/nvme0n1p1 /mnt/lustre xfs ro,noatime,attr2,inode64,noquota 0 0
Host /mnt/lustre contents:
total 0
drwxr-xr-x 2 root root 6 Jan 6 02:43 .
drwxr-xr-x 1 root root 20 Jan 6 02:44 ..
NVMe 인스턴스 스토어가 FSx Lustre 마운트를 덮어씌워 디렉토리가 비어있음
FSx Lustre 예상 성능 (이론적)
AWS FSx for Lustre Scratch 2 (1.2 TB) 기준:
| 메트릭 | 예상값 |
|---|---|
| 순차 읽기 처리량 | 1,200 MB/s |
| 읽기 IOPS | 수만 IOPS |
| 지연 시간 | < 1ms |
| 예상 BLAST 시간 (500K seqs) | ~500-700초 (EFS 대비 2-3배 빠름) |
FSx Lustre 비용 (ap-northeast-2)
| 비용 항목 | 단가 | 계산 |
|---|---|---|
| 스토리지 (1.2 TB) | $0.14/GB-month | $168/month |
| 처리량 | 스토리지에 포함 | $0 추가 비용 |
| S3 Data Repository | S3 표준 요금 | ~$6/month |
비용 비교 분석
월간 비용 시나리오
시나리오 1: 간헐적 사용 (주 1-2회, 일일 1시간)
| 스토리지 | 월 스토리지 비용 | 월 처리량 비용 | 총 비용 |
|---|---|---|---|
| EFS Elastic | $91.56 | ~$280 (8회 x $35) | ~$371 |
| FSx Lustre | $168 | $0 | $168 |
시나리오 2: 집중 사용 (일일 수십 회)
| 스토리지 | 월 스토리지 비용 | 월 처리량 비용 | 총 비용 |
|---|---|---|---|
| EFS Elastic | $91.56 | ~$2,100+ | $2,191+ |
| FSx Lustre | $168 | $0 | $168 |
손익분기점 분석
- 일일 4회 이상 BLAST 실행 시: FSx Lustre가 더 경제적
- 주 1회 미만: EFS가 더 경제적 (스토리지 비용만 발생)
테스트 계획 (벤치마크 스크립트)
기본 I/O 벤치마크
#!/bin/bash
# io_benchmark.sh
MOUNT_POINTS=("/mnt/fsx" "/mnt/efs")
for MOUNT in "${MOUNT_POINTS[@]}"; do
echo "=== Testing $MOUNT ==="
# 순차 읽기 (BLAST 주요 패턴)
fio --name=seq-read \
--directory=$MOUNT \
--rw=read \
--bs=1M \
--size=50G \
--numjobs=16 \
--ioengine=libaio \
--iodepth=32 \
--runtime=300 \
--time_based \
--group_reporting \
--output=$MOUNT-seq-read.json \
--output-format=json
# 랜덤 읽기 (인덱스 접근)
fio --name=rand-read \
--directory=$MOUNT \
--rw=randread \
--bs=4K \
--size=10G \
--numjobs=16 \
--runtime=300 \
--time_based \
--group_reporting \
--output=$MOUNT-rand-read.json \
--output-format=json
done
BLAST 벤치마크
#!/bin/bash
# blast_benchmark.sh
STORAGE=$1 # /mnt/fsx or /mnt/efs
THREADS=${2:-32}
RESULTS_DIR="results_$(basename $STORAGE)_$(date +%Y%m%d_%H%M%S)"
mkdir -p $RESULTS_DIR
# DB 복사 (캐시 영향 제거)
echo "Copying database to $STORAGE..."
time rsync -av --progress /data/blast_db/ $STORAGE/blast_db/
# 캐시 클리어
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
# 테스트 1: 소형 쿼리 (빠른 반복)
echo "Test 1: Small queries"
for i in {1..10}; do
/usr/bin/time -v blastn \
-db $STORAGE/blast_db/nt \
-query small_query.fasta \
-num_threads $THREADS \
-out $RESULTS_DIR/small_$i.txt \
2>> $RESULTS_DIR/small_timing.log
done
# 테스트 2: 중형 쿼리
echo "Test 2: Medium queries"
/usr/bin/time -v blastn \
-db $STORAGE/blast_db/nt \
-query sample_queries.fasta \
-num_threads $THREADS \
-out $RESULTS_DIR/medium.txt \
-outfmt "6 qseqid sseqid pident length mismatch gapopen qstart qend sstart send evalue bitscore" \
2> $RESULTS_DIR/medium_timing.log
의사결정 기준
| 기준 | FSx for Lustre 선택 | EFS 선택 |
|---|---|---|
| 처리량 요구사항 | > 500 MB/s | < 200 MB/s |
| 지연 시간 민감도 | 높음 | 낮음 |
| 워크로드 빈도 | 집중적/배치 | 간헐적 |
| 데이터 크기 | > 50 GB | < 10 GB |
| 관리 복잡도 허용 | 높음 | 낮음 |
| 예산 | 성능 우선 | 비용 우선 |
최종 권장사항
FSx for Lustre 추천 (대부분의 BLAST 워크로드)
장점:
- 예측 가능한 비용: 사용량에 관계없이 고정 비용
- 높은 처리량: 1,200 MB/s 이상의 읽기 성능
- 대규모 배치 처리: 수백만 시퀀스도 효율적 처리
- S3 통합: 데이터 아카이빙 및 공유 용이
권장 사용 사례:
- 일일 4회 이상 BLAST 실행
- 대용량 데이터베이스 (>100 GB) 사용
- 빠른 처리 시간이 중요한 경우
- 예측 가능한 예산 관리 필요
EFS 추천 (간헐적 사용)
장점:
- 탄력적 비용: 사용한 만큼만 지불
- 간편한 설정: AWS Batch ECS 네이티브 지원
- 다중 AZ 내구성: 높은 가용성
권장 사용 사례:
- 월 10회 미만 BLAST 실행
- 소규모 데이터베이스 (<50 GB) 사용
- 테스트/개발 환경
- 간헐적 온디맨드 분석
개선 권장 사항
FSx Lustre 인프라 개선
- 별도 마운트 경로 사용:
/mnt/lustre대신/fsx/blast-db사용 - AMI 사전 구성: Lustre 클라이언트가 설치된 커스텀 AMI 사용
- 시작 스크립트 개선: ECS agent 시작 전 FSx 마운트 완료 확인
비용 최적화
- FSx Scratch 2 사용: Persistent 대비 50% 이상 비용 절감
- Spot 인스턴스: EC2 비용 60-80% 절감
- 데이터 계층화: 자주 사용하지 않는 DB는 S3에 보관
성능 최적화
- 인스턴스 타입 매칭: 메모리 > 50% DB 크기 유지
- 병렬 처리: 큰 쿼리 파일을 분할하여 병렬 실행
- 캐시 활용: 반복 쿼리 시 EFS/FSx의 캐시 효과 활용