Facebook storage benchmark의 blktrace 데이터를 분석하여 최적화된 fio 옵션 파일을 생성하는 도구입니다.
blktrace_analyzer.py: blktrace CSV 데이터 분석 및 기본 fio 옵션 생성advanced_fio_generator.py: 고급 fio 설정 생성기 (다양한 시나리오)sample_blktrace.csv: 예시 blktrace 데이터analysis_results.json: 분석 결과 데이터
- 기본적인 패턴 재현 설정
- blktrace 분석 결과를 직접 반영
- 각 프로세스별로 개별 job 생성
- 원본 패턴을 최대한 정확하게 재현
- 5분 실행, 30초 준비 시간
- 단일 job으로 통합된 패턴
- 최신 io_uring 엔진 사용
- 높은 Queue Depth (원본의 4배까지)
- 다중 스레드 (4개 job)
- 큰 블록 크기 선호
- 10분간 고부하 테스트
- 매우 높은 Queue Depth (64)
- 8개 동시 작업자
- 불규칙한 블록 크기 패턴
- 다양한 시나리오 비교 테스트
- 원본 패턴 + 표준 벤치마크들
- 4KB 랜덤 R/W, 64KB 순차 읽기, 혼합 워크로드
- 320초(5분 20초) 동안 실행
- 1초마다 실시간 결과 출력
- 상세한 로깅과 모니터링
- 실시간 성능 추적에 최적화
# 기본 분석 및 fio 옵션 생성
python3 blktrace_analyzer.py your_blktrace.csv
# 분석 결과도 JSON으로 저장
python3 blktrace_analyzer.py your_blktrace.csv --save-analysis
# 출력 파일명 지정
python3 blktrace_analyzer.py your_blktrace.csv -o custom_name.fio# 분석 완료 후 고급 설정들 생성
python3 advanced_fio_generator.py analysis_results.json# 기본 재현 테스트
fio facebook_basic_replay.fio
# 성능 테스트
fio facebook_performance.fio
# 320초 실시간 모니터링 (1초마다 결과 출력)
fio facebook_realtime_320s.fio
# 실시간 모니터링 + 시스템 모니터링 스크립트 사용
./run_realtime_test.sh facebook_realtime_320s.fio
# 스트레스 테스트 (주의: 높은 부하)
fio facebook_stress_test.fio
# 벤치마크 스위트 (모든 시나리오)
fio facebook_benchmark_suite.fio# 테스트 완료 후 결과 분석
python3 realtime_analyzer.py logs_20250910_143022/ --plots --summary
# 로그 디렉토리는 자동 생성됩니다 (logs_YYYYMMDD_HHMMSS 형식)- Read/Write 비율: 읽기와 쓰기 작업의 비율
- 블록 크기 분석: 최소/최대/평균/중간값 및 일반적인 크기들
- 액세스 패턴: 순차 vs 랜덤 액세스 비율
- Queue Depth: 동시 I/O 요청 수
- 타이밍 패턴: IOPS, 지연시간, I/O 간격
- 프로세스별 분석: 각 프로세스의 I/O 특성
- 목적: 원본 패턴 정확한 재현
- 사용 시점: 성능 회귀 테스트, 패턴 검증
- 특징: 분석된 IOPS로 제한, 원본 블록 크기 분포 유지
- 목적: 최대 성능 달성
- 사용 시점: 성능 한계 측정, 하드웨어 벤치마크
- 특징: io_uring, 높은 QD, 다중 스레드
- 목적: 시스템 안정성 검증
- 사용 시점: 부하 테스트, 내구성 확인
- 특징: 높은 부하, 다양한 패턴 혼합
- 목적: 종합적인 성능 평가
- 사용 시점: 시스템 비교, 성능 프로파일 작성
- 특징: 표준 벤치마크 + 실제 패턴 비교
- ioengine: I/O 엔진 (libaio, io_uring)
- direct: 직접 I/O (캐시 우회)
- iodepth: Queue Depth (동시 I/O 요청 수)
- blocksize: 블록 크기
- rw: I/O 패턴 (randread, randwrite, randrw 등)
- rwmixread: 혼합 워크로드에서 읽기 비율
- iodepth_batch: I/O 배치 제출 크기
- numjobs: 병렬 작업자 수
- thread: 스레드 사용 여부
- rate_iops: IOPS 제한
- norandommap: 랜덤 맵 비활성화 (성능 향상)
- write_bw_log: 대역폭 로그
- write_lat_log: 지연시간 로그
- write_iops_log: IOPS 로그
- log_avg_msec: 로그 평균 간격
- 320초(5분 20초) 동안 지속적인 성능 측정
- 1초 간격으로 실시간 상태 출력
- 상세한 성능 로그 수집 (대역폭, IOPS, 지연시간)
- 시스템 리소스 동시 모니터링
# 간단한 실행
fio facebook_realtime_320s.fio
# 고급 모니터링 (시스템 리소스 포함)
./run_realtime_test.sh
# 특정 설정으로 실행
./run_realtime_test.sh facebook_performance.fioJobs: 1 (f=1): [m(1)][1.2%][r=2456KiB/s,w=1104KiB/s][r=307,w=138 IOPS][eta 05m:15s]
Jobs: 1 (f=1): [m(1)][1.5%][r=2398KiB/s,w=1098KiB/s][r=300,w=137 IOPS][eta 05m:14s]
Jobs: 1 (f=1): [m(1)][1.8%][r=2423KiB/s,w=1089KiB/s][r=303,w=136 IOPS][eta 05m:13s]
realtime_bw.1.log- 1초마다 대역폭 데이터realtime_lat.1.log- 1초마다 지연시간 데이터realtime_iops.1.log- 1초마다 IOPS 데이터system_monitor.csv- 시스템 리소스 사용량system_info.txt- 테스트 환경 정보
테스트 완료 후 realtime_analyzer.py로 상세 분석:
python3 realtime_analyzer.py logs_20250910_143022/ --plots --summary분석 결과:
- 시간별 성능 변화 그래프
- 성능 분포 히스토그램
- 상세 통계 (평균, 95%ile, 99%ile)
- 성능 추이 분석 (초기 vs 후반부)
# Android 기기를 USB 디버깅 모드로 연결
adb devices
# root 권한 활성화
adb root
# 연결 확인
adb shell "id" # uid=0(root) 출력되어야 함Android용 fio 바이너리를 설치해야 합니다:
# Option 1: 미리 컴파일된 바이너리 사용
# https://github.com/axboe/fio/releases 에서 Android ARM64 바이너리 다운로드
# 또는 기기에서 찾기
adb shell "find /system /vendor -name 'fio' 2>/dev/null"
# Option 2: 기기에 업로드
adb push fio_android_arm64 /data/local/tmp/fio
adb shell "chmod 755 /data/local/tmp/fio"# 320초 실시간 모니터링 테스트
./run_android_fio.sh facebook_android_320s.fio
# 성능 최적화 테스트
./run_android_fio.sh facebook_android_performance.fio
# 벤치마크 스위트 (5가지 시나리오)
./run_android_fio.sh facebook_android_suite.fio# 특정 기기 지정 (여러 기기 연결 시)
DEVICE_ID=emulator-5554 ./run_android_fio.sh facebook_android_320s.fio
# 사용자 정의 fio 경로
ANDROID_FIO_PATH=/system/bin/fio ./run_android_fio.sh facebook_android_320s.fio# 테스트 완료 후 생성된 결과 디렉토리로 분석
python3 android_analyzer.py android_results_20250910_143022/
# 성능 비교 포함
python3 android_analyzer.py android_results_20250910_143022/ --compare --report# 기존 실시간 분석기로도 분석 가능
python3 realtime_analyzer.py android_results_20250910_143022/ --plots --summary- 기본 패턴 재현 (Android 최적화)
- 1G 테스트 파일 크기
- /data/local/tmp 경로 사용
- 성능 최적화 테스트
- 멀티 스레드 (2개 job)
- 4KB 블록 크기
- 5가지 테스트 시나리오:
- Facebook 원본 패턴
- 4KB 랜덤 읽기/쓰기
- 순차 읽기 (앱 실행 시뮬레이션)
- 혼합 워크로드 (실제 사용 패턴)
- 플래그십 (2023): 4K 읽기 50,000+ IOPS, 순차 읽기 1,500+ MB/s
- 미드레인지: 4K 읽기 25,000+ IOPS, 순차 읽기 800+ MB/s
- 엔트리급: 4K 읽기 10,000+ IOPS, 순차 읽기 400+ MB/s
- Thermal Throttling: 320초 테스트 중 성능 저하 모니터링
- Storage Type: UFS 3.1/4.0 vs eMMC 성능 차이
- Background Apps: 백그라운드 앱이 성능에 미치는 영향
# SELinux 확인
adb shell "getenforce"
# 필요시 임시로 permissive 모드 (주의: 보안 위험)
adb shell "setenforce 0"# /data 파티션 공간 확인
adb shell "df -h /data"
# 불필요한 파일 정리
adb shell "rm -rf /data/local/tmp/fio_testfile*"- 백그라운드 앱 종료
- 기기 재부팅 후 테스트
- 충전 상태 확인 (배터리 절약 모드 영향)
- 기본 재현 테스트: 원본 패턴과의 일치성 확인
- 표준 벤치마크: 시스템 기본 성능 측정
- 성능 최적화: 최대 성능 한계 확인
- 스트레스 테스트: 안정성 및 내구성 검증
- 스토리지 공간: 일부 테스트는 100GB 이상 필요
- 시스템 부하: 스트레스 테스트는 높은 CPU/메모리 사용
- 데이터 백업: 테스트 전 중요 데이터 백업 권장
- 실제 디바이스: 프로덕션 환경에서는 신중하게 사용
- IOPS: 초당 I/O 작업 수
- Bandwidth: 처리량 (MB/s)
- Latency: 응답 시간 (μs, ms)
- CPU 사용률: 시스템 리소스 효율성
분석 결과 예시:
- 총 I/O: 1,000,000개
- Read/Write 비율: 70%/30%
- 평균 블록 크기: 8KB
- 평균 Queue Depth: 4
- 예상 IOPS: 50,000
- 액세스 패턴: 랜덤 60%, 순차 40%
이 정보를 바탕으로 최적화된 fio 설정이 자동 생성됩니다.