in grpc-gcp-benchmarks/src/benchmarkTest/java/SpannerClientTestCases.java [203:254]
private void runTest(Func func) throws InterruptedException {
List<Long> result = new CopyOnWriteArrayList<>();
List<Thread> threads = new ArrayList<>();
if (numOfThreads > 1) {
for (int t = 0; t < numOfThreads; t++) {
final int threadNum = t + 1;
threads.add(new Thread(() -> func.operate(threadNum, result)));
}
}
long start = System.currentTimeMillis();
if (numOfThreads > 1) {
for (Thread t : threads) {
t.start();
}
} else {
func.operate(1, result);
}
for (Thread t : threads) {
t.join();
}
// Waiting for all responses.
while (result.size() < numOfRpcs * numOfThreads) {}
// Summerize the result.
long dur = System.currentTimeMillis() - start;
int numOfChannels = 1;
Collections.sort(result);
System.out.println(
String.format(
"Number of threads: %d\t "
+ "Number of Channels: %d\t"
+ "Total number of RPC's: %d\n"
+ "\t\tAvg"
+ "\tMin"
+ "\tMed"
+ "\tp90"
+ "\tp99"
+ "\tp100"
+ "\tQPS\n"
+ " Time(ms)\t%d\t%d\t%d\t%d\t%d\t%d\t%f",
numOfThreads,
numOfChannels,
numOfThreads * numOfRpcs,
result.stream().mapToLong(Long::longValue).sum() / result.size(),
result.get(0),
result.get((int) (result.size() * 0.5)),
result.get((int) (result.size() * 0.9)),
result.get((int) (result.size() * 0.99)),
result.get(result.size() - 1),
numOfRpcs * numOfThreads / (double) dur));
}