Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use Class Data Sharing for Java actions #2836

Closed
alexkli opened this issue Oct 5, 2017 · 4 comments
Closed

Use Class Data Sharing for Java actions #2836

alexkli opened this issue Oct 5, 2017 · 4 comments

Comments

@alexkli
Copy link
Contributor

alexkli commented Oct 5, 2017

As described in this article, Java has a feature called class data sharing (CDS) 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 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
Copy link
Member

There should be benefits just from enabling shared classes for the core libraries + framework code (not specific to any user action).

@alexkli
Copy link
Contributor Author

alexkli commented Oct 5, 2017

Yes, that's what I meant with "basic CDS" (as opposed to AppCDS). It could include the java action framework code.

@rabbah
Copy link
Member

rabbah commented Oct 6, 2017

The Java runtime is moving to a new repository - when that's complete, we'll move this issue there.

FYI @csantanapr.

@rabbah rabbah changed the title [java runtime] Use Class Data Sharing Use Class Data Sharing for Java actions Oct 6, 2017
@rabbah
Copy link
Member

rabbah commented Nov 25, 2017

Issue moved to apache/incubator-openwhisk-runtime-java #7 via ZenHub

@rabbah rabbah closed this as completed Nov 25, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants