Skip to main content

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초

주요 관찰 사항

  1. 데이터베이스 로딩 오버헤드: ~200초 (BLAST 시작 시 데이터베이스 초기 로딩)
  2. 시퀀스 증가에 따른 선형 확장: 1,000배 시퀀스 증가 시 약 7배 처리 시간 증가
  3. 병렬 처리 효율: 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 테스트는 다음 인프라 문제로 인해 완료되지 못했습니다:

  1. 마운트 포인트 충돌: EC2 인스턴스 스토어 NVMe가 /mnt/lustre에 자동 마운트
  2. Launch Template 이슈: User data의 FSx mount 명령이 후속 프로세스에 의해 덮어씌워짐
  3. 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. 예측 가능한 비용: 사용량에 관계없이 고정 비용
  2. 높은 처리량: 1,200 MB/s 이상의 읽기 성능
  3. 대규모 배치 처리: 수백만 시퀀스도 효율적 처리
  4. S3 통합: 데이터 아카이빙 및 공유 용이

권장 사용 사례:

  • 일일 4회 이상 BLAST 실행
  • 대용량 데이터베이스 (>100 GB) 사용
  • 빠른 처리 시간이 중요한 경우
  • 예측 가능한 예산 관리 필요

EFS 추천 (간헐적 사용)

장점:

  1. 탄력적 비용: 사용한 만큼만 지불
  2. 간편한 설정: AWS Batch ECS 네이티브 지원
  3. 다중 AZ 내구성: 높은 가용성

권장 사용 사례:

  • 월 10회 미만 BLAST 실행
  • 소규모 데이터베이스 (<50 GB) 사용
  • 테스트/개발 환경
  • 간헐적 온디맨드 분석

개선 권장 사항

FSx Lustre 인프라 개선

  1. 별도 마운트 경로 사용: /mnt/lustre 대신 /fsx/blast-db 사용
  2. AMI 사전 구성: Lustre 클라이언트가 설치된 커스텀 AMI 사용
  3. 시작 스크립트 개선: ECS agent 시작 전 FSx 마운트 완료 확인

비용 최적화

  1. FSx Scratch 2 사용: Persistent 대비 50% 이상 비용 절감
  2. Spot 인스턴스: EC2 비용 60-80% 절감
  3. 데이터 계층화: 자주 사용하지 않는 DB는 S3에 보관

성능 최적화

  1. 인스턴스 타입 매칭: 메모리 > 50% DB 크기 유지
  2. 병렬 처리: 큰 쿼리 파일을 분할하여 병렬 실행
  3. 캐시 활용: 반복 쿼리 시 EFS/FSx의 캐시 효과 활용