IOPSとは
- ディスクが1秒当たりに処理できるI/Oアクセスの数
- 書き込み(追加・更新・削除)性能はIOPSの影響をうけやすい
- 読み込み性能はキャッシュに乗る前の初回アクセスが影響を受けやすい
- データ転送を一度にまとめて行う場合は影響を受けにくい
- データ転送を細かく分割して行う場合は影響を受けやすい
数値感覚
- 100IOPSの場合、小さなデータをデータベースに対して一秒間にトランザクションを100回コミットできる
- 10000件のデータを一回のトランザクションで行った場合には影響を受けにくい(IOPSが大きくても恩恵を受けられない可能性が高い)
プログラマの感覚
- IOPSの数値が高いほど楽できる
- IOPSの数値が低いほど一定数量、処理をまとめて読み書きする必要がある(ゲームなどでは複数アセットを1ファイルにまとめるとか)
- IOPSの数値が高いときに低いときと同じようにまとめて処理すると性能がでない場合がある
HDD
回転数(RPM) | IOPS |
---|---|
7200 | 75-100 |
10000 | 125-150 |
15000 | 175-210 |
- 回転数によって決まる
SSD
- デスクトップ向け現行製品は50000IOPS以上でる
- 容量やコンロトーラの性能によって増える
- サーバー向けは1000万IOPSとかでる
AWS
HDD
- 最大500IOPS
SSD(gp2)
容量 | IOPS |
---|---|
1GB | 100 |
100GB | 300 |
214GB | 642 |
250GB | 750 |
500GB | 1500 |
750GB | 2250 |
1000GB | 3000 |
3334GB | 10000 |
- 最小100 IOPS (33.33 GiB 以下)
- 最大10,000 IOPS (3,334 GiB 以上)
- 3000IOPSにバーストできる時間は30分から2時間まで
プロビジョンドSSD(io1)
- 1000〜20000IOPS
RAID
- RAIDを組むことによってIOPSを増やせる
- RAIDのレベルによって台数あたりのIOPSの増加倍率は変わる
LEVEL | 増加倍率 | コメント |
---|---|---|
0 | X倍 | 増やした台数分増加 |
10 | 0.5倍 | 増やした台数の半分増加 |
5 | 0.2-0.5倍 | 増やした台数の半分以下増加 |
6 | 0.1-0.4 | ほとんど増えない |
1 | 1/X倍 | まったく増えない |
- zfsのraidzはiopsほとんど増えないらしい
資料
- https://en.wikipedia.org/wiki/IOPS
- http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/EBSVolumeTypes.html
- https://aws.amazon.com/jp/ebs/details/
- http://www.thecloudcalculator.com/calculators/disk-raid-and-iops.html
- http://ftp-admin.blogspot.jp/2011/11/raid-z.html
その他
- 十分なiopsを確保してプログラムの負荷をかけてもiopsがキャップしない場合は処理の並列度が足りていない
- データベースなどでは一つのトランザクションにまとめる、バルクインサートなど。
- データベースのコネクションプールを行っていてトランザクション数を制限している場合など。