한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

게임 렉 백서 › L11 디스크

IOPS 한도·대기열 포화 IOPS limit / queue saturation

원인 ID dk-iops · 주 담당 인프라팀·서버 인프라 · 함께 게임개발팀·서버 개발, 인프라팀·DB 인프라

그림과 실험이 있는 원본 카드로 열기 →

디스크가 1초에 처리할 수 있는 요청 수를 넘으면 대기열이 길어져 지연이 폭증합니다.

왜 읽기·쓰기 요청이 디스크 처리 능력에 근접 → 그러면 대기열이 길어짐(대개 이용률 90% 이상에서 폭증) → 화면에서는 저장·로딩 지연, 동기 호출이면 멈춤

증상
입력 지연, 멈춤
요인
지연, 정체
누가 겪나
서버 전체
언제
사람이 몰릴 때, 저녁 피크 시간
담당
주 담당 인프라팀·서버 인프라 · 함께 게임개발팀·서버 개발, 인프라팀·DB 인프라
게임개발팀 할 일
요청 합치기, 자주 읽는 데이터는 캐시, 게임 스레드에서 디스크를 기다리지 않게 비동기로.
인프라팀 할 일
서버 장비·OS: 더 빠른 디스크, 인스턴스 유형별 디스크 대역폭·IOPS 한도 확인, 디스크 이용률·대기열 경보, 큰 파일 복사는 한가한 시간에. DB 장비: DB 디스크도 IOPS·처리량 이용률 경보, DB 인스턴스 사양의 디스크 한도 확인.
수치 감각
HDD 약 150, SATA SSD 수만, NVMe 수십만 IOPS. 클라우드 기본 디스크(AWS gp3)는 3,000 IOPS, 초당 125MiB입니다. 초당 전송량 한도는 IOPS와 별도라서 큰 파일 복사가 이 한도를 채우면 작은 쓰기까지 밀립니다.
그래프에서는
한도에 닿아 평평해짐 · IOPS, 디스크 대기열 길이
확인할 곳
iostat -x 1의 r/s·w/s, rkB/s·wkB/s, aqu-sz, r_await·w_await를 봄. 클라우드는 EBS의 VolumeReadOps·VolumeWriteOps·VolumeQueueLength와 한도 초과 여부 VolumeIOPSExceededCheck·VolumeThroughputExceededCheck, 인스턴스 쪽 InstanceEBSIOPSExceededCheck·InstanceEBSThroughputExceededCheck를 봄
이러면 맞음
초당 요청 수나 전송량이 한도 값에서 평평해지고 aqu-sz와 await가 함께 치솟음. 클라우드에서는 초과 확인 지표가 1
이러면 아님
%util이 100%여도 await가 낮으면 아직 여유가 있을 수 있음. 요청을 병렬로 처리하는 SSD·RAID에서는 %util이 한도를 뜻하지 않음. 한도에 닿지 않았는데 await만 높으면 디스크 자체 지연(dk-hdd)이나 fsync(dk-fsync)
확인 수단
인프라 도구로 확인(게임 코드 불필요)
더 알아보기
클라우드에서는 디스크 한도와 별도로 서버 사양(인스턴스 유형)마다 디스크 대역폭·IOPS 한도가 있습니다. 비싼 디스크를 붙여도 서버가 작으면 인스턴스 한도에서 막힙니다.

출처

  1. Exos X18 Data Sheet Seagate
    7,200rpm 서버용 HDD의 4K 무작위 읽기 170 IOPS(QD16)
  2. D3-S4520 SSD Solidigm
    서버용 SATA SSD 4KB 무작위 읽기·쓰기 최대 92K/48K IOPS
  3. Solidigm™ D7-P5520 and D7-P5620 Product Brief Solidigm
    서버용 NVMe SSD 무작위 읽기·쓰기 1,000K/200K IOPS
  4. Amazon EBS General Purpose SSD volumes AWS
    gp3 기본 성능 3,000 IOPS와 125MiB/s, 둘은 따로 늘릴 수 있는 별개 한도
  5. Amazon EBS-optimized instance types AWS
    인스턴스 유형마다 EBS 대역폭·처리량·IOPS의 기준·최대 한도가 따로 있음
  6. iostat(1) — Linux manual page sysstat
    -x: r/s·w/s, rkB/s·wkB/s, aqu-sz(예전 이름 avgqu-sz), r_await·w_await, %util. 요청을 병렬로 처리하는 RAID·최신 SSD에서는 %util이 성능 한도를 나타내지 않음
  7. Amazon CloudWatch metrics for Amazon EBS AWS
    VolumeIOPSExceededCheck·VolumeThroughputExceededCheck: 볼륨의 IOPS·처리량 한도를 넘기려 했으면 1(Nitro 인스턴스), VolumeQueueLength
  8. CloudWatch metrics that are available for your instances AWS
    InstanceEBSIOPSExceededCheck·InstanceEBSThroughputExceededCheck: 인스턴스의 EBS IOPS·처리량 한도를 넘기려 했으면 1

함께 보면 좋은 원인

같은 층: L11 디스크

같은 증상(입력 지연)의 다른 층 원인

그림과 실험이 있는 원본 카드 보기