[dub] Passing --DRT-gcopt to dmd

Anonymouse asdf at asdf.net
Fri May 31 10:27:44 UTC 2019


I'm trying to tweak the GC when compiling with dub, starting with 
something easy like profile:1.

> $ grep dflags dub.json
>     "dflags": [ "-lowmem", "--DRT-gcopt=profile:1" ],
> $ dub test

Doesn't work, doesn't give any extra output. Entering bogus flags 
like --DRT-gcopt=banana:1 doesn't evoke any error message either, 
making me doubt it's being passed on at all.

> $ dmd -oftest -lowmem --DRT-gcopt=profile:1 source/**/*.d
>         Number of collections:  13
>         Total GC prep time:  7 milliseconds
>         Total mark time:  2110 milliseconds
>         Total sweep time:  270 milliseconds
>         Total page recovery time:  204 milliseconds
>         Max Pause Time:  472 milliseconds
>         Grand total GC time:  2592 milliseconds
> GC summary: 1099 MB,   13 GC 2592 ms, Pauses 2117 ms <  472 ms

Manual dmd invocation does work, so it's not like dmd is ignoring 
--DRT-gcopt.

> $ dub test --DRT-gcopt=profile:1
> [...]
>         Number of collections:  10
>         Total GC prep time:  0 milliseconds
>         Total mark time:  4 milliseconds
>         Total sweep time:  7 milliseconds
>         Total page recovery time:  4 milliseconds
>         Max Pause Time:  0 milliseconds
>         Grand total GC time:  15 milliseconds
> GC summary:   12 MB,   10 GC   15 ms, Pauses    4 ms <    0 ms

The totals should be in the ballpark of 1Gb+ (as above), not 
12Mb. Is it only profiling dub itself? (Incidentally this is 
roughly what dmd reports if called without -lowmem.)

> $ export DRT_GCOPT=profile:1
> $ dub test

Doesn't work either, I can't actually get the env var to affect 
dmd at all, even when manually running it.

What is the correct way?


More information about the Digitalmars-d-learn mailing list