トップ «前の日記(2010-12-31) 最新 次の日記(2011-01-03)» 編集

復活作業中日記

2005|09|10|11|12|
2006|01|02|03|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|08|09|10|11|12|
2015|01|03|04|08|09|10|12|
2016|01|02|05|06|07|08|09|10|11|
2017|07|

ToDo:

  • 10 3500円借りてる
  • 01 34000円貸してる

2011-01-02 [長年日記]

_ ミラクルパッチでミラクルを体験してみる

この記事は、カーネル/VM Advent Calendar 27日目 (2011年1月2日)の記事です。

今回のお題

2010年11月18日 "ミラクルパッチ"にLinusも大喜び!Linuxカーネルを高速化させた233行のコード

この記事に出ているパッチの効果を試します。

はじめに

このミラクルパッチの効果は、上記記事のデモ映像では分かりにくいんですが、一言でまとめてしまうと

「バックグラウンドでガッツりビルドしていても表で動画再生できるぜ!」

となります。

このネタを読むような方々は、毎日のようにkernel等の大物をビルドしてると思われますが、デスクトップ環境のパフォーマンス低下をあまり気にすること無く、ガッツリとビルドが行えるようになれれば幸せですよね!ということで、今回はこのパッチを当てた際の性能変化を確かめます。

準備するもの

このパッチは、2.6.35にも比較的簡単にパッチが当たるのですが、手作業が発生するので、作業済みのパッチを用意しました。

パッチを見ると、「11 files changed, 408 insertions(+), 48 deletions(-)」となっているので、記事に書かれていたころ(Version 1)から今回利用している物(Version 4)の間にパッチの量が増えたことがわかります。

パッチの内容については自信がないので説明しません。

ビルドの仕方

ディストリビューションによってカーネルのビルド方法は変わります。自分の環境の独自カーネルをビルドする方法を参考にしつつ、上記のパッチを当ててビルドしてください。

ちなみに、Momonga Linux 7の環境では、updateによって、このパッチが適用済みのkernelが利用できます。

効果を測定

それでは効果を測定してみます。

今回は性能変化を測定するため、chromiumブラウザ上でベンチマークと、makeを同時に実行し、性能の変化を測定しました。

環境はこのとおりです。

  • PC: ThinkPad X31
  • CPU: Pentium M-1.6GHz (1core)
  • メモリ:1.5GB
  • ストレージ: SSD(CFD CSSD-PNM64WJ)
  • OS: Momonga Linux 7 (linux-2.6.35.9-6m)
  • ブラウザ:chromium-8.0.552.342
  • ベンチマーク: http://themaninblue.com/experiment/AnimationBenchmark/canvas/
  • autogroup機能の有効・無効化方法: /proc/sys/kernel/sched_autogroup_enabled の値を変更する
測定方法
  1. ブラウザで、ベンチマークを実行する
  2. 別のターミナルでkernel moduleをビルドする
  3. /proc/sys/kernel/sched_autogroup_enabled の値を変更して値の変化を見る
  4. FPSがそれほど安定しないので、数値は四捨五入して整数にまとめる
  5. 2.の並列度を変更し、2. ~ 4. の試験を数回繰り返す
結果

バックグラウンドでビルドを実行していた場合のベンチマークの結果はこのようになります。

makeの並列度ビルド無し 1 2 4 8 16
autogroup有効(FPS) 27 15 15 15 15 14
autogroup無効(FPS) 27 15 11 6 3 2

autogroup有効の方は、ビルドが始まるとFPSが低下しますが、makeの並列度が増えた場合はFPSの低下は見られません。

autogroup無効の方は並列度を上げるとそれに伴って、ベンチマークのパフォーマンスが下がっていきます。

グラフに纏めると、このようになりました。

autogroup-graph.png

バックグラウンドで激しくビルドが行われているのに、ブラウザのFPSが下がってないなんてミラクルですね!

まとめ

測定した結果、下記のことがわかりました。

  • このパッチの効果は、プログラムが早く動く事ではない。
  • autogroup有効だと、chromiumブラウザに多くのCPUが割り当てられるので、パフォーマンス低下が起こりにくい。
  • 逆に考えると、「makeコマンドとその下で実行中のコマンド群」がこれまでと比べて優先度が下げられている。

これらのことから、このパッチを適用した場合には、ある条件で負荷が高くなっても(make位しか思いつかないですが…)、他のプロセスに多めにCPU資源が割り当てられるため、デスクトップ環境が重くなりにくくなるとわかります。

ヤッター!これなら、デスクトップ環境として生活しているマシンで大量のビルドを行うのが怖く無くないですね!

Let's make!