PR

RTSの-Tオプションで実行中のプログラムの性能を知る

 早ければ2011年9月末か10月中にはリリースされる予定のGHC 7.4.1では,RTSの-tオプションの変種として新しく-Tオプションが加わる予定です。-Tオプションでは,-sオプションや-Sオプション,-tオプションとは異なり,結果をそのまま標準エラーやファイルなどには出力しません。代わりにGHC.Statsモジュールの関数を使うことで,実行中のHaskellプログラムに関する情報を得ることができます。2011年8月現在のGHC HEADでは,GCに関する統計情報を取得するためのgetGCStats関数が提供されています。

Prelude GHC.Stats> :browse
data GCStats
  = GCStats {bytes_allocated :: {-# UNPACK #-} !GHC.Int.Int64,
~ 以下略 ~
             par_avg_bytes_copied :: {-# UNPACK #-} !GHC.Int.Int64,
             par_max_bytes_copied :: {-# UNPACK #-} !GHC.Int.Int64}
getGCStats :: IO GCStats

 実際に使ってみましょう。

import GHC.Stats

main = do
  ~ 略 ~
  stats <- getGCStats
  print stats

 結果は以下の通りです。

$ ParallelTest +RTS -N -T
~ 略 ~
GCStats {bytes_allocated = 2183402748, num_gcs = 1859, max_bytes_used = 50673492
, num_byte_usage_samples = 15, cumulative_bytes_used = 412430204, bytes_copied =
 946660688, current_bytes_used = 26291612, current_bytes_slop = 0, max_bytes_slo
p = 3910308, peak_megabytes_allocated = 154, mutator_cpu_seconds = 4.898429, mut
ator_wall_seconds = 22.244257, gc_cpu_seconds = 8.205655, gc_wall_seconds = 2.75
8335, cpu_seconds = 13.104084, wall_seconds = 25.002592, par_avg_bytes_copied =
946631104, par_max_bytes_copied = 544305416}

 -tオプションと同様の項目が出力されているのがわかります。また,-tオプションにはない二つの項目が追加されています。これらは,-sオプションで出力される「Parallel GC work balance」と同じものです。「par_avg_bytes_copied」は「GC_par_avg_copied」,「par_max_bytes_copied」は「GC_par_max_copied」に相当します。

 現時点でのGHC.StatsではgetGCStats関数しか提供されていませんが,将来は並列Haskellを利用した場合のsparkに関する情報を取得するための関数も提供される予定です。今後の発展次第では,並列プログラムの動作を調べるためのツールの一つとして使えるでしょう。


著者紹介 shelarcy

 今回はGHCの性能測定機能や並列プロファイラ,DTraceなどを利用して並列プログラムの動作を調べる方法を説明しました。

 これらを利用して並列プログラムの動作を調べるのは,並列プログラムの改良のための入口に過ぎません。得た情報から問題になっている個所を考察し,変更を加えてその考察を検証するプロセスが重要です。

 内容が少し古いですが「Parallel Performance Tuning for Haskell」という論文には,今回説明した-sオプションのSPARKSの項目やThreadScopeを使って並列プログラムを改良する例がいくつか載っているので,参考にするとよいでしょう。

 東京で開催されるICFPという国際学会に併せて2011年9月23日に開かれる「Haskell Implementors Workshop 2011」でも,ThreadScopeを使って並列プログラムの性能の問題を探るという内容の講演があります。出席を予定している方は,質問を考えておくとよいかもしれません。講演に使われたスライドやビデオが後でアップロードされる予定なので,出席できなかった方も後から内容を確認できます。