forked from oracle/graal
-
Notifications
You must be signed in to change notification settings - Fork 2
26.1. Meeting Notes
David Kozak edited this page Jan 27, 2023
·
12 revisions
cd graal/substratevm
mx igv
public class Main {
public static void main(String[] args) {
add(10, 20);
helloWorld();
linearBlockOfCode();
ifElse();
forLoop();
methodCallWithArgs();
}
private static int add(int x, int y) {
return x + y;
}
private static void helloWorld() {
System.out.println("Hello World");
}
private static int linearBlockOfCode() {
int x = getX();
int y = getY();
return x + y;
}
private static int ifElse() {
int x = getX();
int y = getY();
int res;
if (x + y < 100) {
res = x;
} else {
res = y;
}
return res;
}
private static int forLoop() {
int y = 0;
for (int i = 0; i < 100; i++) {
y += 42;
}
return y;
}
static String baseName = "foo";
private static void methodCallWithArgs() {
String methodName = "bar";
int data = 42;
restCall(baseName + "/" + methodName, data);
}
private static void restCall(String s, int data) {
System.out.println("Calling into " + s + " with data " + data);
}
private static int getX() {
return 42;
}
private static int getY() {
return 21;
}
}
cd graal/substratevm
mx build
GRAAL_HOME=$(mx graalvm-home)
# then save the file above somewhere as Main.java
$GRAAL_HOME/bin/javac Main.java # compile it to bytecode
$GRAAL_HOME/bin/javap -p -c Main # look at the bytecode
$GRAAL_HOME/bin/native-image -H:PrintGraph=Network -H:MethodFilter="Main.*" -H:Dump=:1 -H:-InlineBeforeAnalysis Main # compile via native image, dump graphs to IGV
Options
- -H:PrintGraph=Network
- Outputs the graphs directly to IGV instead saving them to files
- -H:MethodFilter="Main.*"
- Which graphs are we interested in?
- -H:Dump=:1
- Controls how detailed output we want, :1 is very high-level, in practise we might need :2 should be enough
- -H:-InlineBeforeAnalysis
- This one does not have to be turned on, it was just to prevent the compiler from being to smart and totally eliminate some of the graphs from the example.
- https://chrisseaton.com/truffleruby/basic-graal-graphs/
- https://www.youtube.com/watch?v=ypETuCHnmxA&ab_channel=ChrisSeaton
- https://www.cs.cornell.edu/courses/cs6120/2020fa/self-guided/
- https://en.wikipedia.org/wiki/List_of_Java_bytecode_instructions
git clone [email protected]:cloudhubs/tms.git
cd tms/cms
mvn -DskipTests package
cd target
unzip cms-0.0.1-SNAPSHOT.jar
cd BOOT-INF
$GRAAL_HOME/bin/native-image -H:+ProphetPlugin -cp "classes:lib/*" dummy
AnalysisFormat - input for the prophet-utils main
{
"microservices": [
{
"baseDir": "$PATH_TO_BOOT-INF",
"basePackage": "edu.baylor.ecs.cms",
"microserviceName": "cms"
},
{
"baseDir": "$PATH_TO_BOOT-INF",
"basePackage": "edu.baylor.ems",
"microserviceName": "ems"
},
{
"baseDir": "$PATH_TO_BOOT-INF",
"basePackage": "baylor.csi",
"microserviceName": "qms"
}
]
}