androidのカスタムカーネルを導入する際、変更点や特徴に
“I/O scheduler”
という単語をよく目にするかと思います。
自分の勉強もかねて、その辺りをちょっとだけ掘り下げてみます。
わたしもあまりちゃんとわかってなかったことがいっぱいありました。
まず “I/O scheduler” とはなにか。
“I/O”
I/O は input/output の頭文字を取ったもの。
データの入出力のことですね。
“scheduler”
スケジューリング、簡単に言うと実行命令をうまいこと処理するためのシステム。
人で例えるとテンパらないようにがんばってくれる仕組みのもの。
ということで、 “I/O scheduler” は ”データの入出力を効率よく制御してやるぜ” といった感じか。
Linuxカーネル2.6.17以降のカーネルで標準搭載されている “I/O scheduler” は以下の4種(カーネル側で無効にされているものもxperia x10 デフォルトでは2種しか使えなかったり)。
- deadline
- noop
- cfq (Completely Fair Queuing)
- as (Anticipatory)
androidカスタムカーネルによく追加される3種
- V/R
- sio (Simple I/O)
- bfq (Budget Fair Queueing)
の計7種です。
一つ一つ簡単に見ていきましょう。
deadline
締め切り形式。
読み出し・書き込み両方を見ていて、処理そのものよりも待ち時間のほうに特化。
どうやらデータベースをよく扱う環境に向いてるみたい。わりとandroid向きか??
noop
何もしないよ方式。
処理をちょっときれいに並べ替えるだけ。入出力の機器そのものが賢いことをできるRAIDや、フラッシュデバイス(回転装置がない記憶装置)に向いてる。
androidはフラッシュデバイスなのでいいかも。SSDのパソコンにも良さげ。
cfq
平等主義方式。
処理が終わる時を狙って偏らないように要求を振り分ける、自然な感じ。
うーん、あんまりぱっとしない。android向きじゃないかな?Linuxではこれがデフォルト。
as
予想をもとに方式。
回転記憶装置(主としてハードディスク)を使ってるのが前提。先を見越してあふれないように一時停止したりする。
調べて知った、Linuxカーネル2.6.33からはなくなったみたい。これはないな
V/R
deadlineに似てるけど、要求の待ち時間のないハード保証を提供しない。
そして読み取りと書き込みのリクエストは一緒に発行される。つまりより高い処理を双方向で達成できる。
deadlineをピーキーにして速さを求めた感じ。これは良さそう。
sio
シンプル方式、
処理要求に対してなんにもしない。高速なデバイス向け。
noopに似てる。androidにも適してるか。
bfq
装う方式。
負荷がある状態でもアイドル状態みたいな振る舞いをする。ほとんどの場合でcfqより30%高い処理。
ほんまかいな。説明はとてもいいね。
説明を読んだ上での個人的なオススメ度
◎…V/R, bfq
○…noop, sio, deadline
△…cfq
×…as
こんなんでどうだろ。
この予測をもとに後編で実際にベンチマークを取って比較してみます。
うーむ、頭が下がります。
全く分からないことを簡単に解説してもらえるとは。
ggrksと言われそうですが、なかなかggrの優先度が後回しになってしまってました。
私のような者にはありがたいです。
後編にwktk
因みに、今はnoopですw
[…] 前回記事、I/O スケジューラについて 前編の続きになります。 […]
[…] この記事は約 7 分で読めます。前編・中編に続きとりあえずまとめの後編。 […]
[…] VR, SIO スケジューラ追加 […]
[…] VR, SIO スケジューラ追加 […]
[…] VR, SIO スケジューラ追加 […]
[…] VR, SIO スケジューラ追加 […]
[…] VR, SIO スケジューラ追加 […]
[…] スケジューラー解説───/android/88.html […]
[…] スケジューラー解説───/android/88.html […]