Skip to content

kakaromo/blktraceanalysis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Facebook Storage Benchmark - FIO Pattern Analysis & Replay

Facebook storage benchmark의 blktrace 데이터를 분석하여 최적화된 fio 옵션 파일을 생성하는 도구입니다.

파일 구조

  • blktrace_analyzer.py: blktrace CSV 데이터 분석 및 기본 fio 옵션 생성
  • advanced_fio_generator.py: 고급 fio 설정 생성기 (다양한 시나리오)
  • sample_blktrace.csv: 예시 blktrace 데이터
  • analysis_results.json: 분석 결과 데이터

생성된 FIO 설정 파일들

1. facebook_benchmark.fio (기본)

  • 기본적인 패턴 재현 설정
  • blktrace 분석 결과를 직접 반영
  • 각 프로세스별로 개별 job 생성

2. facebook_basic_replay.fio (정확한 재현)

  • 원본 패턴을 최대한 정확하게 재현
  • 5분 실행, 30초 준비 시간
  • 단일 job으로 통합된 패턴

3. facebook_performance.fio (성능 최적화)

  • 최신 io_uring 엔진 사용
  • 높은 Queue Depth (원본의 4배까지)
  • 다중 스레드 (4개 job)
  • 큰 블록 크기 선호

4. facebook_stress_test.fio (스트레스 테스트)

  • 10분간 고부하 테스트
  • 매우 높은 Queue Depth (64)
  • 8개 동시 작업자
  • 불규칙한 블록 크기 패턴

5. facebook_benchmark_suite.fio (벤치마크 스위트)

  • 다양한 시나리오 비교 테스트
  • 원본 패턴 + 표준 벤치마크들
  • 4KB 랜덤 R/W, 64KB 순차 읽기, 혼합 워크로드

6. facebook_realtime_320s.fio (실시간 모니터링)

  • 320초(5분 20초) 동안 실행
  • 1초마다 실시간 결과 출력
  • 상세한 로깅과 모니터링
  • 실시간 성능 추적에 최적화

사용 방법

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

2. 고급 설정 생성

# 분석 완료 후 고급 설정들 생성
python3 advanced_fio_generator.py analysis_results.json

3. FIO 실행

# 기본 재현 테스트
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

4. 실시간 결과 분석

# 테스트 완료 후 결과 분석
python3 realtime_analyzer.py logs_20250910_143022/ --plots --summary

# 로그 디렉토리는 자동 생성됩니다 (logs_YYYYMMDD_HHMMSS 형식)

주요 분석 항목

I/O 패턴 분석

  • Read/Write 비율: 읽기와 쓰기 작업의 비율
  • 블록 크기 분석: 최소/최대/평균/중간값 및 일반적인 크기들
  • 액세스 패턴: 순차 vs 랜덤 액세스 비율
  • Queue Depth: 동시 I/O 요청 수
  • 타이밍 패턴: IOPS, 지연시간, I/O 간격
  • 프로세스별 분석: 각 프로세스의 I/O 특성

최적화 전략

1. 기본 재현 (facebook_basic_replay.fio)

  • 목적: 원본 패턴 정확한 재현
  • 사용 시점: 성능 회귀 테스트, 패턴 검증
  • 특징: 분석된 IOPS로 제한, 원본 블록 크기 분포 유지

2. 성능 최적화 (facebook_performance.fio)

  • 목적: 최대 성능 달성
  • 사용 시점: 성능 한계 측정, 하드웨어 벤치마크
  • 특징: io_uring, 높은 QD, 다중 스레드

3. 스트레스 테스트 (facebook_stress_test.fio)

  • 목적: 시스템 안정성 검증
  • 사용 시점: 부하 테스트, 내구성 확인
  • 특징: 높은 부하, 다양한 패턴 혼합

4. 벤치마크 스위트 (facebook_benchmark_suite.fio)

  • 목적: 종합적인 성능 평가
  • 사용 시점: 시스템 비교, 성능 프로파일 작성
  • 특징: 표준 벤치마크 + 실제 패턴 비교

설정 파라미터 설명

핵심 옵션

  • 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초 실시간 모니터링

기능

  • 320초(5분 20초) 동안 지속적인 성능 측정
  • 1초 간격으로 실시간 상태 출력
  • 상세한 성능 로그 수집 (대역폭, IOPS, 지연시간)
  • 시스템 리소스 동시 모니터링

사용법

# 간단한 실행
fio facebook_realtime_320s.fio

# 고급 모니터링 (시스템 리소스 포함)
./run_realtime_test.sh

# 특정 설정으로 실행
./run_realtime_test.sh facebook_performance.fio

실시간 출력 예시

Jobs: 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 기기에서 FIO 테스트

Android 환경 설정

1. 필수 조건

# Android 기기를 USB 디버깅 모드로 연결
adb devices

# root 권한 활성화
adb root

# 연결 확인
adb shell "id"  # uid=0(root) 출력되어야 함

2. FIO 바이너리 설치

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"

Android 테스트 실행

1. 기본 사용법

# 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

2. 고급 옵션

# 특정 기기 지정 (여러 기기 연결 시)
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

Android 테스트 결과 분석

1. 자동 분석

# 테스트 완료 후 생성된 결과 디렉토리로 분석
python3 android_analyzer.py android_results_20250910_143022/

# 성능 비교 포함
python3 android_analyzer.py android_results_20250910_143022/ --compare --report

2. 실시간 분석 (일반 분석기 사용 가능)

# 기존 실시간 분석기로도 분석 가능
python3 realtime_analyzer.py android_results_20250910_143022/ --plots --summary

Android 전용 설정 파일들

1. facebook_android_320s.fio

  • 기본 패턴 재현 (Android 최적화)
  • 1G 테스트 파일 크기
  • /data/local/tmp 경로 사용

2. facebook_android_performance.fio

  • 성능 최적화 테스트
  • 멀티 스레드 (2개 job)
  • 4KB 블록 크기

3. facebook_android_suite.fio

  • 5가지 테스트 시나리오:
    • Facebook 원본 패턴
    • 4KB 랜덤 읽기/쓰기
    • 순차 읽기 (앱 실행 시뮬레이션)
    • 혼합 워크로드 (실제 사용 패턴)

Android 성능 해석

1. 일반적인 Android 성능 기준

  • 플래그십 (2023): 4K 읽기 50,000+ IOPS, 순차 읽기 1,500+ MB/s
  • 미드레인지: 4K 읽기 25,000+ IOPS, 순차 읽기 800+ MB/s
  • 엔트리급: 4K 읽기 10,000+ IOPS, 순차 읽기 400+ MB/s

2. 주의사항

  • Thermal Throttling: 320초 테스트 중 성능 저하 모니터링
  • Storage Type: UFS 3.1/4.0 vs eMMC 성능 차이
  • Background Apps: 백그라운드 앱이 성능에 미치는 영향

문제 해결

1. 권한 문제

# SELinux 확인
adb shell "getenforce"

# 필요시 임시로 permissive 모드 (주의: 보안 위험)
adb shell "setenforce 0"

2. 공간 부족

# /data 파티션 공간 확인
adb shell "df -h /data"

# 불필요한 파일 정리
adb shell "rm -rf /data/local/tmp/fio_testfile*"

3. 성능 불일치

  • 백그라운드 앱 종료
  • 기기 재부팅 후 테스트
  • 충전 상태 확인 (배터리 절약 모드 영향)

권장 사항

테스트 순서

  1. 기본 재현 테스트: 원본 패턴과의 일치성 확인
  2. 표준 벤치마크: 시스템 기본 성능 측정
  3. 성능 최적화: 최대 성능 한계 확인
  4. 스트레스 테스트: 안정성 및 내구성 검증

주의 사항

  • 스토리지 공간: 일부 테스트는 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 설정이 자동 생성됩니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors