---------- Forwarded message ----------
From: Steven Gomez <
stev...@gmail.com>
Date: Thu, Nov 19, 2009 at 7:24 PM
Subject: AjaxScope review
To: Rodrigo Fonseca <
rfon...@cs.brown.edu>
Author: Emre Kiciman and Benjamin Livshits
Paper Title: "AjaxScope: A Platform for Remotely Monitoring the
Client-Side Behavior of Web 2.0 Applications"
Date: In SOSP '07
This paper presents AjaxScope as a tool for monitoring web application
behavior across users, relying on JavaScript rewriting and instant
redeployment to dynamically instrument code. The authors show that
instrumentation policies can be applied for monitoring values, and for
debugging errors like infinite loops and memory leaks. There are a
handful of good ideas in this paper, such as distributed testing (to
monitor the application in a distributed way, so no host gets
overloaded), adaptive instrumentation, and memory monitoring.
AjaxScope has the potential to impact both software deployment and (as
the authors note in their concluding remarks) may only "scratch the
surface" as far as what kinds of policies could be implemented and
applied to improve application performance. The organization of
rewriting points and instructions as 'policy' abstractions seems has a
lot of power, so long as it doesn't introduce too much overhead.
Related work includes ParaDyn, which uses adaptive instrumentation in
parallel programs. Rewriting is used in CoreScript and BrowserShield
for security purposes. The authors suggest that their work is a
merger of these principles (monitoring and rewriting for performance),
and try to underscore their contributions for JavaScript because its
dynamic nature (and the ways it is used in Web programs) make
instrumentation difficult but especially important.
Most of the evaluation in this paper focuses on how specific policies
have improved performance for certain instances of Web content. In
some ways, this is the best they can do, but it is also dubious
because the authors are choosing examples that demonstrate their
points. That said, most of the examples were clear, and the results
of the experiments are well communicated. Figures 8, 9, and 10 don't
include any scale on the X-axis (I know from the written explanation,
but still annoying not to include this). Any time a graph shows
exponential growth (e.g. figure 9), I *definitely* want to know
something about scale and when those numbers take off!
Reproducing these results would be a challenge. The authors are vague
about how they manually select websites to test, and include magic
numbers in the experiment design (e.g. 8 runs to log overhead, to
"account for performance variations" ... How does one trying to
reproduce this know what kind of convergence to look for?).
One question/enhancement idea I have is whether you could use policies
to enforce SLA guarantees: policies could respond to monitored
performance, and rewrite code in sections that are profiled badly.
Or, if the SLA guarantees some maximum overhead for
debugging/monitoring robustness, could we use a policy that decides
how to apply other policies to the code to meet this overhead
requirement?