LinuxCon2010/Tuning Your Linux
Tuning Your Linux
Cai Fei, Fujitsu
Why tune
Linuxのディストリビューションデフォルトではいろんなシステムで動くようにしているので、最適化はされていない。
今回、チューニングしてみたらシステムのパフォーマンス(特にファイルI/O)で性能向上が見られたので、この手順を報告する。
Tuning principles
- Space for time
- キャッシュバッファを増やし、ループを減らす
- Safety for time
- ライトバックを減らす
- Decrease waste
- readhead削減
- Filter algorithm
- choose a fit I/O scheduler,filesystem
Tuning methods
- カーネルコンフィグ
- CONFIG_FUSION_MAX_SGE
- CONFIG_DEFAULT_IOSHED
- カーネルパラメータ
- /proc/sys/net/core/wmem_default
- /sys/block/sdx/queue/scheduler
- Command option
- mount -o commit=nrsec inode_readhead=n
- 不必要なサービスを止める
- auitd,smbd
- アプリケーション最適化
- setsockopt()
- マルチスレッドプログラミング
- プロセス優先度設定
- nice ionice
Tuning Process
- 問題の特定
- ボトルネックの特定
- パフォーマンスの測定
- 繰り返し
ツール
- ps & top
ex)
ps -eo pid,comm,nice.pri,sched,psr,pcpu,rss
- sar
システム全体のリソースモニタ
プロセスごとにCPU、メモリ、ネットワーク、swapの使用状況が見れる。
ボトルネック特定に役立つだろう
- iostat, vmstat, netstat & npstat
- strace & ltrace
システムコール、ライブラリコール
”-c”オプションをつけると、そのシステムコールが何回呼ばれたかがわかる。
ex)
strace -c ./pipe 5
パフォーマンスモニタ
関数ごとの実行時間のモニタ。カーネルバッファの使用状況も観測できる。
- Oprofile
CPUのボトルネックを特定するプロファイラ。(カーネル、ユーザースペース)
関数シンボル情報別のCPU使用率を出力できる。
- perf
パフォーマンスモニタ。
CPUイベントなどのハードレベル解析
ソフトウェアレベル解析
チューニング例
- 1GBのファイルだったら386MB/sでていたが、2GBんぼファイルになると241MB/sに落ちていた。
- sarとSystemTapで解析。
- iowaitのCPU負荷が1.5GB書き込みの後大きくなっていた。
- 誰がI/Oリクエストを出しているかを調査
→”flush”スレッドを特定
ここをチューニングし46〜51%向上した。
しかし、1GBのオーバーライト性能が悪いことに気づいた
(修正前後とも。もともとのあった新しい問題(問題2)。)
- オーバーライトが遅い問題
→sarで解析。
pdflushがネック
_set_page_dirty_nobuffers()をSystemTapでトレース
→73MB/s → 349MB/sに改善。
ext3だとnoauto_da_allocでマウントする。
他の例
- Safety for time
- mount -o commit=nsec /proc/sys/vm/dirty_expire_centisecs
- Decrese waste
- /proc/sys/vm/page-cruster
Tuning tips
- チューニング効果は、マシンの性能に依存する。
- チューニングの影響を考える。