forked from I2P_Developers/i2p.i2p
Add benchmarks for AES and SHA-256
This commit is contained in:
70
benchmarks/java/src/net/i2p/crypto/AESBenchmarks.java
Normal file
70
benchmarks/java/src/net/i2p/crypto/AESBenchmarks.java
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
package net.i2p.crypto;
|
||||||
|
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import org.openjdk.jmh.annotations.Benchmark;
|
||||||
|
import org.openjdk.jmh.annotations.BenchmarkMode;
|
||||||
|
import org.openjdk.jmh.annotations.Fork;
|
||||||
|
import org.openjdk.jmh.annotations.Measurement;
|
||||||
|
import org.openjdk.jmh.annotations.Mode;
|
||||||
|
import org.openjdk.jmh.annotations.OutputTimeUnit;
|
||||||
|
import org.openjdk.jmh.annotations.Param;
|
||||||
|
import org.openjdk.jmh.annotations.Scope;
|
||||||
|
import org.openjdk.jmh.annotations.Setup;
|
||||||
|
import org.openjdk.jmh.annotations.State;
|
||||||
|
import org.openjdk.jmh.annotations.Warmup;
|
||||||
|
import org.openjdk.jmh.runner.Runner;
|
||||||
|
import org.openjdk.jmh.runner.RunnerException;
|
||||||
|
import org.openjdk.jmh.runner.options.Options;
|
||||||
|
import org.openjdk.jmh.runner.options.OptionsBuilder;
|
||||||
|
|
||||||
|
import net.i2p.I2PAppContext;
|
||||||
|
import net.i2p.data.DataHelper;
|
||||||
|
import net.i2p.data.SessionKey;
|
||||||
|
|
||||||
|
@BenchmarkMode(Mode.AverageTime)
|
||||||
|
@OutputTimeUnit(TimeUnit.MICROSECONDS)
|
||||||
|
@Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
|
||||||
|
@Measurement(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS)
|
||||||
|
@Fork(1)
|
||||||
|
@State(Scope.Benchmark)
|
||||||
|
public class AESBenchmarks {
|
||||||
|
I2PAppContext ctx = I2PAppContext.getGlobalContext();
|
||||||
|
SessionKey key;
|
||||||
|
CryptixAESEngine aes;
|
||||||
|
byte[] iv = new byte[16];
|
||||||
|
byte[] origPT = new byte[1024];
|
||||||
|
byte[] origCT = new byte[1024];
|
||||||
|
byte[] encrypted = new byte[1024];
|
||||||
|
byte[] decrypted = new byte[1024];
|
||||||
|
|
||||||
|
@Param({"512", "768", "1024"})
|
||||||
|
public int len;
|
||||||
|
|
||||||
|
@Setup
|
||||||
|
public void prepare() {
|
||||||
|
key = ctx.keyGenerator().generateSessionKey();
|
||||||
|
ctx.random().nextBytes(iv);
|
||||||
|
ctx.random().nextBytes(origPT);
|
||||||
|
aes = new CryptixAESEngine(ctx);
|
||||||
|
aes.encrypt(origPT, 0, origCT, 0, key, iv, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Benchmark
|
||||||
|
public void encrypt() {
|
||||||
|
aes.encrypt(origPT, 0, encrypted, 0, key, iv, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Benchmark
|
||||||
|
public void decrypt() {
|
||||||
|
aes.decrypt(origCT, 0, decrypted, 0, key, iv, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String args[]) throws RunnerException {
|
||||||
|
Options opt = new OptionsBuilder()
|
||||||
|
.include(AESBenchmarks.class.getSimpleName())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
new Runner(opt).run();
|
||||||
|
}
|
||||||
|
}
|
81
benchmarks/java/src/net/i2p/crypto/SHA256Benchmarks.java
Normal file
81
benchmarks/java/src/net/i2p/crypto/SHA256Benchmarks.java
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
package net.i2p.crypto;
|
||||||
|
|
||||||
|
import java.security.MessageDigest;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.util.Random;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import org.openjdk.jmh.annotations.Benchmark;
|
||||||
|
import org.openjdk.jmh.annotations.BenchmarkMode;
|
||||||
|
import org.openjdk.jmh.annotations.Fork;
|
||||||
|
import org.openjdk.jmh.annotations.Measurement;
|
||||||
|
import org.openjdk.jmh.annotations.Mode;
|
||||||
|
import org.openjdk.jmh.annotations.OutputTimeUnit;
|
||||||
|
import org.openjdk.jmh.annotations.Param;
|
||||||
|
import org.openjdk.jmh.annotations.Scope;
|
||||||
|
import org.openjdk.jmh.annotations.Setup;
|
||||||
|
import org.openjdk.jmh.annotations.State;
|
||||||
|
import org.openjdk.jmh.annotations.Warmup;
|
||||||
|
import org.openjdk.jmh.runner.Runner;
|
||||||
|
import org.openjdk.jmh.runner.RunnerException;
|
||||||
|
import org.openjdk.jmh.runner.options.Options;
|
||||||
|
import org.openjdk.jmh.runner.options.OptionsBuilder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the GNU and the JVM's implementations for speed
|
||||||
|
*
|
||||||
|
* Old results (2011-05):
|
||||||
|
* <ul>
|
||||||
|
* <li>eeepc Atom
|
||||||
|
* <li>100,000 runs
|
||||||
|
* <li>MessageDigest.getInstance time was included
|
||||||
|
* <li>One println included
|
||||||
|
* <li>Also shows GNU impl time (removed in 0.9.28)
|
||||||
|
* </ul><pre>
|
||||||
|
* JVM strlen GNU ms JVM ms
|
||||||
|
* Oracle 387 3861 3565
|
||||||
|
* Oracle 40 825 635
|
||||||
|
* Harmony 387 8082 5158
|
||||||
|
* Harmony 40 4137 1753
|
||||||
|
* JamVM 387 36301 34100
|
||||||
|
* JamVM 40 7022 6016
|
||||||
|
* gij 387 125833 4342
|
||||||
|
* gij 40 22417 988
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@BenchmarkMode(Mode.AverageTime)
|
||||||
|
@OutputTimeUnit(TimeUnit.MICROSECONDS)
|
||||||
|
@Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
|
||||||
|
@Measurement(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS)
|
||||||
|
@Fork(1)
|
||||||
|
@State(Scope.Benchmark)
|
||||||
|
public class SHA256Benchmarks {
|
||||||
|
MessageDigest md;
|
||||||
|
|
||||||
|
@Param({"40", "387", "10240"})
|
||||||
|
public int len;
|
||||||
|
|
||||||
|
byte[] data;
|
||||||
|
|
||||||
|
@Setup
|
||||||
|
public void prepare() throws NoSuchAlgorithmException {
|
||||||
|
md = MessageDigest.getInstance("SHA-256");
|
||||||
|
data = new byte[len];
|
||||||
|
Random r = new Random();
|
||||||
|
r.nextBytes(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Benchmark
|
||||||
|
public byte[] digest() {
|
||||||
|
md.reset();
|
||||||
|
return md.digest(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String args[]) throws RunnerException {
|
||||||
|
Options opt = new OptionsBuilder()
|
||||||
|
.include(SHA256Benchmarks.class.getSimpleName())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
new Runner(opt).run();
|
||||||
|
}
|
||||||
|
}
|
@ -92,63 +92,4 @@ public final class SHA256Generator {
|
|||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//private static final int RUNS = 100000;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test the GNU and the JVM's implementations for speed
|
|
||||||
*
|
|
||||||
* Results: 2011-05 eeepc Atom
|
|
||||||
* <pre>
|
|
||||||
* JVM strlen GNU ms JVM ms
|
|
||||||
* Oracle 387 3861 3565
|
|
||||||
* Oracle 40 825 635
|
|
||||||
* Harmony 387 8082 5158
|
|
||||||
* Harmony 40 4137 1753
|
|
||||||
* JamVM 387 36301 34100
|
|
||||||
* JamVM 40 7022 6016
|
|
||||||
* gij 387 125833 4342
|
|
||||||
* gij 40 22417 988
|
|
||||||
* </pre>
|
|
||||||
*/
|
|
||||||
/****
|
|
||||||
public static void main(String args[]) {
|
|
||||||
if (args.length <= 0) {
|
|
||||||
System.err.println("Usage: SHA256Generator string");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
byte[] data = args[0].getBytes();
|
|
||||||
Sha256Standalone gnu = new Sha256Standalone();
|
|
||||||
long start = System.currentTimeMillis();
|
|
||||||
for (int i = 0; i < RUNS; i++) {
|
|
||||||
gnu.update(data, 0, data.length);
|
|
||||||
byte[] sha = gnu.digest();
|
|
||||||
if (i == 0)
|
|
||||||
System.out.println("SHA256 [" + args[0] + "] = [" + Base64.encode(sha) + "]");
|
|
||||||
gnu.reset();
|
|
||||||
}
|
|
||||||
long time = System.currentTimeMillis() - start;
|
|
||||||
System.out.println("Time for " + RUNS + " SHA-256 computations:");
|
|
||||||
System.out.println("GNU time (ms): " + time);
|
|
||||||
|
|
||||||
start = System.currentTimeMillis();
|
|
||||||
MessageDigest md;
|
|
||||||
try {
|
|
||||||
md = MessageDigest.getInstance("SHA-256");
|
|
||||||
} catch (NoSuchAlgorithmException e) {
|
|
||||||
System.err.println("Fatal: " + e);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
for (int i = 0; i < RUNS; i++) {
|
|
||||||
md.reset();
|
|
||||||
byte[] sha = md.digest(data);
|
|
||||||
if (i == 0)
|
|
||||||
System.out.println("SHA256 [" + args[0] + "] = [" + Base64.encode(sha) + "]");
|
|
||||||
}
|
|
||||||
time = System.currentTimeMillis() - start;
|
|
||||||
|
|
||||||
System.out.println("JVM time (ms): " + time);
|
|
||||||
}
|
|
||||||
****/
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user