droidroid

android好きのandroidブログ コメント大歓迎です

Nexus5が欲しいです・・・
基本的に転載・リンクはフリーですが、一声かけてくださるとうれしいです。。

I/Oスケジューラーについての考察

以前の記事でSetCPUとTrickster MOD Kernel Settingsというアプリについて紹介しました。
今回は各設定項目にあるI/Oスケジューラーについての考察です・



※root化前後の操作は自己責任でお願いします。
不具合・故障などが発生しても当ブログは責任を負いません。

さて、I/Oスケジューラーとは何か。
これはInput/Outputの略でつまりは「ファイルの読み込み/書き込み」
を意味しています。

簡単に説明するとI/Oスケジューラーとは
この「ファイルの読み書き」を「どのように行うか」という仕組みです。

I/Oスケジューラーと合わせて考えないといけないのが
「バッファサイズ」です。
バッファサイズとは、この読み書きのサイズを示しています。


Androidなどのデバイスでの読み込み/書き込みのイメージを簡単に説明すると

読み込み/書き込みの要求(必要な場面)が発生

スケジューラーに基づいた動作

読み込み/書き込みの実行
といった感じ?です。
下記でスケジューラーの説明を行いますが少しわかりにくい方は

読み込み/書き込みの要求=読め/書けと命令される
読み込み=文章を読む
書き込み=文章を書く
バッファサイズ=読み書きできる限界量

と置き換えると分かりやすくなるかと思います。(・・・おそらく)

root化した端末であれば、I/Oスケジューラー・バッファサイズともに
ユーザー自身で設定することが可能です。

先に結論からになりますが、この設定に絶対的な正解は(今のところ)ありません
パフォーマンスとバッテリーの戦いになるわけです。
しかし、理想に近い設定はいくつかあります。
ここではよく使われるI/Oスケジューラーの動作方法をまとめていきます。


①deadline
バッファサイズに基づき、読み書きのどちらにも対応できるように待機している状態です。
どちらの処理がきてもすぐに行える状態で待機します。
作業前の準備に気を使っている状態です。

②v/r
感覚としてはdeadlineを更に高速にしたものです。
読み書きを同時に実行し、必要無しと判断された準備部分は別処理に回します。
スピード・効率共に高いです。

③noop
基本的に、読み込み/書き込みの「並べ替え」を行うだけです。
バッファサイズに従い、どんどん読み書きを行います。

④sio
読み書きの処理要求に対して何もしません。
発生した処理要求をそのまま実行します。

⑤cfq
読み込み/書き込みの処理が偏らないようにします。
読み込み→書き込み→読み込み→・・・のように動作するのでスピード不足かもしれません。

⑥bfq
処理状態でも「処理がない」ように見せかけます。
処理内容を先読みして効率化を狙います。(cfqに似ている?)


上記6種がよく使われるスケジューラーになります。
最近の端末では、I/Oスケジューラーで
電池持ちが目に見えてわかるほど悪くなることはないかと思いますので
基本的にはスピード・効率化を狙っているスケジューラーに設定していいかと思います
(あまりに電池持ちが悪くなる時は変更してもいいかもしれません)

さて、上記を踏まえてみると少なくとも

deadline < v/r
cfq < bfq

という処理能力であることがわかると思います。
noopsioも処理能力は高いのですが
個人的なオススメはv/rbfqですかね。

I/Oスケジューラーはカーネルによって対応しているものが無い場合もありますが
できるだけ効率のいいスケジューラーに設定したいですね。