Remove calls to heapsize (#10432)
* update memorydb trait * use malloc_size_of instead of heapsize_of * use jemalloc as default allocator for parity client.
This commit is contained in:
@@ -21,12 +21,12 @@
|
||||
//! vector of all gas prices from a recent range of blocks.
|
||||
|
||||
use std::time::{Instant, Duration};
|
||||
use parity_util_mem::{MallocSizeOf, MallocSizeOfOps, MallocSizeOfExt};
|
||||
|
||||
use common_types::encoded;
|
||||
use common_types::BlockNumber;
|
||||
use common_types::receipt::Receipt;
|
||||
use ethereum_types::{H256, U256};
|
||||
use heapsize::HeapSizeOf;
|
||||
use memory_cache::MemoryLruCache;
|
||||
use stats::Corpus;
|
||||
|
||||
@@ -157,18 +157,20 @@ impl Cache {
|
||||
|
||||
/// Get the memory used.
|
||||
pub fn mem_used(&self) -> usize {
|
||||
self.heap_size_of_children()
|
||||
self.malloc_size_of()
|
||||
}
|
||||
}
|
||||
|
||||
impl HeapSizeOf for Cache {
|
||||
fn heap_size_of_children(&self) -> usize {
|
||||
|
||||
// This is fast method: it is possible to have a more exhaustive implementation
|
||||
impl MallocSizeOf for Cache {
|
||||
fn size_of(&self, _ops: &mut MallocSizeOfOps) -> usize {
|
||||
self.headers.current_size()
|
||||
+ self.canon_hashes.current_size()
|
||||
+ self.bodies.current_size()
|
||||
+ self.receipts.current_size()
|
||||
+ self.chain_score.current_size()
|
||||
// TODO: + corpus
|
||||
// `self.corpus` is skipped
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -95,7 +95,8 @@ pub struct BlockInfo {
|
||||
/// Build an in-memory CHT from a closure which provides necessary information
|
||||
/// about blocks. If the fetcher ever fails to provide the info, the CHT
|
||||
/// will not be generated.
|
||||
pub fn build<F>(cht_num: u64, mut fetcher: F) -> Option<CHT<MemoryDB<KeccakHasher, DBValue>>>
|
||||
pub fn build<F>(cht_num: u64, mut fetcher: F)
|
||||
-> Option<CHT<MemoryDB<KeccakHasher, memory_db::HashKey<KeccakHasher>, DBValue>>>
|
||||
where F: FnMut(BlockId) -> Option<BlockInfo>
|
||||
{
|
||||
let mut db = new_memory_db();
|
||||
@@ -154,7 +155,7 @@ pub fn compute_root<I>(cht_num: u64, iterable: I) -> Option<H256>
|
||||
pub fn check_proof(proof: &[Bytes], num: u64, root: H256) -> Option<(H256, U256)> {
|
||||
let mut db = new_memory_db();
|
||||
|
||||
for node in proof { db.insert(&node[..]); }
|
||||
for node in proof { db.insert(hash_db::EMPTY_PREFIX, &node[..]); }
|
||||
let res = match TrieDB::new(&db, &root) {
|
||||
Err(_) => return None,
|
||||
Ok(trie) => trie.get_with(&key!(num), |val: &[u8]| {
|
||||
|
||||
@@ -38,7 +38,7 @@ use ethcore::engines::epoch::{Transition as EpochTransition, PendingTransition a
|
||||
use ethcore::error::{Error, EthcoreResult, BlockError};
|
||||
use ethcore::spec::{Spec, SpecHardcodedSync};
|
||||
use ethereum_types::{H256, H264, U256};
|
||||
use heapsize::HeapSizeOf;
|
||||
use parity_util_mem::{MallocSizeOf, MallocSizeOfOps};
|
||||
use kvdb::{DBTransaction, KeyValueDB};
|
||||
use parking_lot::{Mutex, RwLock};
|
||||
use fastmap::H256FastMap;
|
||||
@@ -95,8 +95,8 @@ struct Entry {
|
||||
canonical_hash: H256,
|
||||
}
|
||||
|
||||
impl HeapSizeOf for Entry {
|
||||
fn heap_size_of_children(&self) -> usize {
|
||||
impl MallocSizeOf for Entry {
|
||||
fn size_of(&self, _ops: &mut MallocSizeOfOps) -> usize {
|
||||
if self.candidates.spilled() {
|
||||
self.candidates.capacity() * ::std::mem::size_of::<Candidate>()
|
||||
} else {
|
||||
@@ -202,14 +202,21 @@ pub enum HardcodedSync {
|
||||
Deny,
|
||||
}
|
||||
|
||||
#[derive(MallocSizeOf)]
|
||||
/// Header chain. See module docs for more details.
|
||||
pub struct HeaderChain {
|
||||
#[ignore_malloc_size_of = "ignored for performance reason"]
|
||||
genesis_header: encoded::Header, // special-case the genesis.
|
||||
candidates: RwLock<BTreeMap<u64, Entry>>,
|
||||
#[ignore_malloc_size_of = "ignored for performance reason"]
|
||||
best_block: RwLock<BlockDescriptor>,
|
||||
#[ignore_malloc_size_of = "ignored for performance reason"]
|
||||
live_epoch_proofs: RwLock<H256FastMap<EpochTransition>>,
|
||||
#[ignore_malloc_size_of = "ignored for performance reason"]
|
||||
db: Arc<KeyValueDB>,
|
||||
#[ignore_malloc_size_of = "ignored for performance reason"]
|
||||
col: Option<u32>,
|
||||
#[ignore_malloc_size_of = "ignored for performance reason"]
|
||||
cache: Arc<Mutex<Cache>>,
|
||||
}
|
||||
|
||||
@@ -838,12 +845,6 @@ impl HeaderChain {
|
||||
}
|
||||
}
|
||||
|
||||
impl HeapSizeOf for HeaderChain {
|
||||
fn heap_size_of_children(&self) -> usize {
|
||||
self.candidates.read().heap_size_of_children()
|
||||
}
|
||||
}
|
||||
|
||||
/// Iterator over a block's ancestry.
|
||||
pub struct AncestryIter<'a> {
|
||||
next: Option<encoded::Header>,
|
||||
|
||||
@@ -362,9 +362,9 @@ impl<T: ChainDataFetcher> Client<T> {
|
||||
|
||||
/// Get blockchain mem usage in bytes.
|
||||
pub fn chain_mem_used(&self) -> usize {
|
||||
use heapsize::HeapSizeOf;
|
||||
use parity_util_mem::MallocSizeOfExt;
|
||||
|
||||
self.chain.heap_size_of_children()
|
||||
self.chain.malloc_size_of()
|
||||
}
|
||||
|
||||
/// Set a closure to call when the client wants to be restarted.
|
||||
|
||||
@@ -64,7 +64,9 @@ extern crate ethereum_types;
|
||||
extern crate ethcore_miner as miner;
|
||||
extern crate ethcore;
|
||||
extern crate hash_db;
|
||||
extern crate heapsize;
|
||||
extern crate parity_util_mem;
|
||||
extern crate parity_util_mem as mem;
|
||||
extern crate parity_util_mem as malloc_size_of;
|
||||
extern crate failsafe;
|
||||
extern crate futures;
|
||||
extern crate itertools;
|
||||
|
||||
@@ -981,7 +981,7 @@ impl Account {
|
||||
let state_root = header.state_root();
|
||||
|
||||
let mut db = journaldb::new_memory_db();
|
||||
for node in proof { db.insert(&node[..]); }
|
||||
for node in proof { db.insert(hash_db::EMPTY_PREFIX, &node[..]); }
|
||||
|
||||
match TrieDB::new(&db, &state_root).and_then(|t| t.get(keccak(&self.address).as_bytes()))? {
|
||||
Some(val) => {
|
||||
|
||||
Reference in New Issue
Block a user