Skip to content

Commit 334e345

Browse files
authored
impl mem checker (#171, DFI-626)
* Implements lru cache. * added mem checker test.
1 parent 3b294ed commit 334e345

File tree

20 files changed

+776
-128
lines changed

20 files changed

+776
-128
lines changed

Cargo.lock

Lines changed: 57 additions & 62 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cli/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ libra = { path = "../libra", package = "dvm-libra-deps" }
1717
compiler = { path = "../compiler", package = "dvm-compiler" }
1818
dvm-net = { path = "../net" }
1919
dvm-info = { path = "../info" }
20+
runtime = { path = "../runtime", package = "dvm-runtime" }
2021

2122
anyhow = "1.0"
2223
log = "0.4.8"

cli/src/bin/dvm.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@ use services::vm::VmService;
2929
use dvm_cli::config::*;
3030
use dvm_cli::init;
3131
use futures::join;
32-
use dvm_info::config::InfoServiceConfig;
32+
use dvm_info::config::{InfoServiceConfig, MemoryOptions};
3333
use dvm_cli::info_service::create_info_service;
34-
35-
const MODULE_CACHE: usize = 1000;
34+
use dvm_info::memory_check::MemoryChecker;
35+
use runtime::vm::dvm::Dvm;
3636

3737
/// Definance Virtual Machine
3838
/// combined with Move compilation server
@@ -56,6 +56,9 @@ struct Options {
5656
#[clap(flatten)]
5757
info_service: InfoServiceConfig,
5858

59+
#[clap(flatten)]
60+
memory_config: MemoryOptions,
61+
5962
/// DataSource Server internet address.
6063
#[clap(
6164
name = "Data-Source URI",
@@ -100,9 +103,10 @@ async fn main_internal(options: Options) -> Result<()> {
100103
// data-source client
101104
let ds = GrpcDataSource::new(options.ds, Some(ds_term_rx))
102105
.expect("Unable to instantiate GrpcDataSource.");
103-
let ds = ModuleCache::new(DsMeter::new(ds), MODULE_CACHE);
106+
let ds = ModuleCache::new(DsMeter::new(ds), options.memory_config.module_cache());
107+
let mem_checker = MemoryChecker::new(options.memory_config, vec![Box::new(ds.clone())]);
104108
// vm services
105-
let vm_service = VmService::new(ds.clone(), hrm);
109+
let vm_service = VmService::new(Dvm::new(ds.clone(), Some(mem_checker)), hrm);
106110
// comp services
107111
let compiler_service = CompilerService::new(Compiler::new(ds));
108112
let metadata_service = MetadataService::default();

data-source/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,3 @@ crossbeam = "0.7.3"
1919
http = "0.2"
2020
tokio = { version = "0.2", features = [ "macros", "rt-core", "rt-threaded", "blocking", "full" ] }
2121
log = "0.4.8"
22-
lru = "0.4.3"

data-source/src/blacklist.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::{DataSource, Clear};
1+
use crate::{DataSource, RemoveModule};
22
use std::collections::HashSet;
33
use libra::prelude::*;
44

@@ -64,11 +64,11 @@ where
6464

6565
impl<D> DataSource for BlackListDataSource<D> where D: DataSource {}
6666

67-
impl<D> Clear for BlackListDataSource<D>
67+
impl<D> RemoveModule for BlackListDataSource<D>
6868
where
6969
D: DataSource,
7070
{
71-
fn clear(&self) {
72-
self.inner.clear();
71+
fn remove_module(&self, module_id: &ModuleId) {
72+
self.inner.remove_module(module_id)
7373
}
7474
}

data-source/src/grpc.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use dvm_net::api;
1414
use dvm_net::prelude::*;
1515
use dvm_net::tonic;
1616

17-
use crate::{Clear, DataSource};
17+
use crate::{RemoveModule, DataSource};
1818

1919
/// Receiver for a channel that handles shutdown signals.
2020
pub type ShutdownSig = tokio::sync::oneshot::Receiver<()>;
@@ -178,6 +178,6 @@ impl RemoteCache for GrpcDataSource {
178178
}
179179
}
180180

181-
impl Clear for GrpcDataSource {}
181+
impl RemoveModule for GrpcDataSource {}
182182

183183
impl DataSource for GrpcDataSource {}

data-source/src/lib.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,12 @@ pub use grpc::GrpcDataSource;
3131
pub use blacklist::{BlackListDataSource};
3232

3333
/// Thread-safe `StateView`.
34-
pub trait DataSource: RemoteCache + Clear + Clone + Send + Sync + 'static {}
35-
36-
/// Trait to `clear()` internal data structure.
37-
pub trait Clear {
38-
/// No-op in default implementation.
39-
/// Called on internal `DataSource` object to remove all entries from internal cache.
40-
/// Used when `sender` is the built-in 0x0 / 0x1 address.
41-
fn clear(&self) {
34+
pub trait DataSource: RemoteCache + RemoveModule + Clone + Send + Sync + 'static {}
35+
36+
/// Trait to `remove_module` internal data structure.
37+
pub trait RemoveModule {
38+
/// Removes the module by its id.
39+
fn remove_module(&self, _module_id: &ModuleId) {
4240
//no-op
4341
}
4442
}

data-source/src/metrics.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use dvm_info::metrics::execution::ExecutionResult;
22
use dvm_info::metrics::meter::ScopeMeter;
33
use libra::prelude::*;
44

5-
use crate::{Clear, DataSource};
5+
use crate::{RemoveModule, DataSource};
66

77
/// Wrapper for data source which collects metrics queries.
88
#[derive(Debug, Clone)]
@@ -23,12 +23,12 @@ where
2323
}
2424
}
2525

26-
impl<D> Clear for DsMeter<D>
26+
impl<D> RemoveModule for DsMeter<D>
2727
where
2828
D: DataSource,
2929
{
30-
fn clear(&self) {
31-
self.inner.clear();
30+
fn remove_module(&self, module_id: &ModuleId) {
31+
self.inner.remove_module(module_id)
3232
}
3333
}
3434

data-source/src/mock.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use anyhow::Error;
55

66
use libra::prelude::*;
77

8-
use crate::{Clear, DataSource};
8+
use crate::{RemoveModule, DataSource};
99

1010
/// `StateView` implementation to be used in test_kit.
1111
#[derive(Debug, Clone, Default)]
@@ -115,6 +115,6 @@ impl RemoteCache for MockDataSource {
115115
}
116116
}
117117

118-
impl Clear for MockDataSource {}
118+
impl RemoveModule for MockDataSource {}
119119

120120
impl DataSource for MockDataSource {}

0 commit comments

Comments
 (0)