Hi all,
I am playing around with the resiliency of APGAS. I wondered about
relative high times for manage a place failure. For comparision, I wrote
a simple program in X10 and APGAS. Both are attached. The results show
significant difference.
Every experiment was run with 4 places. X10 and APGAS are deployed from
the official git repository.
Native X10 with X10_RESILIENT_MODE=1
without crash: 0.003
with crash: 0.015
Managed X10 with Hazelcast 3.3.1 and X10_RESILIENT_MODE=1
without crash: 0.34
with crash: 0.74
APGAS with Hazelcast with Hazelcast 3.6.3 and -Dapgas.serialization=java
-Dapgas.resilient=true -Dapgas.compact=false
without crash: 0.86
with crash: very varying: 8-38
APGAS with Hazelcast with Hazelcast 3.6.3 and -Dapgas.serialization=java
-Dapgas.resilient=true -Dapgas.compact=true
without crash: 0.8
with crash: very varying: 8-31
APGAS with Hazelcast with Hazelcast 3.7 and -Dapgas.serialization=java
-Dapgas.resilient=true -Dapgas.compact=false
without crash: 0.77
with crash: 5.7 or 11.33 (50:50)
APGAS with Hazelcast with Hazelcast 3.7 and -Dapgas.serialization=java
-Dapgas.resilient=true -Dapgas.compact=true
without crash: 0.74
with crash: 5.7 or 11.33 (50:50)
Managed X10 absorbs a failure significantly better than APGAS. However,
Managed X10 uses Hazelcast 3.3.1 and (official) APGAS uses Hazelcast
3.6.3. What causes the differences?
A few days ago Hazelcast was released in version 3.7. In my experiments,
it performs better.
What purpose has "apgas.compact=true"? Should APGAS perform better with it?
Are there other options to improve APGAS's performance at a place failure?
Thanks and cheers
--
Jonas Posner
Universitaet Kassel
Fachbereich 16 Elektrotechnik/Informatik
Fachgebiet Programmiersprachen/-methodik
Wilhelmshoeher Allee 71-73
34121 Kassel, Germany
Phone: +49 (0)561 804-6498
Fax: +49 (0)561 804-6219
mailto: jonas.pos...@uni-kassel.de
www.uni-kassel.de
import apgas.Configuration;
import apgas.DeadPlacesException;
import apgas.Place;
import static apgas.Constructs.*;
public class MessCrashingTime {
public static void main (String[] args) {
boolean crash = false;
try {
crash = Boolean.parseBoolean(args[0]);
} catch (final Exception e) {
}
System.out.println(places());
Long time = System.nanoTime();
finish(() -> {
for (Place p : places()) {
at(p, () -> {
System.out.println(here() + " works fine");
});
}
});
if (crash) {
try {
at(place(1), () -> {
System.exit(42);
});
} catch (DeadPlacesException e) {
}
}
finish(() -> {
for (Place p : places()) {
at(p, () -> {
System.out.println(here() + " works fine");
});
}
});
time = System.nanoTime() - time;
System.out.println("time: " + (time / 1e9));
}
}
public class MessCrashingTime {
public static def main(args:Rail[String]) {
var crash:boolean = false;
if (args.size > 0) {
crash = Boolean.parse(args(0));
}
var time:Long;
time = System.nanoTime();
finish for (p in Place.places()) {
at (p) async Console.OUT.println(p + " works fine");
}
if (crash) {
try
{
at (Place(1))
{
System.killHere();
}
}
catch (val t:CheckedThrowable)
{
t.printStackTrace();
}
}
finish for (p in Place.places()) {
at (p) async Console.OUT.println(p + " works fine");
}
time = System.nanoTime() - time;
Console.OUT.println("time: " + (time / 1E9));
}
}
------------------------------------------------------------------------------
_______________________________________________
X10-users mailing list
X10-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/x10-users