unanticipated partial behavioral reflection

Post on 11-May-2015

611 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

"Unanticipated Partial Behavioral Reflection"Dynamic, unanticipated adaptation of running systems is of interest in a variety of situations, ranging from functional upgrades to on-the-fly debugging or monitoring of critical applications. In this paper we study a particular form of computational reflection, called unanticipated partial behavioral reflection, which is particularly well-suited for unanticipated adaptation of real-world systems. Our proposal combines the dynamicity of unanticipated reflection, i.e., reflection that does not require preparation of the code of any sort, and the selectivity and efficiency of partial behavioral reflection. First, we propose unanticipated partial behavioral reflection which enables the developer to precisely select the required reifications, to flexibly engineer the metalevel and to introduce the meta behavior dynamically. Second, we present a system supporting unanticipated partial behavioral reflection in Squeak Smalltalk, called Geppetto, and illustrate its use with a concrete example of a Seaside web application. Benchmarks validate the applicability of our proposal as an extension to the standard reflective abilities of Smalltalk.ESUG, 04.09.2006

TRANSCRIPT

© Marcus Denker

Unanticipated PartialBehavioral Reflection

David RöthlisbergerMarcus DenkerEric Tanter

© Marcus Denker

Roadmap

> Example> Behavioral Reflection

— Smalltalk / Metaclasstalk— Unanticipated Reflection— Partial Reflection

> Unanticipated Partial Behavioral Reflection> Example revisited> Benchmarks> Conclusion

© Marcus Denker

Running Example

> Typical web application (e.g. Wiki)

> Shows performance problem under high load

> Goals: — Profile and fix the problem— No restart / interruption of service

© Marcus Denker

Towards a Solution

> Analyse the problem— Install profiler— Analyze— Retract profiler

> Solve the problem— Introduce a caching mechanism— Experiment with multiple solutions

© Marcus Denker

Reflection

> Reflection: computation about computation— base level / meta level— causally connected

> Structural Reflection — Reification of structure

> Behavioral Reflection— Reification of execution

© Marcus Denker

Unanticipated Reflection

> “Unanticipated Use” means: — No need to know in advance (and plan for) reflection— Possible to be done at runtime

> Java: reflection only at load time— No runtime change in general— Need to compile in hooks for reflection

> Smalltalk reflection is unanticipated— taken for granted. But it’s quite cool!

© Marcus Denker

Reflection in Smalltalk

> Structural Reflection— Classes / Methods are objects— Can be changed at runtime

> Behavioral Reflection— No model of execution below method body— message sending / variable access hard coded by VM— #doesNotUnderstand / MethodWrappers

> Reflective capabilities of Smalltalk should be improved!

© Marcus Denker

MetaclassTalk

> Extends the Smalltalk metaclass model

> Metaclass defines— message lookup— access to instance variables

> Problems:— Reflection only controllable at class boundaries— No fine-grained selection (e.g. single operations)— Protocol between base and meta level is fixed

© Marcus Denker

Partial Reflection

> Hooksets: collection of operation occurrences> Links

— Bind hooksets to metaobjects— Define Protocol between base and meta

> Goals— Highly selective reification— Flexiblel metalevel engineering

– Protocol specification– Cross-cutting hooksets

activation

condition

hookset

metaobject

links

© Marcus Denker

Geppetto

> Partial Behavioral Reflection pioneered in Java— Code transformation at load time— Not unanticipated (it’s Java...)

> Geppetto: Partial Behavioral Reflection for Smalltalk

> For Squeak 3.9 with ByteSurgeon— but portable to other dialects

> Let’s see an example!

© Marcus Denker

Solving the Problem

> Operation: — Method Execution (around)

> Hookset: — All execution operations in the wiki package

> Metaobject: — A profiling tool activation

condition

hookset

metaobject

links

© Marcus Denker

Solving the Problem: Hookset + Link

> Hookset

allExecs := Hookset new. allExecs inPackage: ’Wiki’; operation: MethodEval.

profile := Link id: #profiler hookset: allExecs metaobject: Profiler new.

profile control: Control around.

> Link

© Marcus Denker

Solving the Problem: Protocol

profile callDescriptor: (CallDescriptor

selector: #profileMethod:in:withArguments: parameters: {Parameter selector.

Parameter self. Parameter arguments.}

passingMode: PassingMode plain).

> Protocol

> Install / Retract

profile install.profile uninstall.

© Marcus Denker

Solving the Problem: Caching

> Operation: — Method Execution (around)

> Hookset: — The one slow method (#toughWorks:)

> Metaobject: — A Cache activation

condition

hookset

metaobject

links

© Marcus Denker

Caching II

toughWorks := Hookset new. toughWorks inClass: Worker; inMethod: #toughWork:;

operation: MethodEval.

> Hookset:

> Link:cache := Link id: #cache

hookset: toughWorks metaobject: Cache new.

cache control: Control around.

cache callDescriptor:(CallDescriptor selector: #cacheFor: parameters: {Parameter arg1} passingMode: PassingMode plain).

© Marcus Denker

Geppetto

> Operations: — MethodEval (like MethodWrappers)— MsgSend, InstVarAccess, TempAccess

> Control— Before, After, Around, Replace

> Activation condition per Link

© Marcus Denker

Benchmarks I

> Slowdown for reification of message send

System Slowdown

Geppetto 10.85

Iguana/J 24

Metaclasstalk 20

© Marcus Denker

Benchmarks II

Metaclasstalk(ms)

Geppetto(ms)

Speedup

message send

108 46 2.3x

instance var read

272 92 2.9x

> Geppetto Vs. Metaclasstalk

© Marcus Denker

Future Work

> Pluggable backends— Bytecode— AST based transformation— VM Support

> Use for typical ByteSurgeon based projects— e.g. Tracing, Unstuck-Debugger

> Experiment with advanced Scoping

© Marcus Denker

Conclusion

> Example for the need of Partial Behavioral Reflection> Overview of Geppetto> Solution of the Example> Benchmarks

© Marcus Denker

Conclusion

> Example for the need of Partial Behavioral Reflection> Overview of Geppetto> Solution of the Example> Benchmarks

Questions?

top related