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
  • サービスコンフィグレーション
    • httpd.confの MaxClient
    • my.cnfの key_buffer
  • アプリケーション最適化
    • setsockopt()
    • マルチスレッドプログラミング
  • プロセス優先度設定
    • nice ionice

Tuning Process

ツール
  • ps & top

ex)
 ps -eo pid,comm,nice.pri,sched,psr,pcpu,rss

  • sar

  システム全体のリソースモニタ
  プロセスごとにCPU、メモリ、ネットワーク、swapの使用状況が見れる。
  ボトルネック特定に役立つだろう

  • 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でマウントする。

他の例

  • Space for time
    • /proc/sys/net/ipv4/tcp_wmem
    • /proc/sys/net/core/wmem_default
  • Safety for time
    • mount -o commit=nsec /proc/sys/vm/dirty_expire_centisecs
  • Decrese waste
    • /proc/sys/vm/page-cruster

Tuning tips

  • チューニング効果は、マシンの性能に依存する。
  • チューニングの影響を考える。