0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【初心者向け】ディスク I/O のチューニング【5分で読める】

Last updated at Posted at 2025-02-17

ディスク I/O のチューニング

理解のために小咄形式でまとめました。

登場人物

  • 太郎(後輩):入社1年目の若手エンジニア。
  • 花子(先輩):システムエンジニア歴3年の先輩。

場面:オフィスのチューニング作業中
太郎が ionice コマンドを試しながら、花子に質問する。

太郎:「花子先輩、 ディスク I/O のパフォーマンスチューニング について調べてるんですが、 OS の設定ディスクのパラメータ をどう調整すればいいのか、イメージが湧かなくて…。」

花子:「なるほどね。 ディスク I/O のチューニング では、大きく 3 つの領域に分けて考えると整理しやすいわ。それぞれの領域を説明するわね。」


ディスク I/O のチューニング

花子:「ディスク I/O のチューニング は、大きく 3 つの領域 があるの。」

  1. OS のパラメータ
  2. ディスクデバイスのパラメータ
  3. ディスクコントローラのパラメータ

花子:「チューニングは システムの負荷を減らし、I/O を効率化する のが目的よ。どのパラメータを調整できるかは、 OS のバージョンディスクの種類 によって変わるから、それぞれのドキュメントを確認するのが基本ね。」


1. OS のパラメータ

花子:「OS レベルでは、 プロセスの I/O 優先度制御I/O スケジューラの選択 などができるの。」

1.1 ionice - I/O スケジューリング

  • Linux の ionice コマンドを使えば、 プロセスの I/O 優先度 を制御できる。
  • スケジューリングクラスは以下の 3 つ:
    • 0(なし): カーネルのデフォルト設定を使用。
    • 1(リアルタイム): 他のプロセスよりも優先して I/O を処理。
    • 2(ベストエフォート): 標準のスケジューリング、優先度を 0 〜 7 で設定。
    • 3(アイドル): 他の I/O がないときにのみ処理。

太郎:「例えば、バックグラウンドのデータバックアップアイドルクラス に設定すれば、 通常の業務に影響を与えずに I/O を実行 できるってことですね!」


1.2 I/O スケジューラの選択

花子:「Linux には 複数の I/O スケジューラ があるから、 ワークロードに応じて最適なものを選ぶ のがポイントね。」

  • none(NVMe 専用)低遅延、オーバーヘッドが少ない
  • mq-deadline(デフォルト)バランス型、HDD/SSD 向け
  • bfq(デスクトップ向け)インタラクティブなレスポンスを重視
  • kyber(データセンター向け)SSD 向け、キューの制御が可能

太郎:「ってことは、 データベースサーバーの NVMe SSD なら none一般的な HDD なら mq-deadline を選ぶのが良さそうですね!」


2. ディスクデバイスのパラメータ

花子:「ディスク自体の設定も、 I/O の効率化 に影響を与えるの。」

2.1 先読み(read-ahead)設定

  • blockdev --setra コマンドで ディスクの先読みバッファサイズ を変更可能。
  • シーケンシャル I/O が多い場合先読みバッファを増やす
  • ランダム I/O が多い場合先読みを減らす
blockdev --setra 4096 /dev/sda

太郎:「大きなファイルの 動画編集バックアップ処理 なら、 先読みを増やす のが効果的なんですね!」


2.2 書き込みキャッシュ設定

花子:「ディスクの ライトキャッシュ(書き込みキャッシュ) もチューニングポイントよ。」

  • キャッシュを有効化hdparm -W1
  • キャッシュを無効化hdparm -W0

「データベースの クラッシュ時の整合性を重視する場合キャッシュを無効化 して、 fsync を確実に処理させる ことが重要ね。」

太郎:「ってことは、 データの整合性が重要な環境 では 書き込みキャッシュをオフ にして、 パフォーマンス優先ならオン にするってことですね!」


3. ディスクコントローラのパラメータ

花子:「ディスクコントローラ(RAID コントローラなど)の設定も、 I/O の最適化 に影響を与えるの。」

3.1 RAID レベルの選択

  • RAID 0(ストライピング)高速だけど冗長性なし
  • RAID 1(ミラーリング)冗長性あり、読み取り速度向上
  • RAID 5/6(パリティ付き)バランス型、書き込み速度がやや低下
  • RAID 10(ミラー+ストライプ)高性能かつ冗長性あり

「例えば、 データベースサーバー なら RAID 10大容量ストレージ なら RAID 5 が適しているわ。」


花子:「チューニングを 自動車の運転設定 に例えると、こんな感じね。」

  1. OS のパラメータ(ionice, I/O スケジューラ)アクセルやブレーキの感度
  2. ディスクデバイスのパラメータ(read-ahead, キャッシュ)燃費モードやスポーツモード
  3. ディスクコントローラのパラメータ(RAID, キャッシュ)駆動方式(2WD, 4WD)

太郎:「なるほど! ワークロードに応じた設定変更 で、 最適なドライブ ができるんですね!」


まとめ

花子:「ディスク I/O の パフォーマンスを向上 させるには、 OS・ディスク・コントローラ の 3 つのレベルで 適切なパラメータ調整 をするのが重要よ。」

太郎:「ありがとうございます! ioniceread-ahead の設定を調整して、 `実際にどれくらい I/O パフォーマンスが変わるか試してみます!」

参考リンク

システムパフォーマンス関連記事の目次

システムパフォーマンス関連記事は、以下の書籍を参考に記述しています。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?