Move benchmarks into core

This commit is contained in:
str4d
2017-09-08 11:16:40 +00:00
parent 7346ce1c89
commit 3d24cc9e92
7 changed files with 66 additions and 112 deletions

View File

@@ -0,0 +1,68 @@
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 AESBench {
I2PAppContext ctx = I2PAppContext.getGlobalContext();
SessionKey key;
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);
ctx.aes().encrypt(origPT, 0, origCT, 0, key, iv, len);
}
@Benchmark
public void encrypt() {
ctx.aes().encrypt(origPT, 0, encrypted, 0, key, iv, len);
}
@Benchmark
public void decrypt() {
ctx.aes().decrypt(origCT, 0, decrypted, 0, key, iv, len);
}
public static void main(String args[]) throws RunnerException {
Options opt = new OptionsBuilder()
.include(AESBench.class.getSimpleName())
.build();
new Runner(opt).run();
}
}

View 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.PrivateKey;
import net.i2p.data.PublicKey;
@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 ElGamalBench {
I2PAppContext ctx = I2PAppContext.getGlobalContext();
PublicKey pubkey;
PrivateKey privkey;
byte[] origPT;
byte[] origCT;
@Setup
public void prepare() {
Object pair[] = KeyGenerator.getInstance().generatePKIKeypair();
pubkey = (PublicKey) pair[0];
privkey = (PrivateKey) pair[1];
origPT = new byte[222];
ctx.random().nextBytes(origPT);
origCT = ctx.elGamalEngine().encrypt(origPT, pubkey);
}
@Benchmark
public Object[] keygen() {
return KeyGenerator.getInstance().generatePKIKeypair();
}
@Benchmark
public byte[] encrypt() {
return ctx.elGamalEngine().encrypt(origPT, pubkey);
}
@Benchmark
public byte[] decrypt() {
return ctx.elGamalEngine().decrypt(origCT, privkey);
}
public static void main(String args[]) throws RunnerException {
Options opt = new OptionsBuilder()
.include(ElGamalBench.class.getSimpleName())
.build();
new Runner(opt).run();
}
}

View File

@@ -0,0 +1,78 @@
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.Hash;
/**
* Test the JVM's implementation 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 SHA256Bench {
I2PAppContext ctx = I2PAppContext.getGlobalContext();
@Param({"40", "387", "10240"})
public int len;
byte[] data;
@Setup
public void prepare() {
data = new byte[len];
ctx.random().nextBytes(data);
}
@Benchmark
public Hash calculateHash() {
return ctx.sha().calculateHash(data);
}
public static void main(String args[]) throws RunnerException {
Options opt = new OptionsBuilder()
.include(SHA256Bench.class.getSimpleName())
.build();
new Runner(opt).run();
}
}