2015-11-11 14 views
14

STM kullanan bir programda hata ayıklamaya çalışıyorum. Bir işlemin sıklıkla iptal edilip edilmediğini nasıl keşfedilir?

enter image description here

Yani bu sık iptal bir işlemin nedeniyle olay olup olmadığını öğrenmek çalışıyorum: Burada gördüğünüz gibi ThreadScope okumaları çok yüksek CPU faaliyetini işaret ediyor.

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

Ama bu doğru olup olmadığını emin değilim ya bu ise en iyi yaklaşım bir STM senaryosunda ayıklama için: Ben ilk düşündüğüm şey testine böyle bir şey kullanıyordu. Herhangi bir fikir?

+2

olurdu: Böyle bir şey sağlayacağını yerine atomically kullanmalıyım trackSTM ve dumpSTMStats :: IO() sağlar benim de yaklaşımım oldu. – chi

+0

Bu yaklaşımdan hangi sonuçlara ulaştınız? –

+0

Hiç iz yok. Bu yaklaşım doğruysa, hiçbir işlem iptal edilmez. – luisgabriel

cevap

3

stm-stats Paketini kullanın.

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 

(. İşlem adları otomatik olarak oluşturulur, ancak yardımcıları kendi ayarlamak için var olacaktır)

+0

Cevap vermesi uzun gecikme için özür dilerim. Bu paketin uzun süredir güncellenmediği görülüyor. Yeniden deneme için nasıl kontrol ettiklerini göreceğim. Teşekkürler! – luisgabriel

+0

Güncelleme eksikliğinden endişe duymayacağım: 1) Joachim, bakıcı, toplumda iyi bilinir; 2) Paket, Stackage LTS'de, yani en azından inşa edildiği anlamına gelir. –

+0

Sadece stm-stats'ı test etmek için zamanım vardı ve mükemmel çalıştı! Sorun, gerçekten sık sık iptal edilen bir işlemdi. Teşekkür ederim! – luisgabriel

İlgili konular