Skip to content

Commit

Permalink
CRYPTO-2: Create benchmark for Apache Commons Crypto
Browse files Browse the repository at this point in the history
Rebase code

update gitignore file

Add script to support multi-JDK
  • Loading branch information
Ferdinand Xu committed Apr 25, 2016
1 parent 7cefbf2 commit 6ac42af
Show file tree
Hide file tree
Showing 8 changed files with 589 additions and 2 deletions.
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,5 @@ derby.log
dist/
unit-tests.log
/lib/
src/main/resources/com/intel/chimera/native/
src/main/resources/com/intel/chimera/native/*
dependency-reduced-pom.xml
conf/benchmark.properties
24 changes: 24 additions & 0 deletions conf/benchmark.properties.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
warmupIterations 1000
iterations 1000
dataSize 1073741824
operationSize 8192

bufferSize 20
cipherClasses org.apache.commons.crypto.cipher.OpensslCipher,org.apache.commons.crypto.cipher.JceCipher
transformations AES/CTR/NoPadding,AES/CBC/NoPadding
18 changes: 18 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,8 @@ http://maven.apache.org/maven-v4_0_0.xsd">
<commons.jira.id>CRYPTO</commons.jira.id>
<commons.jira.pid>12320024</commons.jira.pid>
<commons.changes.onlyCurrentVersion>true</commons.changes.onlyCurrentVersion>
<javac.version>1.6</javac.version>
<maven-shade-plugin.version>2.4.3</maven-shade-plugin.version>
</properties>
<profiles>
<profile>
Expand Down Expand Up @@ -332,6 +334,22 @@ http://maven.apache.org/maven-v4_0_0.xsd">
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>${maven-shade-plugin.version}</version>
<configuration>
<!-- put your configurations here -->
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
Expand Down
35 changes: 35 additions & 0 deletions sbin/run-benchmark.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#!/bin/bash
set -x
if [ "$#" -ne 2 ];then
echo "Usage: sh run-benchmark.sh path/to/JDKwithoutAESNIsupport path/to/JDKwithAESNIsupport \n JDK7u45 or higher supports AES-NI."
exit 1
fi
echo "This benchmark will evaluate the performance of Chimera in different transfomations, ciphers and JDK versions"

if [ ! -f "conf/benchmark.properties" ];then
echo "Not able to find the benchmark.propety, will use default propety instead"
cp conf/benchmark.properties.template conf/benchmark.properties
fi

CRYPTO_JAR=`find . -name commons-crypto*.jar`

echo "Using JDK in path $1 to evalue the performance"
$1/bin/java -Djava.library.path="$PATH" -cp $CRYPTO_JAR:target/test-classes org.apache.commons.crypto.benchmark.CommonsCryptoBenchmark conf/benchmark.properties
echo "Using JDK in path $2 to evaluate the performance"
$2/bin/java -Djava.library.path="$PATH" -cp $CRYPTO_JAR:target/test-classes org.apache.commons.crypto.benchmark.CommonsCryptoBenchmark conf/benchmark.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p/>
* http://www.apache.org/licenses/LICENSE-2.0
* <p/>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.crypto.benchmark;

import org.apache.commons.crypto.benchmark.option.BenchmarkOption;
import org.apache.commons.crypto.benchmark.option.StreamOption;
import org.apache.commons.crypto.cipher.CipherTransformation;

import java.io.*;
import java.util.Properties;

public class CommonsCryptoBenchmark {
static String defaultConfigPath = "./conf/benchmark.properties";

public static void main(String[] args) throws IOException {
Properties prop = new Properties();
String propFileName = "benchmark.properties";

if (args != null && args.length != 0 && args.length != 1 && args.length != 4) {
System.out.println(
"Usage: java -Djava.library.path=\"$PATH\" -cp path/to/commons-crypto-[version].jar:path/to/target/test-classes/ org.apache.commons.crypto.benchmark.CommonsCryptoBenchmark [warmupIterations] [iterations] [dataSize] [operationSize] or java -Djava.library.path=\"$PATH\" -cp commons-crypto-[version].jar:path/to/Chimera/target/test-classes/ org.apache.commons.crypto.benchmark.CommonsCryptoBenchmark [path/to/configuration]");
System.out.println("args[0]: " + args[0]);
System.exit(1);
}

String confFilePath = defaultConfigPath;
if (args.length == 1) {
System.out
.println("Use configurations specified by a configuration file.");
confFilePath = args[0];
}

File configFile = new File(confFilePath);
InputStream inputStream;

if (args.length == 0 || args.length == 1) {
if (configFile.exists()) {
inputStream = new FileInputStream(configFile);
} else {
System.out.println(
"can not find the configuration file under the current path");
inputStream = CommonsCryptoBenchmark.class.getClassLoader()
.getResourceAsStream(propFileName);
}
prop.load(inputStream);
}

// Benchmark related configurations
BenchmarkOption.CipherBenchmarkOptionBuilder cipherBenchmarkOptionBuilder
= BenchmarkOption.newBuilder();
if(args.length == 1){
if (prop.containsKey("warmupIterations")) {
cipherBenchmarkOptionBuilder.buildWarmupIterations(Integer
.parseInt(prop.getProperty("warmupIterations")));
}
if (prop.containsKey("iterations")) {
cipherBenchmarkOptionBuilder.buildIterations(Integer
.parseInt(prop.getProperty("iterations")));
}
if (prop.containsKey("dataSize")) {
cipherBenchmarkOptionBuilder.buildDataSize(Integer.parseInt(
prop.getProperty("dataSize")));
}
if (prop.containsKey("operationSize")) {
cipherBenchmarkOptionBuilder.buildOperationSize(Integer
.parseInt(prop.getProperty("operationSize")));
}
}else{
// specify by cmd
cipherBenchmarkOptionBuilder.buildWarmupIterations(Integer
.parseInt(args[0]));
cipherBenchmarkOptionBuilder.buildIterations(Integer
.parseInt(args[1]));
cipherBenchmarkOptionBuilder.buildDataSize(Integer
.parseInt(args[2]));
cipherBenchmarkOptionBuilder.buildOperationSize(Integer
.parseInt(args[3]));
}

BenchmarkOption benchmarkOption = cipherBenchmarkOptionBuilder.create();

System.out.println("current benchmarkOption option is " + benchmarkOption);
// Stream related configuration
String transformations = (prop.contains("transformations")) ? prop
.getProperty(
"transformations") : ("AES/CTR/NoPadding,AES/CBC/NoPadding");
String cipherClazzNames = (prop.contains("cipherClasses")) ? prop
.getProperty("cipherClasses") : ("org.apache.commons.crypto.cipher" +
".OpensslCipher,org.apache.commons.crypto.cipher.JceCipher");
int bufferSize = (prop.containsKey("bufferSize")) ? Integer
.parseInt(prop.getProperty("bufferSize")) : (512 * 1024);
for (String t : transformations.split(",")) {
for(String c : cipherClazzNames.split(",")){
CipherTransformation transformation = CipherTransformation.fromName(t);
StreamOption streamOption = StreamOption.newBuilder()
.setBufferSize(bufferSize)
.setCipherTransformation(transformation)
.setCipherClazzName(c).build();
System.out.println("current stream option is " + streamOption);
CryptoStreamBenchmark cryptoStreamBenchmark = new CryptoStreamBenchmark(
benchmarkOption, streamOption);
cryptoStreamBenchmark.getBenchMarkData();
}
}
}
}
Loading

0 comments on commit 6ac42af

Please sign in to comment.