[racket] Engineering Tradeoffs of ANF transforms and the Stateless Server

From: Shriram Krishnamurthi (sk at cs.brown.edu)
Date: Sat Dec 31 15:20:48 EST 2011

On Fri, Dec 30, 2011 at 2:54 PM, Noel Welsh <noelwelsh at gmail.com> wrote:
> On Tue, Dec 27, 2011 at 9:26 PM, Galler <lzgaller at optonline.net> wrote:
>> I note that no one has discussed throwing a significant amount of physical
>> memory at the problem.
>>
>> Empirically, is that because garbage-collection of a large heap creates its
>> own performance problems?
>
> Yes, GC pauses get annoying when the heap gets large. This can lead to
> timeouts on the client side.

In my experience, GC pauses were less of an issue than paging.  I
could literally hear the system paging when it hit certain
continuation load thresholds.

It may be the GC was causing some of this paging to happen (especially
since, in those days, the GC was not very sophisticated and may have
been touching pages it should have left alone).  But as Jay has
already said, even if you have a sophisticated GC, you literally
cannot collect very much, so you're going to run into the distinction
between physical and virtual memory sooner or later.

If you *know* an old continuation is never going to be used again, you
can use something like send/finish to dispose of it.  But you don't,
and when someone does use it, a whole bunch of old memory has to get
sucked in and a bunch of warm data sucked out.  [One of the things
that the generation raised on SSDs will miss out on is the visceral
auditory feedback of a disk at work.]

Continue moved off the (then) PLT Scheme language because there were
no good solutions to these problems at that time.  It is now a heavily
Ajax application, which means the load on the back-end is (I'm
guessing and intuiting) far less than it used to be.  The server side
code is now relatively dumb (and intentionally so), and almost all the
interesting action happens on the client.

Shriram


Posted on the users mailing list.