labeling MVar and STM data structures
Ben Gamari
ben at smart-cactus.org
Thu Nov 21 04:51:52 UTC 2024
"Kazu Yamamoto \(山本和彦\) via ghc-devs" <ghc-devs at haskell.org> writes:
> Hello,
>
> I'm seeking of the source of the bug that my server based on Warp gets
> not-responding. "listThreads" shows that IOManager is blocked on a
> MVar permanently:
>
> 2 IOManager on cap 0: ThreadBlocked BlockedOnForeignCall
> 3 IOManager on cap 1: ThreadBlocked BlockedOnMVar
> 4 TimerManager: ThreadBlocked BlockedOnForeignCall
>
> IOManager should have the BlockedOnForeignCall reason since it's
> calling epoll_wait().
>
> It's quit hard to debug this bug since I don't understand which MVar blocks
> IOManager of 3. Users can register MVar operations to IOManager while
> IOManager itself is using MVars internally.
>
> To make this kind of debugging easier, I would like ask GHC developers
> to extend MVar to hold its label and provide "labelMVar" like
> "labelThread". The same mechanism should be provided for STM as well.
> "BlockReason" should contain the target label.
>
> What do you think?
This is generally in the direction I proposed in #21877; I agree that it
would be quite useful. I don't think that we necessarily want to extend
all MVars with labels as this would impose a fixed memory cost on all
users. However, I think the approach that I describe in the ticket,
introducing an out-of-band map for labelling heap objects, would be
a reasonable way forward.
As Matt suggests, ghc-debug is also a great tool for investigating
issues like this. However, I still think there is value in having better
support in the core libraries for understanding issues such as this.
Thoughts?
Cheers,
- Ben
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 487 bytes
Desc: not available
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20241120/b6a6efaf/attachment.sig>
More information about the ghc-devs
mailing list