UbuntuとI/Oスケジューラー(前編)
2018年12月12日、「Ubuntu Kernel Team」のメンバーが「Ubuntu」とLinux I/Oスケジューラーに関する情報を紹介しています。Ubuntu Kernel Teamとは
「Ubuntu Kernel Team」は、「Ubuntu」向け「Linux kernel」のリリースやメンテナンスを行っているチームです。「Ubuntu」は様々な分野で活用されるOSであり、「Linux kernel」を最高の品質と共に提供することがチームの目的となっています。
世の中には様々なLinuxディストリビューションが存在していますが、他のLinuxディストリビューションが提供している「Linux kernel」と「Ubuntu」が提供している「Linux kernel」は異なります。
例え同じバージョンの「Linux kernel」を採用していたとしても、カーネルの設定やバックポートされているパッチが異なるため単純な比較はできません。
どのような「Linux kernel」を提供するのかは、各Linuxディストリビューションのポリシーによります。
デスクトップユーザーから見ると「Linux kernel」の存在を気にする時は、何かトラブルが起きた時ぐらいかもしれません。
しかしその背景では「Ubuntu Kernel Team」がユーザーの期待を実現するため、日々活動を行っています。
それぞれの分野に最適化した「Linux kernel」の提供も行っていますが、それも目標及び活動の一部です。
Ubuntu Kernel Teamのポリシー
ポリシーの一部を紹介します。- コミュニティー及びアップストリームと協力し、オープンモデルで開発を行う
- Ubuntuの目標とそれに沿うユーザーの期待、そして世の中のトレンドに沿うように、幅広いハードウェアのサポートを有効にする
- Ubuntuで採用するLinux kernelのバージョンの選定
- ロードマップの策定
I/Oスケジューラー
I/Oスケジューラーは、ストレージ(HDDやSSDなど)のI/Oを制御する仕組みです。ストレージのI/Oとは、簡潔に言えばデータの読み書きのことです。
I/Oスケジューラーにはいくつか種類があり、それぞれに長所と短所があります。
長所と短所を把握しストレージの構成や特性に合わせ最適なI/Oスケジューラーを利用すれば、データの読み書きの性能を向上させることができます。
伝統的なストレージとメモリーストレージ
HDDのような伝統的なストレージでは、ヘッドの移動を少なくするため、つまりデータの読み書きの遅延を小さくするため、データの読み書きの位置が近くなるようにI/Oリクエスト(I/O操作)を並び替えたり、あるいは並び替えを試みる方法は、合理的な方法です。しかしI/Oリクエストを並び替える方法は、並び替えのため状況によっては遅延が起きうるI/Oリクエストが発生します。
この問題に対する一般的な対応策は、遅延が発生したI/Oリクエストをある特定の時間の後にスケジューリングする方法です。
USBメモリーやSSDなど高速な不揮発性のメモリーストレージでは、そもそも伝統的なストレージと特性が大きく異なり、また通常はランダムアクセスが容易(高速)であり、上記のようなI/Oリクエストの並び替えを必要としません。
均衡の取れたI/O制御
一部のI/Oが他のI/Oをブロックしデータの読み書きを専有し続ける状況は好ましくありません。均衡の取れたI/Oが必要であり、I/Oの均衡を取る方法には様々な方法があります。
一般的にその方法や均衡の程度が高度になればなるほど、より多くの計算処理が必要になります。
そのため非常に高度な均衡を実現するI/Oスケジューラーを高速なストレージで使用しても、低速なCPUを使用している場合、必ずしも期待した結果が得られるとは限りません。
I/Oパターン
I/Oパターンとはストレージに対するアクセスパターンです。簡潔に言えばストレージの使い方や使われ方でしょうか。
I/OパターンはI/Oスケジューラーの選択に影響します。
例えばランダムリードとランダムライトが混在するパターンもあれば、主にシーケンシャルリードを行い、時々ランダムライトを行うパターンもあります。
このようにI/Oパターンにより、最適なI/Oスケジューラーが変わってきます。
完璧なI/Oスケジューラーはない
それぞれのI/Oスケジューラーには一長一短があり、またストレージに対し複数の要件が混在しており、すべての要件を完全に満たすI/Oスケジューラーはありません。一般的なユーザーは
普通のPCを利用する一般的なユーザーは、デフォルトのI/Oスケジューラーが最善の選択になります。つまりI/Oスケジューラーのことを気にせず今の状態でそのまま利用すれば良いです。
高度なユーザーは
「Ubuntu Kernel Team」では、I/Oスケジューラーに関するガイドラインを以下で紹介しています。あくまでこれはガイドラインであり、I/Oスケジューラーの選択及び採用はユーザーの自己責任となりますが、I/Oスケジューラー選択時の参考として活用すると良いでしょう。