mirror of
https://github.com/YGGverse/aquatic.git
synced 2026-03-31 09:45:31 +00:00
aquatic_http_protocol: add benchmark for request from bytes
This commit is contained in:
parent
95e25710dc
commit
ea4b560faa
9 changed files with 1071 additions and 8 deletions
|
|
@ -13,6 +13,11 @@ name = "bench_request_from_path"
|
||||||
path = "benches/bench_request_from_path.rs"
|
path = "benches/bench_request_from_path.rs"
|
||||||
harness = false
|
harness = false
|
||||||
|
|
||||||
|
[[bench]]
|
||||||
|
name = "bench_request_from_bytes"
|
||||||
|
path = "benches/bench_request_from_bytes.rs"
|
||||||
|
harness = false
|
||||||
|
|
||||||
[[bench]]
|
[[bench]]
|
||||||
name = "bench_announce_response_to_bytes"
|
name = "bench_announce_response_to_bytes"
|
||||||
path = "benches/bench_announce_response_to_bytes.rs"
|
path = "benches/bench_announce_response_to_bytes.rs"
|
||||||
|
|
|
||||||
24
aquatic_http_protocol/benches/bench_request_from_bytes.rs
Normal file
24
aquatic_http_protocol/benches/bench_request_from_bytes.rs
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
use std::time::Duration;
|
||||||
|
use criterion::{black_box, criterion_group, criterion_main, Criterion};
|
||||||
|
|
||||||
|
use aquatic_http_protocol::request::Request;
|
||||||
|
|
||||||
|
|
||||||
|
static INPUT: &[u8] = b"GET /announce?info_hash=%04%0bkV%3f%5cr%14%a6%b7%98%adC%c3%c9.%40%24%00%b9&peer_id=-TR2940-5ert69muw5t8&port=11000&uploaded=0&downloaded=0&left=0&numwant=0&key=3ab4b977&compact=1&supportcrypto=1&event=stopped HTTP/1.1\r\n\r\n";
|
||||||
|
|
||||||
|
|
||||||
|
pub fn bench(c: &mut Criterion) {
|
||||||
|
c.bench_function("request-from-bytes", |b| b.iter(||
|
||||||
|
Request::from_bytes(black_box(INPUT))
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
criterion_group!{
|
||||||
|
name = benches;
|
||||||
|
config = Criterion::default()
|
||||||
|
.sample_size(1000)
|
||||||
|
.measurement_time(Duration::from_secs(180))
|
||||||
|
.significance_level(0.01);
|
||||||
|
targets = bench
|
||||||
|
}
|
||||||
|
criterion_main!(benches);
|
||||||
|
|
@ -109,6 +109,7 @@ impl ScrapeRequest {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
pub enum RequestParseError {
|
pub enum RequestParseError {
|
||||||
NeedMoreData,
|
NeedMoreData,
|
||||||
Invalid(anyhow::Error),
|
Invalid(anyhow::Error),
|
||||||
|
|
@ -408,13 +409,8 @@ mod tests {
|
||||||
assert!(f("%å7").is_err());
|
assert!(f("%å7").is_err());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
fn get_reference_announce_request() -> Request {
|
||||||
fn test_announce_request_from_path(){
|
Request::Announce(AnnounceRequest {
|
||||||
let parsed_request = Request::from_http_get_path(
|
|
||||||
ANNOUNCE_REQUEST_PATH
|
|
||||||
).unwrap();
|
|
||||||
|
|
||||||
let reference_request = Request::Announce(AnnounceRequest {
|
|
||||||
info_hash: InfoHash(REFERENCE_INFO_HASH),
|
info_hash: InfoHash(REFERENCE_INFO_HASH),
|
||||||
peer_id: PeerId(REFERENCE_PEER_ID),
|
peer_id: PeerId(REFERENCE_PEER_ID),
|
||||||
port: 12345,
|
port: 12345,
|
||||||
|
|
@ -423,7 +419,33 @@ mod tests {
|
||||||
compact: true,
|
compact: true,
|
||||||
numwant: Some(0),
|
numwant: Some(0),
|
||||||
key: Some("4ab4b877".into())
|
key: Some("4ab4b877".into())
|
||||||
});
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_announce_request_from_bytes(){
|
||||||
|
let mut bytes = Vec::new();
|
||||||
|
|
||||||
|
bytes.extend_from_slice(b"GET ");
|
||||||
|
bytes.extend_from_slice(&ANNOUNCE_REQUEST_PATH.as_bytes());
|
||||||
|
bytes.extend_from_slice(b" HTTP/1.1\r\n\r\n");
|
||||||
|
|
||||||
|
let parsed_request = Request::from_bytes(
|
||||||
|
&bytes[..]
|
||||||
|
).unwrap();
|
||||||
|
|
||||||
|
let reference_request = get_reference_announce_request();
|
||||||
|
|
||||||
|
assert_eq!(parsed_request, reference_request);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_announce_request_from_path(){
|
||||||
|
let parsed_request = Request::from_http_get_path(
|
||||||
|
ANNOUNCE_REQUEST_PATH
|
||||||
|
).unwrap();
|
||||||
|
|
||||||
|
let reference_request = get_reference_announce_request();
|
||||||
|
|
||||||
assert_eq!(parsed_request, reference_request);
|
assert_eq!(parsed_request, reference_request);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
{"group_id":"request-from-bytes","function_id":null,"value_str":null,"throughput":null,"full_id":"request-from-bytes","directory_name":"request-from-bytes","title":"request-from-bytes"}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
{"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":2460.1209520234065,"upper_bound":2496.3120750993653},"point_estimate":2477.735012452959,"standard_error":9.223219637832466},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":2378.552109650183,"upper_bound":2392.9167858884143},"point_estimate":2386.0253054074483,"standard_error":3.7683770634335887},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":99.96596815329639,"upper_bound":120.92540240951352},"point_estimate":110.60694919175964,"standard_error":5.3506476356761885},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":2438.3485065067393,"upper_bound":2469.501606349259},"point_estimate":2453.4596391963023,"standard_error":7.977121580504992},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":251.73297824646409,"upper_bound":332.1546916341356},"point_estimate":291.46617601681515,"standard_error":20.531098767805926}}
|
||||||
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1 @@
|
||||||
|
[1795.8747498180473,2061.4607369455734,2769.6900359523097,3035.276023079836]
|
||||||
7
scripts/criterion/aquatic-http-request-from-bytes.sh
Executable file
7
scripts/criterion/aquatic-http-request-from-bytes.sh
Executable file
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Compare against latest. If you commit changes, replace "latest" directory
|
||||||
|
# with "new" directory after running benchmark.
|
||||||
|
|
||||||
|
export RUSTFLAGS="-C target-cpu=native"
|
||||||
|
|
||||||
|
cargo bench --bench bench_request_from_bytes -- --noplot --baseline latest
|
||||||
Loading…
Add table
Add a link
Reference in a new issue