diff --git a/Cargo.lock b/Cargo.lock index 72b5943d48b3f..f3d32a30d62e0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10191,7 +10191,7 @@ dependencies = [ name = "sp-core-hashing" version = "5.0.0" dependencies = [ - "blake2", + "blake2b_simd", "byteorder", "digest 0.10.6", "sha2 0.10.6", @@ -11773,7 +11773,7 @@ checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ "cfg-if", "digest 0.10.6", - "rand 0.7.3", + "rand 0.8.5", "static_assertions", ] diff --git a/frame/benchmarking/src/weights.rs b/frame/benchmarking/src/weights.rs index fdd4429f2039b..b05feb5900a65 100644 --- a/frame/benchmarking/src/weights.rs +++ b/frame/benchmarking/src/weights.rs @@ -18,25 +18,26 @@ //! Autogenerated weights for frame_benchmarking //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-01-24, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2023-03-06, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `bm2`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! HOSTNAME: `bm3`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 // Executed Command: -// ./target/production/substrate +// target/production/substrate // benchmark // pallet -// --chain=dev // --steps=50 // --repeat=20 -// --pallet=frame_benchmarking // --extrinsic=* // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --output=./frame/benchmarking/src/weights.rs +// --json-file=/var/lib/gitlab-runner/builds/zyw4fam_/0/parity/mirrors/substrate/.git/.artifacts/bench.json +// --pallet=frame_benchmarking +// --chain=dev // --header=./HEADER-APACHE2 +// --output=./frame/benchmarking/src/weights.rs // --template=./.maintain/frame-weight-template.hbs #![cfg_attr(rustfmt, rustfmt_skip)] @@ -64,49 +65,49 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 138 nanoseconds. - Weight::from_parts(199_805, 0) + // Minimum execution time: 168_000 picoseconds. + Weight::from_parts(237_577, 0) } /// The range of component `i` is `[0, 1000000]`. fn subtraction(_i: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 142 nanoseconds. - Weight::from_parts(201_435, 0) + // Minimum execution time: 169_000 picoseconds. + Weight::from_parts(224_111, 0) } /// The range of component `i` is `[0, 1000000]`. fn multiplication(_i: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 138 nanoseconds. - Weight::from_parts(207_037, 0) + // Minimum execution time: 175_000 picoseconds. + Weight::from_parts(229_708, 0) } /// The range of component `i` is `[0, 1000000]`. fn division(_i: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 151 nanoseconds. - Weight::from_parts(205_150, 0) + // Minimum execution time: 173_000 picoseconds. + Weight::from_parts(229_855, 0) } fn hashing() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 21_950_884 nanoseconds. - Weight::from_parts(21_994_001_000, 0) + // Minimum execution time: 21_286_627_000 picoseconds. + Weight::from_parts(21_405_011_000, 0) } /// The range of component `i` is `[0, 100]`. fn sr25519_verification(i: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 168 nanoseconds. - Weight::from_parts(1_680_898, 0) - // Standard Error: 10_291 - .saturating_add(Weight::from_parts(46_867_301, 0).saturating_mul(i.into())) + // Minimum execution time: 239_000 picoseconds. + Weight::from_parts(661_987, 0) + // Standard Error: 24_324 + .saturating_add(Weight::from_parts(47_322_399, 0).saturating_mul(i.into())) } } @@ -117,48 +118,48 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 138 nanoseconds. - Weight::from_parts(199_805, 0) + // Minimum execution time: 168_000 picoseconds. + Weight::from_parts(237_577, 0) } /// The range of component `i` is `[0, 1000000]`. fn subtraction(_i: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 142 nanoseconds. - Weight::from_parts(201_435, 0) + // Minimum execution time: 169_000 picoseconds. + Weight::from_parts(224_111, 0) } /// The range of component `i` is `[0, 1000000]`. fn multiplication(_i: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 138 nanoseconds. - Weight::from_parts(207_037, 0) + // Minimum execution time: 175_000 picoseconds. + Weight::from_parts(229_708, 0) } /// The range of component `i` is `[0, 1000000]`. fn division(_i: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 151 nanoseconds. - Weight::from_parts(205_150, 0) + // Minimum execution time: 173_000 picoseconds. + Weight::from_parts(229_855, 0) } fn hashing() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 21_950_884 nanoseconds. - Weight::from_parts(21_994_001_000, 0) + // Minimum execution time: 21_286_627_000 picoseconds. + Weight::from_parts(21_405_011_000, 0) } /// The range of component `i` is `[0, 100]`. fn sr25519_verification(i: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 168 nanoseconds. - Weight::from_parts(1_680_898, 0) - // Standard Error: 10_291 - .saturating_add(Weight::from_parts(46_867_301, 0).saturating_mul(i.into())) + // Minimum execution time: 239_000 picoseconds. + Weight::from_parts(661_987, 0) + // Standard Error: 24_324 + .saturating_add(Weight::from_parts(47_322_399, 0).saturating_mul(i.into())) } } diff --git a/primitives/core/hashing/Cargo.toml b/primitives/core/hashing/Cargo.toml index 1bb67ffff5142..a77aaaa7aebc6 100644 --- a/primitives/core/hashing/Cargo.toml +++ b/primitives/core/hashing/Cargo.toml @@ -13,7 +13,7 @@ documentation = "https://docs.rs/sp-core-hashing" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -blake2 = { version = "0.10.4", default-features = false } +blake2b_simd = { version = "1.0.1", default-features = false } byteorder = { version = "1.3.2", default-features = false } digest = { version = "0.10.3", default-features = false } sha2 = { version = "0.10.2", default-features = false } @@ -25,7 +25,7 @@ sp-std = { version = "5.0.0", default-features = false, path = "../../std" } default = ["std"] std = [ "digest/std", - "blake2/std", + "blake2b_simd/std", "byteorder/std", "sha2/std", "sha3/std", diff --git a/primitives/core/hashing/src/lib.rs b/primitives/core/hashing/src/lib.rs index 26941bb60fa51..33d777f85b014 100644 --- a/primitives/core/hashing/src/lib.rs +++ b/primitives/core/hashing/src/lib.rs @@ -23,34 +23,41 @@ use core::hash::Hasher; use byteorder::{ByteOrder, LittleEndian}; -use digest::{ - consts::{U16, U32, U8}, - Digest, -}; +use digest::Digest; + +#[inline(always)] +fn blake2(data: &[u8]) -> [u8; N] { + blake2b_simd::Params::new() + .hash_length(N) + .hash(data) + .as_bytes() + .try_into() + .expect("slice is always the necessary length") +} /// Do a Blake2 512-bit hash and place result in `dest`. pub fn blake2_512_into(data: &[u8], dest: &mut [u8; 64]) { - dest.copy_from_slice(blake2::Blake2b512::digest(data).as_slice()); + *dest = blake2(data); } /// Do a Blake2 512-bit hash and return result. pub fn blake2_512(data: &[u8]) -> [u8; 64] { - blake2::Blake2b512::digest(data).into() + blake2(data) } /// Do a Blake2 256-bit hash and return result. pub fn blake2_256(data: &[u8]) -> [u8; 32] { - blake2::Blake2b::::digest(data).into() + blake2(data) } /// Do a Blake2 128-bit hash and return result. pub fn blake2_128(data: &[u8]) -> [u8; 16] { - blake2::Blake2b::::digest(data).into() + blake2(data) } /// Do a Blake2 64-bit hash and return result. pub fn blake2_64(data: &[u8]) -> [u8; 8] { - blake2::Blake2b::::digest(data).into() + blake2(data) } /// Do a XX 64-bit hash and place result in `dest`.