Daneel Yaitskov <dyaits...@gmail.com> writes: > Hi Ben, > > Thanks for bothering. > I solved issue. > That was ancient cabal. > I build ghc successfully once I installed Cabal-3. > I thought that configure script will warn me about incompatible cabal :) > Hmm, interesting. I'm actually rather surprised that the problem was cabal-install. Afterall, GHC's build system doesn't use cabal-install apart from building Hadrian.
> Btw could you shed some light on RTS locking? > > I am interested in: > > ccall traceUserBinaryMsg(MyCapability() "ptr", msg "ptr", len); > > because it looks slower on smaller chunks. > Writing data in 64 bytes chunks vs 4k (ghc 8.11) is twice slower. > > https://github.com/yaitskov/eventslog-benchmark > benchmark [ LoadWithBinary-b1048576-t001-c0064] lasted for cpu > 4.23 ms real 4.24 ms > benchmark [ LoadWithBinary-b1048576-t001-c0128] lasted for cpu > 3.97 ms real 3.91 ms > benchmark [ LoadWithBinary-b1048576-t001-c1024] lasted for cpu > 2.73 ms real 2.61 ms > benchmark [ LoadWithBinary-b1048576-t001-c2048] lasted for cpu > 2.34 ms real 2.23 ms > benchmark [ LoadWithBinary-b1048576-t001-c4096] lasted for cpu > 2.16 ms real 2.20 ms > > Eventlog messages tend to be small. > > So application developer has to think about bufferization to speed up. > OpenTelemetry gains 6x speed improvement with following hack. > ... Interesting. Please do open a GitLab ticket to track this. You might also be interested in #17949, which is covers the case of traceEvent being expensive when tracing is disabled. > I see that some EventLog methods use mutexes, but user message function don't. > It just appends to buffer and can flush if it is full. > So I don't see where locking happening. > MyCapability is just arithmetic > > #define MyCapability() (BaseReg - OFFSET_Capability_r) > > I guess capability locking happens somewhere upper - before C. > There is no locking necessary. Capabilities are owned by a particular operating system thread. The capability is held until the program yields it (which generally only happens during a GC or foreign function call) and during this time the program has full access to all of the state in the Capability structure without the need for a lock. This is why each Capability has its own eventlog buffer; it allows lock-free tracing. Cheers, - Ben
signature.asc
Description: PGP signature
_______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs