Skip to content

LICM getting started

Fernando Miguel Carvalho edited this page May 10, 2013 · 3 revisions

The LICM ( lightweight identification of captured memory ) is a new lightweight runtime technique to identify captured memory (memory allocated inside a transaction that cannot escape (i.e., is captured by) its allocating transaction), for which no STM barriers are needed.
This technique requires two new features that were not available in the Deuce STM: 1) enhance the object model with transactional metadata; 2) additional filtering to the standard behavior of the STM barriers.

These two features are included without any change or extension to the Deuce API and guarantying retro-compatibility with existing STMs implementations for Deuce. Moreover, it is possible to enhance any existing STM with the LICM without requiring either its recompilation or any modification to its source-code.

To run an application with an existing STM and performing the capture analysis, you just need to include the extra system property specifying the corresponding delegator : -Dorg.deuce.delegator=org.deuce.transaction.capmem.ContextDelegatorCapturedState. Furthermore, to include also arrays objects in the capture analysis you should provide the additional parameter: -Dorg.deuce.capmem=full. In the following we present an example of executing Vacation instrumented by Deuce and running the LSA STM with capture analysis.

java -javaagent:bin/deuceAgent.jar 
  -Dorg.deuce.delegator=org.deuce.transaction.capmem.ContextDelegatorCapturedState
  -Dorg.deuce.capmem=full
  jstamp.vacation.Vacation -c 8 -n 256 -q 90 -u 98 -r 262144 -t 65536

For further details you can see LICM implementation details. The poster presented in PPoPP13 gives an overview about the general concepts and architecture.

Clone this wiki locally