무작위 접근(Random access) 워크로드에 적합한 ZFS 튜닝 방법

2 hours ago 1
  • ZFS 기본 파라미터는 순차 접근과 무작위 접근 사이의 절충안으로 설정됨
    • 워크로드 특성을 명확히 안다면 더 공격적인 튜닝 가능
  • 순차 접근 vs 무작위 접근 차이 설명
    • HDD는 헤드 이동 때문에 무작위 접근 성능이 순차 접근 대비 수십~수백배 느려질 수 있음
    • SSD도 무작위 접근이 훨씬 빨라졌지만 순차 접근이 여전히 더 효율적임
    • 큰 파일을 순서대로 읽는 워크로드는 순차 접근 성향이 강함
    • 작은 파일 여러 개를 자주 읽는 워크로드는 무작위 접근 성향이 강해지기 쉬움
  • 워크로드 분석 방법 소개
    • 코드/구조 기반 논리적 추론
    • 처리량(bps)+초당 IO 수(iops) 기반 평균 IO 크기 계산
    • zpool iostat -r 기반 IO 크기 분포 분석
  • zpool iostat -r 해석
    • ind: 개별 논리 요청 크기
    • agg: 실제 병합되어 수행된 IO 크기
    • agg가 ind보다 크면 인접 IO 병합이 잘 일어나고 있다는 뜻
  • 예제 워크로드 분석 결과
    • 동기 읽기 비중 약 76%
    • 32KiB 이하 읽기가 99% 이상
    • 비동기 쓰기 역시 작은 IO 비중 높음
    • 전체적으로 무작위 접근 성향이 매우 강한 워크로드
  • zfs_prefetch_disable
    • ZFS는 순차 접근 패턴 감지 시 인접 블록을 미리 ARC에 적재함
    • 무작위 접근 워크로드에서는 사전 읽기 적중률이 낮아 불필요한 IO만 늘어날 수 있음
    • arc_summary 기반으로 사전 읽기 효율 측정 가능
    • 적중률이 낮다면 zfs_prefetch_disable 검토 가능
  • recordsize
    • 기본값은 128K
    • 예제 워크로드에서는 대부분의 IO가 32KiB 이하이므로 더 작은 recordsize 검토 가능
  • 최적값 선정
    • 벤치마크 기반으로 결정하는 것이 중요
    • MySQL/Postgres 같은 DB는 이미 검증된 튜닝 사례가 많음
    • 일반적으로 DB 페이지 크기와 유사한 recordsize를 사용하는 경우가 많음
Read Entire Article