2015-11-11 5 views
14

私はSTMを使用するプログラムをデバッグしようとしています。あなたがここに見ることができるようにThreadScopeの測定値は非常に高いCPUアクティビティを指摘されていますトランザクションが頻繁に中断しているかどうかを確認するには?

enter image description here

だから私は、これが頻繁に中止し、取引のために起こっているかどうかを確認しようとしています。

atomically $ do 
    someWork 
    ... 
`orElse` do 
    unsafeIOToSTM $ traceEventIO "transaction aborted!" 
    retry 

しかし、私は、これは正しいですか、これはSTMのシナリオでデバッグするための最良の方法である場合かどうかわからないんだけど:私はテストにこのようなものを使用していたと思った最初の事。何か案は?

+2

:それはこのような何かを提供しますあなたの代わりにatomicallyの使用する必要がありますtrackSTM、およびdumpSTMStats :: IO()を提供します私のアプローチでもありました。 – chi

+0

あなたはこのアプローチからどのような結果を得ましたか? –

+0

トレースはありません。このアプローチが正しい場合、トランザクションは中止されません。 – luisgabriel

答えて

3

stm-statsパッケージを使用してください。持っているであろうと

STM transaction statistics (2011-10-09 12:28:37.188951 UTC): 
Transaction  Commits Retries  Ratio 
_anonymous_   1   0  0.00 
reader    1   23  23.00 
writer    23   0  0.00 

(トランザクション名が自動的に生成されますが、自分自身を設定するためのヘルパーがあります。)

+0

返事が遅れて申し訳ありません。このパッケージは長い間更新されていないようです。彼らが再試行をチェックする方法を見てみましょう。ありがとう! – luisgabriel

+0

私は更新の不足が心配しないでしょう:1)管理者のヨアヒムはコミュニティでよく知られています。 2)パッケージがStackage LTSにあります。これは少なくともビルドされていることを意味します。 –

+0

ちょうど 'stm-stats'をテストする時間があり、それは完全に機能しました!この問題は実際には頻繁に中止されたトランザクションでした。ありがとうございました! – luisgabriel

関連する問題