rabbah opened a new issue #7: Use Class Data Sharing for Java actions
URL: https://github.com/apache/incubator-openwhisk-runtime-java/issues/7
 
 
   @alexkli commented on [Thu Oct 05 
2017](https://github.com/apache/incubator-openwhisk/issues/2836)
   
   As described in [this 
article](http://mjg123.github.io/2017/10/02/JVM-startup.html), Java has a 
feature called [class data sharing 
(CDS)](https://docs.oracle.com/javase/8/docs/technotes/guides/vm/class-data-sharing.html)
 that allows to share common class data for different JVMs.
   
   This seems to be available since Java 5 (for JVM & JDK classes), and since 
Java 8 (u40) support application code as well (AppCDS).
   
   The current OW java action runtime [doesn't do 
anything](https://github.com/apache/incubator-openwhisk/blob/c036e0d1ee0be312dc5cc43cb2263ab3f0073b87/core/javaAction/Dockerfile#L38)
 like that yet.
   
   Benefits:
   * faster JVM startup time: from 120ms to 90ms for a simple hello world 
program (in that article)
   * reduces memory footprint when running multiple JVMs, apparently works in a 
containerized environment, should be great within OpenWhisk
   
   There are two steps for the basic CDS AFAICS:
   * prepare the shared class files once via `java -Xshare:dump`: could be done 
during the docker image build (?)
   * call the JVM with the flag `-Xshare:on` to enable CDS (there is some talk 
about `-Xshare:auto` becoming the default which I assume would enable it 
automatically if the prepared files are present)
   
   Leveraging AppCDS in OpenWhisk would mean to include the action Java code, 
and that might be tricky, as that can only be shared between containers with 
the same action code IIUC.
   
   Same for Ahead-Of-Time compilation (AOT), new in Java 9, mentioned in the 
article as well, which has a costly pre-compilation step (that should include 
the application aka action code), not sure how that could be done within OW. It 
would be beneficial if an action needs to scale up, i.e. you are starting many 
new Java containers with a particular action and you want to get the fastest 
startup time. But maybe pre-warming makes this less useful. One would have to 
be able to run that action specific pre-compilation up front, and that might 
require to embed it in the docker image IIUC, which in turn would require 
building it dynamically from OW, which sounds complex.
   
   ---
   
   @dgrove-oss commented on [Thu Oct 05 
2017](https://github.com/apache/incubator-openwhisk/issues/2836#issuecomment-334563597)
   
   There should be benefits just from enabling shared classes for the core 
libraries + framework code (not specific to any user action).
   
   ---
   
   @alexkli commented on [Thu Oct 05 
2017](https://github.com/apache/incubator-openwhisk/issues/2836#issuecomment-334565823)
   
   Yes, that's what I meant with "basic CDS" (as opposed to AppCDS). It could 
include the [java action framework 
code](https://github.com/apache/incubator-openwhisk/tree/c036e0d1ee0be312dc5cc43cb2263ab3f0073b87/core/javaAction/proxy/src/main/java/openwhisk/java/action).
   
   ---
   
   @rabbah commented on [Thu Oct 05 
2017](https://github.com/apache/incubator-openwhisk/issues/2836#issuecomment-334640979)
   
   The Java runtime is moving to a new repository - when that's complete, we'll 
move this issue there.
   
   FYI @csantanapr.
   
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to