タグ別アーカイブ: スケジューラ

fusionio vs huawei | ツチノコブログ

Huawei Tecal ES3000はMLCのNANDフラッシュ製品で

2.4TBでPCIe (2.0 x8)のインターフェースを持っています。

読み込み時の最大帯域は3.2GB/s書き込み時の最大帯域は2.8GB/sとなっています。

latencyでみると読み込みは8us、書き込みで49usの能力を持つ。

非常にユニークだなと思ったのがFPGAを3つ搭載しFTL、GC、RAIDやECCなどの処理を担うことでホストサーバのCPUをオフロードしてるところ。また、IOスケジューラーをダブルキューとすることで種類の違う命令を別々のキューで処理できるようになっている。この機能により性能の劣化を低減させ、iodrive2よりも2~3倍高速になっている。

価格も半値で設定されているようです。

日本法人は中国本体の開発部門と直接のパスを持っているようで対応が早くなるようです。

ドライバはカーネルそれぞれで専用のものを利用する必要がありますが結構そろっていました。

rhelやCentOS5/6のほとんどのカーネルには対応していると思われる。それ以外のカーネルで利用する場合はhuawei社でドライバをコンパイルしてもらう必要がある。

iodriveなんかは自分でカーネルに合わせてコンパイルしなおしますが、es3000では違う。

このあたりがちょっと怪しいような気もしています。ドライバのソースが出せないということで、どこかのパテントを侵害していたり怪しいコードが埋め込まれていたりしてたりして。んなことはないと思いますが。

引用元: fusionio vs huawei | ツチノコブログ.

I/Oスケジューラを使う。

Linux カーネルの I/O スケジューラ

従来は Linux カーネルの I/O スケジューラは一種類だけで、コンパイル時に固定されていました。しかし Linux カーネル 2.6.10 からは複数の I/O スケジューラをデバイス毎に切り替えて、ハードウェアや用途に最適なスケジューラを選べるようになりました。カーネル 2.6.17 に組み込まれているスケジューラは下の四種類です。

noop

anticipatory

deadline

cfq

noop スケジューラ

noop スケジューラはその名の通り、何もしないスケジューラです。入出力インタフェースや周辺機器自身がハードウェアレベルで高度な処理を行う場合 (インテリジェントな RAID コントローラなど) や、非常に性能が良い場合 (半導体ディスクなど) は、カーネルはむしろ何もしないほうがシステム負荷が軽減できるという場合があります。 noop スケジューラはこのような場合に指定します。普通のパソコンでは noop スケジューラを指定すると性能が落ちるでしょう。

anticipatory スケジューラ

anticipatory スケジューラ (as) はデバイスが伝統的なハードディスクと同様の構造を持つと仮定して、将来の入出力要求を予測したスケジューリングを行います。また入出力要求を待っていくつか貯めてから処理を行う性質があるので、レイテンシは悪くなるかもしれません。このスケジューラは比較的低速のハードディスクを用いた環境で良い性能を示すでしょう。

deadline スケジューラ

データベース向きのスケジューラです。スループットよりもレイテンシに最適化したスケジューリングを行います。デスクトップなどの普通のファイルシステムで使用してもあまり良い性能は得られないでしょう。

cfq スケジューラ

Completely Fair Queuing (CFQ) スケジューラは Fedora Core のカーネルパッケージのデフォルトです。 CFQ はプロセス毎の I/O キューを持ち、極力公平なスケジューリングをしようとします。これにより従来の Linux カーネルで見られた「バックグラウンドで I/O 処理が行われているとレスポンスが悪くなる」という現象を抑えています。 CFQ はどのような環境でも比較的良好な性能を示すオールラウンドプレイヤー的な性質を持っているようです。

引用元: I/Oスケジューラを使う。.

【後藤弘茂のWeekly海外ニュース】海外のオクタコア版GALAXY S4の「big.LITTLE」ソフトウェアアーキテクチャ

CPUマイグレーションモデルの利点は、OS側からはCPUコアは対称型のSMP(Symmetric Multi-Processor)構成に見えているのに、ハードウェア的には非対称なAMP(Asymmetric Multiple Processor)構成である点。Samsungの例で言えば、AndroidのLinuxカーネルからは、ハードウェアはクアッドコアのSMP構成に見えている。ところが、実際にはCortex-A15のクアッドとCortex-A7のクアッドの、2種類8コアが混在するAMP構成だ。

引用元: 【後藤弘茂のWeekly海外ニュース】海外のオクタコア版GALAXY S4の「big.LITTLE」ソフトウェアアーキテクチャ.

そして、CPUマイグレーションモデルでは、Linuxカーネルのスケジューラ自体には手を加えない。これは重要なポイントで、開発期間を短くできた理由でもある。

 「Linuxカーネルのスケジューラのソースコードは1万行程あるが、それには一切タッチしない。その下にアドオンで単純な2,000行くらいのコードを足して、CPUコアのスイッチを行なわせている。OSのスケジューラからは仮想的にCPUコアは4つにしか見えない。しかし、その下でCortex-A7とA15を勝手に切り替えている。切り替えるスイッチャがカーネルの中に入っているのでインカーネルスイッチャ(In-Kernel Switcher:IKS)と呼んでいる」(塚本氏)。
インカーネルスイッチャ(IKS)とMP(PDF版はこちら)
IKSソリューション
MPソリューション

 In-Kernel Switcher(IKS)がOSのスケジューラをだますことで、SMPと見せかけながら、AMP構成を有効に使う仕組みとなっている。アドオンのIKSを使うことでOSの根本機能であるスケジューラのコードには変更を加えずに済ませている。Linuxの歴史でも、スケジューラの変更は2回程度しか行なわれておらず、それを改変しようとすると大変な作業になってしまうため、IKSという抜け道を使った。

 LinaroのIKSは、CPU負荷に応じて2つのコアを切り替える。切り替えの遷移ポイントの決定には、負荷に応じてCPUコアの電圧と動作周波数を切り替える「DVFS(Dynamic Voltage and Frequency Scaling)」の仕組みを使ってる。Linuxの場合は、CPUFreq Governorと呼ばれるサブシステムがあり、CPU使用率をモニタしてCPUの動作周波数を遷移させる。IKSは、Governorからの情報で、DVFSが一定のポイントに達した時にCPUコアをスイッチさせる。

 そのため、OS側はDVFSでCPUの周波数を遷移させているつもりでいるが、実際にはその下で、IKSが一定のDVFSポイントから下はCortex-A7、上はCortex-A15という具合に振り分ける。もっとも、実際にはCortex-A7とCortex-A15では周波数レンジが異なり、Cortex-A7の最高周波数から、Cortex-A15の最低周波数へと遷移する。そのため、IKSでは、バーチャルOPP(Operating Performance Point)を設定して、Cortex-A7とCortex-A15それぞれの実際のDVFSポイントにマップしている。OSから見えるのは、バーチャルOPPとなる。
CPU使用率をモニタしてCortex-A15に切り替える
Cortex-A7/A15を切り替えるバーチャルOPP

 LinaroのIKSで立ち上がった非対称型のAMP構成のbig.LITTLEアーキテクチャ。次のステップは、big.LITTLE MPモデルの実現となる。MPモデルでは、タスクのCPU負荷に応じて、混在する全てのコアに適切にタスクが割り当てられるようにするとARMは説明していた。しかし、これにはさまざまなチャレンジがある。それは、OS側がタスクのCPU負荷を知る術が極めて限られているからだ。

Flashストレージ向けに新I/Oスケジューラを提案 – Linuxカーネル | エンタープライズ | マイナビニュース

Flashストレージ向けに新I/Oスケジューラを提案 – Linuxカーネル | エンタープライズ | マイナビニュース: FIOPSの基本アイデアは、高IOPSである特性を利用し、最小のリクエストサイズ合計(viosの合計)を持つタスクを優先的に選択してディスパッチを実施することにあるようだ。