Skip to content

Commit fd4b43b

Browse files
committed
Improve metrics output + charts
1 parent 2bbdcca commit fd4b43b

File tree

3 files changed

+26
-293
lines changed

3 files changed

+26
-293
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
target/
22
.DS_Store
33
/.direnv/
4+
*/benches/results

polybase/benches/bench.rs

+25-13
Original file line numberDiff line numberDiff line change
@@ -20,23 +20,26 @@ pub struct BenchResult {
2020
#[tokio::main]
2121
async fn main() {
2222
let base_url = "http://localhost:8080";
23+
// let base_url = "https://prenet.polybase.xyz";
2324

2425
// client hangs on 100k on MacOS
25-
for n in [1, 10, 100, 1000] {
26+
for n in [1, 10, 100, 1000, 5000] {
2627
let BenchResult {
2728
total_duration,
2829
avg_duration,
2930
variance_duration,
3031
std_dev_duration,
3132
throughput,
32-
..
33+
durations,
3334
} = create_records(n, base_url).await;
3435

3536
println!("Took {}s to create {n} records", total_duration);
3637
println!(" Average duration: {} seconds", avg_duration);
3738
println!(" Variance deviation: {} seconds", variance_duration);
3839
println!(" Standard deviation: {} seconds", std_dev_duration);
3940
println!(" Throughput: {} requests per second", throughput);
41+
42+
generate_chart(format!("results/create_records_{}.svg", n), durations, 50);
4043
}
4144
}
4245

@@ -77,7 +80,11 @@ async fn create_records(n: u64, base_url: &str) -> BenchResult {
7780
let duration = start.elapsed();
7881

7982
// Make sure the request was successful
80-
assert!(response.status().is_success());
83+
assert!(
84+
response.status().is_success(),
85+
"Request failed: {:?}",
86+
response.status()
87+
);
8188

8289
duration.as_secs_f64()
8390
});
@@ -141,7 +148,7 @@ async fn create_collection(base_url: &str) -> String {
141148
id
142149
}
143150

144-
async fn generate_chart(name: String, durations: Vec<f64>, num_bins: usize) {
151+
fn generate_chart(name: String, durations: Vec<f64>, num_bins: usize) {
145152
let current_file = file!();
146153
let project_root = Path::new(env!("CARGO_MANIFEST_DIR")).parent().unwrap();
147154
let absolute_current_file = fs::canonicalize(project_root.join(current_file)).unwrap();
@@ -164,22 +171,27 @@ async fn generate_chart(name: String, durations: Vec<f64>, num_bins: usize) {
164171
.min_by(|a, b| a.partial_cmp(b).unwrap())
165172
.unwrap();
166173

174+
let histogram = durations.iter().fold(vec![0; num_bins], |mut acc, &v| {
175+
let index =
176+
((v - min_duration) / (max_duration - min_duration) * (num_bins as f64) - 1.0) as usize;
177+
acc[index] += 1;
178+
acc
179+
});
180+
181+
let max: &usize = histogram.iter().max().unwrap();
182+
let height = max + max / 10;
183+
167184
let mut chart = ChartBuilder::on(&root)
168185
// .caption("Histogram of Request Durations", ("", 50).into_font())
169186
.margin(5)
170187
.x_label_area_size(30)
171188
.y_label_area_size(30)
172-
.build_cartesian_2d(min_duration..max_duration, 0usize..400usize)
189+
.build_cartesian_2d(min_duration..max_duration, 0usize..height)
173190
.unwrap();
174191

175192
chart.configure_mesh().draw().unwrap();
176193

177-
let histogram = durations.iter().fold(vec![0; num_bins], |mut acc, &v| {
178-
let index =
179-
((v - min_duration) / (max_duration - min_duration) * (num_bins as f64) - 1.0) as usize;
180-
acc[index] += 1;
181-
acc
182-
});
194+
let diff = max_duration - min_duration;
183195

184196
chart
185197
.draw_series(histogram.into_iter().zip(0..).map(|(y, x)| {
@@ -188,13 +200,13 @@ async fn generate_chart(name: String, durations: Vec<f64>, num_bins: usize) {
188200
(
189201
(x as f64 / num_bins as f64) * (max_duration - min_duration)
190202
+ min_duration
191-
+ 0.0001,
203+
+ (diff * 0.001),
192204
0,
193205
),
194206
(
195207
((x + 1) as f64 / num_bins as f64) * (max_duration - min_duration)
196208
+ min_duration
197-
- 0.0001,
209+
- (diff * 0.001),
198210
y,
199211
),
200212
],

0 commit comments

Comments
 (0)