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"
|
||||
harness = false
|
||||
|
||||
[[bench]]
|
||||
name = "bench_request_from_bytes"
|
||||
path = "benches/bench_request_from_bytes.rs"
|
||||
harness = false
|
||||
|
||||
[[bench]]
|
||||
name = "bench_announce_response_to_bytes"
|
||||
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 {
|
||||
NeedMoreData,
|
||||
Invalid(anyhow::Error),
|
||||
|
|
@ -408,13 +409,8 @@ mod tests {
|
|||
assert!(f("%å7").is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_announce_request_from_path(){
|
||||
let parsed_request = Request::from_http_get_path(
|
||||
ANNOUNCE_REQUEST_PATH
|
||||
).unwrap();
|
||||
|
||||
let reference_request = Request::Announce(AnnounceRequest {
|
||||
fn get_reference_announce_request() -> Request {
|
||||
Request::Announce(AnnounceRequest {
|
||||
info_hash: InfoHash(REFERENCE_INFO_HASH),
|
||||
peer_id: PeerId(REFERENCE_PEER_ID),
|
||||
port: 12345,
|
||||
|
|
@ -423,7 +419,33 @@ mod tests {
|
|||
compact: true,
|
||||
numwant: Some(0),
|
||||
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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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