[overhead] - Add network average read/write to output (#3872)

* add average network read/write to the output results.

* guard against div/zero
This commit is contained in:
jason plumb 2021-08-23 21:52:18 -07:00 committed by GitHub
parent fa168268c5
commit e439c153c8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 53 additions and 1 deletions

View File

@ -21,6 +21,8 @@ public class AppPerfResults {
final float maxThreadContextSwitchRate;
final long startupDurationMs;
final long peakThreadCount;
final long averageNetworkRead;
final long averageNetworkWrite;
private AppPerfResults(Builder builder) {
this.agent = builder.agent;
@ -35,6 +37,8 @@ public class AppPerfResults {
this.maxThreadContextSwitchRate = builder.maxThreadContextSwitchRate;
this.startupDurationMs = builder.startupDurationMs;
this.peakThreadCount = builder.peakThreadCount;
this.averageNetworkRead = builder.averageNetworkRead;
this.averageNetworkWrite = builder.averageNetworkWrite;
}
double getTotalAllocatedMB() {
@ -61,6 +65,8 @@ public class AppPerfResults {
private MinMax heapUsed;
private float maxThreadContextSwitchRate;
private long peakThreadCount;
public long averageNetworkRead;
public long averageNetworkWrite;
AppPerfResults build() {
return new AppPerfResults(this);
@ -125,6 +131,16 @@ public class AppPerfResults {
this.peakThreadCount = peakThreadCount;
return this;
}
Builder averageNetworkRead(long averageNetworkRead){
this.averageNetworkRead = averageNetworkRead;
return this;
}
Builder averageNetworkWrite(long averageNetworkWrite){
this.averageNetworkWrite = averageNetworkWrite;
return this;
}
}
public static class MinMax {

View File

@ -39,6 +39,8 @@ class CsvPersister implements ResultsPersister {
sb.append(",").append(result.iterationP95);
sb.append(",").append(result.requestAvg);
sb.append(",").append(result.requestP95);
sb.append(",").append(result.averageNetworkRead);
sb.append(",").append(result.averageNetworkWrite);
sb.append(",").append(result.peakThreadCount);
});
sb.append("\n");
@ -79,6 +81,8 @@ class CsvPersister implements ResultsPersister {
sb.append(",").append(agent).append(":iterationP95");
sb.append(",").append(agent).append(":requestAvg");
sb.append(",").append(agent).append(":requestP95");
sb.append(",").append(agent).append(":netReadAvg");
sb.append(",").append(agent).append(":netWriteAvg");
sb.append(",").append(agent).append(":peakThreadCount");
});
sb.append("\n");

View File

@ -41,6 +41,8 @@ class PrintStreamPersister implements ResultsPersister {
display(sorted, "Req. p95", res -> format(res.requestP95));
display(sorted, "Iter. mean", res -> format(res.iterationAvg));
display(sorted, "Iter. p95", res -> format(res.iterationP95));
display(sorted, "Net read avg (bps)", res -> format(res.averageNetworkRead));
display(sorted, "Net write avg (bps)", res -> format(res.averageNetworkWrite));
display(sorted, "Peak threads", res -> String.valueOf(res.peakThreadCount));
}

View File

@ -75,7 +75,17 @@ public class ResultsCollector {
.totalAllocated(readTotalAllocated(jfrFile))
.heapUsed(readHeapUsed(jfrFile))
.maxThreadContextSwitchRate(readMaxThreadContextSwitchRate(jfrFile))
.peakThreadCount(readPeakThreadCount(jfrFile));
.peakThreadCount(readPeakThreadCount(jfrFile))
.averageNetworkRead(computeAverageNetworkRead(jfrFile))
.averageNetworkWrite(computeAverageNetworkWrite(jfrFile));
}
private long computeAverageNetworkRead(Path jfrFile) throws IOException {
return JFRUtils.findAverageLong(jfrFile, "jdk.NetworkUtilization", "readRate");
}
private long computeAverageNetworkWrite(Path jfrFile) throws IOException {
return JFRUtils.findAverageLong(jfrFile, "jdk.NetworkUtilization", "writeRate");
}
private long readPeakThreadCount(Path jfrFile) throws IOException {

View File

@ -34,6 +34,12 @@ public class JFRUtils {
});
}
public static long findAverageLong(Path jfrFile, String eventName, String valueKey) throws IOException {
return reduce(jfrFile, eventName, valueKey,
new AverageSupport(),
AverageSupport::add).average();
}
private static <T, V> T reduce(Path jfrFile, String eventName,
String valueKey, T initial, BiFunction<T,V,T> reducer) throws IOException {
RecordingFile recordingFile = new RecordingFile(jfrFile);
@ -47,4 +53,18 @@ public class JFRUtils {
}
return result;
}
static class AverageSupport {
long count;
long total;
AverageSupport add(long value){
count++;
total += value;
return this;
}
long average(){
if(count == 0) return -1;
return total/count;
}
}
}