You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: bench/src/benchmark_result.rs
+71-6
Original file line number
Diff line number
Diff line change
@@ -13,10 +13,20 @@ pub struct BenchmarkResult {
13
13
pubstart_timestamp:Instant,
14
14
pubend_timestamp:Instant,
15
15
pubaverage_latency:Duration,
16
+
publatency_percentiles:LatencyPercentiles,
16
17
pubtotal_size_bytes:u64,
17
18
pubtotal_messages:u64,
18
19
}
19
20
21
+
#[derive(Debug,Clone,PartialEq)]
22
+
pubstructLatencyPercentiles{
23
+
pubp50:Duration,
24
+
pubp90:Duration,
25
+
pubp95:Duration,
26
+
pubp99:Duration,
27
+
pubp999:Duration,
28
+
}
29
+
20
30
pubstructBenchmarkResults{
21
31
results:Vec<BenchmarkResult>,
22
32
}
@@ -30,6 +40,11 @@ impl From<Vec<BenchmarkResult>> for BenchmarkResults {
30
40
structBenchmarkStatistics{
31
41
total_throughput:f64,
32
42
messages_per_second:f64,
43
+
average_p50_latency:f64,
44
+
average_p90_latency:f64,
45
+
average_p95_latency:f64,
46
+
average_p99_latency:f64,
47
+
average_p999_latency:f64,
33
48
average_latency:f64,
34
49
average_throughput:f64,
35
50
total_duration:f64,
@@ -80,6 +95,51 @@ impl BenchmarkResults {
80
95
.filter(&mut predicate)
81
96
.map(|r| r.total_messages)
82
97
.sum::<u64>();
98
+
let average_p50_latency = (self
99
+
.results
100
+
.iter()
101
+
.filter(&mut predicate)
102
+
.map(|r| r.latency_percentiles.p50)
103
+
.sum::<Duration>()
104
+
/ self.results.len()asu32)
105
+
.as_secs_f64()
106
+
*1000.0;
107
+
let average_p95_latency = (self
108
+
.results
109
+
.iter()
110
+
.filter(&mut predicate)
111
+
.map(|r| r.latency_percentiles.p95)
112
+
.sum::<Duration>()
113
+
/ self.results.len()asu32)
114
+
.as_secs_f64()
115
+
*1000.0;
116
+
let average_p90_latency = (self
117
+
.results
118
+
.iter()
119
+
.filter(&mut predicate)
120
+
.map(|r| r.latency_percentiles.p90)
121
+
.sum::<Duration>()
122
+
/ self.results.len()asu32)
123
+
.as_secs_f64()
124
+
*1000.0;
125
+
let average_p99_latency = (self
126
+
.results
127
+
.iter()
128
+
.filter(&mut predicate)
129
+
.map(|r| r.latency_percentiles.p99)
130
+
.sum::<Duration>()
131
+
/ self.results.len()asu32)
132
+
.as_secs_f64()
133
+
*1000.0;
134
+
let average_p999_latency = (self
135
+
.results
136
+
.iter()
137
+
.filter(&mut predicate)
138
+
.map(|r| r.latency_percentiles.p999)
139
+
.sum::<Duration>()
140
+
/ self.results.len()asu32)
141
+
.as_secs_f64()
142
+
*1000.0;
83
143
let average_latency = (self
84
144
.results
85
145
.iter()
@@ -98,6 +158,11 @@ impl BenchmarkResults {
98
158
total_throughput,
99
159
messages_per_second,
100
160
average_latency,
161
+
average_p50_latency,
162
+
average_p90_latency,
163
+
average_p95_latency,
164
+
average_p99_latency,
165
+
average_p999_latency,
101
166
average_throughput,
102
167
total_duration,
103
168
}
@@ -111,11 +176,11 @@ impl Display for BenchmarkResults {
111
176
let producer_statics = self.calculate_statistics(|x| x.kind == BenchmarkKind::Send);
112
177
let consumer_statics = self.calculate_statistics(|x| x.kind == BenchmarkKind::Poll);
113
178
114
-
let producer_info = format!("Producer results: total throughput: {:.2} MB/s, {:.0} messages/s, average latency: {:.2} ms, average throughput: {:.2} MB/s, total duration: {:.2} s",
let producer_info = format!("Producer results: total throughput: {:.2} MB/s, {:.0} messages/s, average throughput: {:.2} MB/s, average p50 latency: {:.2} ms, average p90 latency: {:.2} ms, average p95 latency: {:.2} ms, average p99 latency: {:.2} ms, average p999 latency: {:.2} ms, average latency: {:.2} ms, total duration: {:.2} s",
let consumer_info = format!("Consumer results: total throughput: {:.2} MB/s, {:.0} messages/s, average latency: {:.2} ms, average throughput: {:.2} MB/s, total duration: {:.2} s",
let consumer_info = format!("Consumer results: total throughput: {:.2} MB/s, {:.0} messages/s, average throughput: {:.2} MB/s, average p50 latency: {:.2} ms, average p90 latency: {:.2} ms, average p95 latency: {:.2} ms, average p99 latency: {:.2} ms, average p999 latency: {:.2} ms, average latency: {:.2} ms, total duration: {:.2} s",
let summary_info = format!("Results: total throughput: {:.2} MB/s, {:.0} messages/s, average latency: {:.2} ms, average throughput: {:.2} MB/s, total duration: {:.2} s",
let summary_info = format!("Results: total throughput: {:.2} MB/s, {:.0} messages/s, average throughput: {:.2} MB/s, average p50 latency: {:.2} ms, average p90 latency: {:.2} ms, average p95 latency: {:.2} ms, average p99 latency: {:.2} ms, average p999 latency: {:.2} ms, average latency: {:.2} ms, total duration: {:.2} s",
use iggy::clients::client::{IggyClient,IggyClientBackgroundConfig};
5
5
use iggy::error::IggyError;
@@ -105,28 +105,50 @@ impl Producer {
105
105
latencies.push(latency_end);
106
106
}
107
107
let end_timestamp = Instant::now();
108
+
109
+
latencies.sort();
110
+
let last_idx = latencies.len() - 1;
111
+
let p50 = latencies[last_idx / 2];
112
+
let p90 = latencies[last_idx *9 / 10];
113
+
let p95 = latencies[last_idx *95 / 100];
114
+
let p99 = latencies[last_idx *99 / 100];
115
+
let p999 = latencies[last_idx *999 / 1000];
116
+
let latency_percentiles = LatencyPercentiles{
117
+
p50,
118
+
p90,
119
+
p95,
120
+
p99,
121
+
p999,
122
+
};
123
+
108
124
let duration = end_timestamp - start_timestamp;
109
125
let average_latency:Duration = latencies.iter().sum::<Duration>() / latencies.len()asu32;
110
126
let total_size_bytes = total_messages *self.message_sizeasu64;
111
127
let average_throughput = total_size_bytes asf64 / duration.as_secs_f64() / 1e6;
112
128
113
129
info!(
114
-
"Producer #{} → sent {} messages in {} batches of {} messages in {:.2} s, total size: {} bytes, average latency: {:.2} ms, average throughput: {:.2} MB/s",
130
+
"Producer #{} → sent {} messages in {} batches of {} messages in {:.2} s, total size: {} bytes, average throughput: {:.2} MB/s, p50 latency: {:.2} ms, p90 latency: {:.2} ms, p95 latency: {:.2} ms, p99 latency: {:.2} ms, p999 latency: {:.2} ms, average latency: {:.2} ms",
0 commit comments