Here's an in-progress PR: https://github.com/racket/racket/pull/3518

With this, your simple test takes about 150ms with `racket/place` and
50ms with `racket/place/dynamic`. For comparison, just having the
submodule depend on `racket/base` gives a time of about 42 ms, and
just `racket/kernel` is about 12ms.

Sam

On Tue, Nov 24, 2020 at 2:04 PM Sam Tobin-Hochstadt
<[email protected]> wrote:
>
> th-place is used if places are not enabled when Racket is built (this is the 
> default on some platforms).
>
> I'm making progress on shrinking this, hopefully I'll have a patch done soon.
>
> One thing to note is that '#%place can be required directly and will have 
> almost no start-up cost.
>
> Sam
>
> Sam
>
> On Tue, Nov 24, 2020, 1:58 PM Nathaniel W Griswold <[email protected]> 
> wrote:
>>
>> I noticed i am using the pl- functions so I replaced th-place.rkt with a 
>> stub and saw more time shaved off, this time about 15ms for each 
>> racket/place import.
>>
>> Under what circumstances is th-place used instead of '#%place and needed?
>>
>> Nate
>>
>> On Nov 24, 2020, at 12:31 PM, Nathaniel W Griswold <[email protected]> 
>> wrote:
>>
>> I seem to remember there being some global namespace. Since every reasonable 
>> place will require racket/place, might it be possible to make the 
>> racket/place import a special case and stick it in the global space, to 
>> improve place setup time? It would be nice to be able to only set up 
>> racket/place one time instead of once for each place.
>>
>> Nate
>>
>> On Nov 24, 2020, at 12:24 PM, Nathaniel W Griswold <[email protected]> 
>> wrote:
>>
>> Actually, it cuts about 20-25ms off of a single import. Down from 185ms to 
>> 165ms for me. 50ms off my startup time of my app on average, since i 
>> basically stack the import twice and sync on the place being ready.
>>
>> Might be worth including and seeing if there’s anything else that can be 
>> shaved off.
>>
>> Nate
>>
>> On Nov 24, 2020, at 12:09 PM, Nathaniel W Griswold <[email protected]> 
>> wrote:
>>
>> I checked into it a bit.
>>
>> racket/fixnum, racket/flonum, and racket/vector are needed by 
>> “private/th-place.rkt”, which is required by racket/place. Not sure why 
>> DrRacket is saying that it’s not needed.
>>
>> racket/runtime-path does not appear to be needed.
>>
>> I tried removing racket/runtime-path and racket/match but didn’t see any 
>> performance gains. It appears the delay is elsewhere.
>>
>> Nate
>>
>> On Nov 24, 2020, at 9:52 AM, Robby Findler <[email protected]> wrote:
>>
>> DrRacket thinks that there are no references to a number of the requires in 
>> racket/place, including racket/fixnum, racket/flonum, racket/vector, and 
>> racket/runtime-path. Not sure if that's an error on DrRacket's part (and I 
>> don't see why those would be needed for their effects).
>>
>> Also, the only use of racket/match seems to be this, which seems simple to 
>> rewrite out.
>>
>>     (match name
>>       [(? symbol?) `(submod (quote ,name) ,submod-name)]
>>       [(? path?) `(submod ,name ,submod-name)]
>>       [`(,p ,s ...) `(submod ,(if (symbol? p) `(quote ,p) p) ,@s 
>> ,submod-name)])
>>
>> Robby
>>
>>
>> On Tue, Nov 24, 2020 at 8:58 AM Nate Griswold <[email protected]> wrote:
>>>
>>> Oh, interesting. So compilation breaks the submodule out from the modules 
>>> if possible?
>>>
>>> So anyway, it sounds like breaking my modules out into separate files will 
>>> improve performance in most cases.
>>>
>>> Unfortunately, i need racket/place in the module that is my startup 
>>> bottleneck. If i modify the previous program to require racket/place and 
>>> compile, it takes around 180ms.
>>>
>>> This is about what i can expect for a module that requires racket/place, 
>>> then?
>>>
>>> Nate
>>>
>>>
>>> On Tue, Nov 24, 2020 at 8:48 AM Matthew Flatt <[email protected]> wrote:
>>>>
>>>> Just to elaborate a little more:
>>>>
>>>> The difference is because the `test` submodule can be loaded
>>>> independently from the compiled form. Loading the submodule from source
>>>> requires loading the enclosing module, too (which depends on
>>>> `racket/place` and more).
>>>>
>>>> At Tue, 24 Nov 2020 08:46:12 -0600, Nate Griswold wrote:
>>>> > Awesome, thanks!
>>>> >
>>>> > Nate
>>>> >
>>>> >
>>>> > On Tue, Nov 24, 2020 at 8:44 AM Sam Tobin-Hochstadt 
>>>> > <[email protected]>
>>>> > wrote:
>>>> >
>>>> > > Almost certainly the problem is expansion time. If I run that program
>>>> > > on my machine, it takes about 200 ms. But if I compile the file to zo
>>>> > > first with `raco make`, then it takes about 40 ms, basically identical
>>>> > > to `racket/base`.
>>>> > >
>>>> > > Sam
>>>> > >
>>>> > > On Tue, Nov 24, 2020 at 9:39 AM Nate Griswold <[email protected]>
>>>> > > wrote:
>>>> > > >
>>>> > > > Oops, i am having some issues with not getting to the list from my 
>>>> > > > other
>>>> > > email address. Here is a reply i sent for the record.
>>>> > > >
>>>> > > > ---
>>>> > > >
>>>> > > > Thank you, Matthew.
>>>> > > >
>>>> > > > The following code takes around 250ms on my machine. Any idea why? I 
>>>> > > > was
>>>> > > expecting it to be fast since the module is based on racket/base.
>>>> > > >
>>>> > > > #lang racket/base
>>>> > > >
>>>> > > > (require syntax/location)
>>>> > > > (require racket/place)
>>>> > > >
>>>> > > >
>>>> > > >
>>>> > > > (module test racket/base
>>>> > > >  (provide place-main)
>>>> > > > racket
>>>> > > >  (define (place-main pch)
>>>> > > >   (void)))
>>>> > > >
>>>> > > > (time (place-wait (dynamic-place (quote-module-path test) 
>>>> > > > 'place-main)))
>>>> > > >
>>>> > > > Nate
>>>> > > >
>>>> > > >
>>>> > > > On Tue, Nov 24, 2020 at 8:35 AM Nathaniel W Griswold
>>>> > > <[email protected]> wrote:
>>>> > > >>
>>>> > > >> Thank you, Matthew.
>>>> > > >>
>>>> > > >> The following code takes around 250ms on my machine. Any idea why? I
>>>> > > was expecting it to be fast since the module is based on racket/base.
>>>> > > >>
>>>> > > >> #lang racket/base
>>>> > > >>
>>>> > > >> (require syntax/location)
>>>> > > >> (require racket/place)
>>>> > > >>
>>>> > > >>
>>>> > > >>
>>>> > > >> (module test racket/base
>>>> > > >>  (provide place-main)
>>>> > > >> racket
>>>> > > >>  (define (place-main pch)
>>>> > > >>   (void)))
>>>> > > >>
>>>> > > >> (time (place-wait (dynamic-place (quote-module-path test) 
>>>> > > >> 'place-main)))
>>>> > > >>
>>>> > > >> Nate
>>>> > > >>
>>>> > > >> On Nov 24, 2020, at 8:16 AM, Matthew Flatt <[email protected]> 
>>>> > > >> wrote:
>>>> > > >>
>>>> > > >> The bottleneck for place startup is loading modules into the new 
>>>> > > >> place,
>>>> > > >> including modules like `racket/base`.
>>>> > > >>
>>>> > > >> For example,
>>>> > > >>
>>>> > > >>  (place-wait (dynamic-place 'racket 'void))
>>>> > > >>
>>>> > > >> takes around 200ms on my machine, while
>>>> > > >>
>>>> > > >>  (place-wait (dynamic-place 'racket/base 'void))
>>>> > > >>
>>>> > > >> takes around 30ms and
>>>> > > >>
>>>> > > >>  (place-wait (dynamic-place 'racket/kernel 'void))
>>>> > > >>
>>>> > > >> takes around 10ms.
>>>> > > >>
>>>> > > >> It sounds like you're already aware that the complexity of the 
>>>> > > >> module
>>>> > > >> loaded into a place matters, though. Beyond using a minimal set of
>>>> > > >> modules, I don't have any way to make place startup faster.
>>>> > > >>
>>>> > > >> Matthew
>>>> > > >>
>>>> > > >> At Tue, 24 Nov 2020 05:04:19 -0600, Nate Griswold wrote:
>>>> > > >>
>>>> > > >> Is there any way to make places startup faster? Even if i do an 
>>>> > > >> explicit
>>>> > > >> round trip using place-channel-put and place-channel-get on both 
>>>> > > >> sides,
>>>> > > it
>>>> > > >> takes on the order of centiseconds for near empty places to start 
>>>> > > >> up.
>>>> > > >>
>>>> > > >> My program requires the threads for a couple places to be set up 
>>>> > > >> before
>>>> > > it
>>>> > > >> can operate, so this impacts my startup time by quite a bit.
>>>> > > >>
>>>> > > >> I have one place that has a very simple module and one place with a 
>>>> > > >> more
>>>> > > >> complicated module. Is there some sequence that i should do things 
>>>> > > >> in
>>>> > > for
>>>> > > >> the minimal startup time? It seems nothing i do really helps much.
>>>> > > >>
>>>> > > >> Nate
>>>> > > >>
>>>> > > >> --
>>>> > > >> You received this message because you are subscribed to the Google
>>>> > > Groups
>>>> > > >> "Racket Users" group.
>>>> > > >> To unsubscribe from this group and stop receiving emails from it, 
>>>> > > >> send
>>>> > > an
>>>> > > >> email to [email protected].
>>>> > > >> To view this discussion on the web visit
>>>> > > >>
>>>> > >
>>>> > https://groups.google.com/d/msgid/racket-users/CAM-xLPpvfCHHDDpfNmuTWQOyfYfEJ7v
>>>> > > >> m1c_dS7nj3FxaEFVm2Q%40mail.gmail.com.
>>>> > > >>
>>>> > > >>
>>>> > > > --
>>>> > > > You received this message because you are subscribed to the Google
>>>> > > Groups "Racket Users" group.
>>>> > > > To unsubscribe from this group and stop receiving emails from it, 
>>>> > > > send
>>>> > > an email to [email protected].
>>>> > > > To view this discussion on the web visit
>>>> > >
>>>> > https://groups.google.com/d/msgid/racket-users/CAM-xLPqtJrem4j%3DUi3fbrduoahsXC
>>>> > NNA2JPuB0Tt9dissiu5KA%40mail.gmail.com
>>>> > > .
>>>> > >
>>>> >
>>>> > --
>>>> > You received this message because you are subscribed to the Google Groups
>>>> > "Racket Users" group.
>>>> > To unsubscribe from this group and stop receiving emails from it, send an
>>>> > email to [email protected].
>>>> > To view this discussion on the web visit
>>>> > https://groups.google.com/d/msgid/racket-users/CAM-xLPqVgEBvrRzjU7%3DX_h3Wy_YUH
>>>> > 11G6CX5%2BKjSct26pi3oEA%40mail.gmail.com.
>>>
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups 
>>> "Racket Users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>> email to [email protected].
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/racket-users/CAM-xLPoLD6N%3Dwep%2Bed5UGduA7mZ-SaYxFJ9VbqM78CppMG3m2w%40mail.gmail.com.
>>
>>
>>
>>
>>
>> --
>> You received this message because you are subscribed to the Google Groups 
>> "Racket Users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/racket-users/7AE1B364-8DE1-435C-8AA2-EBCFE078040D%40manicmind.earth.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/CAK%3DHD%2BZFkKFd-6mPSbEr7ttL0RnJeZXVHx1-Y6_DEyOZcMHiDA%40mail.gmail.com.

Reply via email to