mirror of
https://github.com/pgpainless/pgpainless.git
synced 2024-12-23 03:17:58 +01:00
Add RNGPerformanceTest to help diagnose performance bottlenecks
Related to https://github.com/pgpainless/pgpainless/issues/309
This commit is contained in:
parent
3cd5a95d89
commit
3a33bb126a
1 changed files with 88 additions and 0 deletions
|
@ -0,0 +1,88 @@
|
|||
// SPDX-FileCopyrightText: 2022 Paul Schaub <vanitasvitae@fsfe.org>
|
||||
//
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package investigations;
|
||||
|
||||
import org.bouncycastle.crypto.digests.SHA1Digest;
|
||||
import org.bouncycastle.crypto.digests.SHA256Digest;
|
||||
import org.bouncycastle.crypto.prng.DigestRandomGenerator;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.platform.commons.logging.Logger;
|
||||
import org.junit.platform.commons.logging.LoggerFactory;
|
||||
|
||||
import java.security.SecureRandom;
|
||||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
import java.util.Random;
|
||||
|
||||
/**
|
||||
* Evaluate performance of random number generators.
|
||||
*/
|
||||
public class RNGPerformanceTest {
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(RNGPerformanceTest.class);
|
||||
private static final int bytesInMebiByte = 1024 * 1024;
|
||||
|
||||
@Test
|
||||
public void evaluateRandomPerformance() {
|
||||
Random random = new Random();
|
||||
byte[] bytes = new byte[bytesInMebiByte];
|
||||
|
||||
Instant start = Instant.now();
|
||||
random.nextBytes(bytes);
|
||||
Instant end = Instant.now();
|
||||
|
||||
Duration duration = Duration.between(start, end);
|
||||
LOGGER.info(() -> String.format(
|
||||
"Random.nextBytes() took %s milliseconds to generate 1 MiB of data",
|
||||
duration.toMillis()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void evaluateSecureRandomPerformance() {
|
||||
SecureRandom random = new SecureRandom();
|
||||
byte[] bytes = new byte[bytesInMebiByte];
|
||||
|
||||
Instant start = Instant.now();
|
||||
random.nextBytes(bytes);
|
||||
Instant end = Instant.now();
|
||||
|
||||
Duration duration = Duration.between(start, end);
|
||||
LOGGER.info(() -> String.format(
|
||||
"SecureRandom.nextBytes() took %s milliseconds to generate 1 MiB of data",
|
||||
duration.toMillis()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void evaluateSHA256BasedDigestRandomGeneratorPerformance() {
|
||||
SHA256Digest digest = new SHA256Digest();
|
||||
DigestRandomGenerator random = new DigestRandomGenerator(digest);
|
||||
byte[] bytes = new byte[bytesInMebiByte];
|
||||
|
||||
Instant start = Instant.now();
|
||||
random.nextBytes(bytes);
|
||||
Instant end = Instant.now();
|
||||
|
||||
Duration duration = Duration.between(start, end);
|
||||
LOGGER.info(() -> String.format(
|
||||
"SHA256-based DigestRandomGenerator.nextBytes() took %s milliseconds to generate 1 MiB of data",
|
||||
duration.toMillis()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void evaluateSHA1BasedDigestRandomGeneratorPerformance() {
|
||||
SHA1Digest digest = new SHA1Digest();
|
||||
DigestRandomGenerator random = new DigestRandomGenerator(digest);
|
||||
byte[] bytes = new byte[bytesInMebiByte];
|
||||
|
||||
Instant start = Instant.now();
|
||||
random.nextBytes(bytes);
|
||||
Instant end = Instant.now();
|
||||
|
||||
Duration duration = Duration.between(start, end);
|
||||
LOGGER.info(() -> String.format(
|
||||
"SHA1-based DigestRandomGenerator.nextBytes() took %s milliseconds to generate 1 MiB of data",
|
||||
duration.toMillis()));
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue