core/benches: Add rudimentary benchmark for PeerId::from_bytes and clone (#1875)

* core: Add rudimentary benchmark for PeerId::from_bytes and clone

* .github/workflow: Include benchmarks

To ensure changes through pull requests won't make benchmarks fail to
compile or run, run them as part of CI.
This commit is contained in:
Max Inden
2020-12-07 18:06:41 +01:00
committed by GitHub
parent 3edc467d75
commit e665a818d7
3 changed files with 90 additions and 0 deletions

View File

@ -140,6 +140,41 @@ jobs:
command: clippy
args: -- -A clippy::mutable_key_type -A clippy::type_complexity
run-benchmarks:
runs-on: ubuntu-latest
steps:
- name: Cancel Previous Runs
uses: styfle/cancel-workflow-action@0.6.0
with:
access_token: ${{ github.token }}
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
- name: Cache CARGO_HOME
uses: actions/cache@v2
with:
path: ~/.cargo
key: cargo-home-${{ hashFiles('Cargo.toml') }}
- name: Cache cargo build
uses: actions/cache@v2
with:
path: target
key: cargo-build-target-${{ hashFiles('Cargo.toml') }}
- name: Run cargo bench
uses: actions-rs/cargo@v1
with:
command: bench
args: --workspace
integration-test:
name: Integration tests
runs-on: ubuntu-latest

View File

@ -41,6 +41,7 @@ ring = { version = "0.16.9", features = ["alloc", "std"], default-features = fal
[dev-dependencies]
async-std = "1.6.2"
criterion = "0.3"
libp2p-mplex = { path = "../muxers/mplex" }
libp2p-noise = { path = "../protocols/noise" }
libp2p-tcp = { path = "../transports/tcp", features = ["async-std"] }
@ -54,3 +55,7 @@ prost-build = "0.6"
[features]
default = ["secp256k1"]
secp256k1 = ["libsecp256k1"]
[[bench]]
name = "peer_id"
harness = false

50
core/benches/peer_id.rs Normal file
View File

@ -0,0 +1,50 @@
// Copyright 2020 Parity Technologies (UK) Ltd.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
use criterion::{black_box, criterion_group, criterion_main, Criterion, Throughput};
use libp2p_core::{identity, PeerId};
fn from_bytes(c: &mut Criterion) {
let peer_id_bytes = identity::Keypair::generate_ed25519()
.public()
.into_peer_id()
.into_bytes();
c.bench_function("from_bytes", |b| {
b.iter(|| {
black_box(PeerId::from_bytes(peer_id_bytes.clone()).unwrap());
})
});
}
fn clone(c: &mut Criterion) {
let peer_id = identity::Keypair::generate_ed25519()
.public()
.into_peer_id();
c.bench_function("clone", |b| {
b.iter(|| {
black_box(peer_id.clone());
})
});
}
criterion_group!(peer_id, from_bytes, clone);
criterion_main!(peer_id);