Expose max memory size (#242)

This commit is contained in:
Mike Voronov 2022-04-20 20:21:07 +03:00 committed by GitHub
parent 69a42cf111
commit 5c2b9d442b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 28 additions and 13 deletions

14
Cargo.lock generated
View File

@ -216,7 +216,7 @@ version = "0.1.0"
[[package]]
name = "avm-server"
version = "0.17.0"
version = "0.18.0"
dependencies = [
"air-interpreter-interface",
"avm-data-store",
@ -1205,9 +1205,9 @@ dependencies = [
[[package]]
name = "libc"
version = "0.2.121"
version = "0.2.122"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "efaa7b300f3b5fe8eb6bf21ce3895e1751d9665086af2d64b42f19701015ff4f"
checksum = "ec647867e2bf0772e28c8bcde4f0d19a9216916e890543b5a03ed8ef27b8f259"
[[package]]
name = "lock_api"
@ -2134,9 +2134,9 @@ dependencies = [
[[package]]
name = "serde_with"
version = "1.12.0"
version = "1.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec1e6ec4d8950e5b1e894eac0d360742f3b1407a6078a604a731c4b3f49cefbc"
checksum = "946fa04a8ac43ff78a1f4b811990afb9ddbdf5890b46d6dda0ba1998230138b7"
dependencies = [
"rustversion",
"serde",
@ -2145,9 +2145,9 @@ dependencies = [
[[package]]
name = "serde_with_macros"
version = "1.5.1"
version = "1.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12e47be9471c72889ebafb5e14d5ff930d89ae7a67bbdb5f8abb564f845a927e"
checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082"
dependencies = [
"darling",
"proc-macro2",

View File

@ -1,7 +1,7 @@
[package]
name = "avm-server"
description = "Fluence AIR VM"
version = "0.17.0"
version = "0.18.0"
authors = ["Fluence Labs"]
edition = "2018"
license = "Apache-2.0"

View File

@ -17,6 +17,7 @@
use super::avm_runner::AVMRunner;
use super::AVMDataStore;
use super::AVMError;
use super::AVMMemoryStats;
use super::AVMOutcome;
use super::CallResults;
use crate::config::AVMConfig;
@ -99,8 +100,8 @@ impl<E> AVM<E> {
Ok(())
}
/// Return size of interpreter heap in bytes.
pub fn memory_size(&self) -> usize {
self.runner.memory_size()
/// Return memory stat of an interpreter heap.
pub fn memory_stats(&self) -> AVMMemoryStats {
self.runner.memory_stats()
}
}

View File

@ -34,6 +34,7 @@ pub use avm::AVM;
pub use config::AVMConfig;
pub use errors::AVMError;
pub use interface::*;
pub use runner::AVMMemoryStats;
pub mod avm_runner {
pub use crate::interface::raw_outcome::RawAVMOutcome;

View File

@ -34,6 +34,15 @@ pub struct AVMRunner {
wasm_filename: String,
}
/// Return statistic of AVM server Wasm module heap footprint.
pub struct AVMMemoryStats {
/// Size of currently used linear memory in bytes.
/// Please note that linear memory contains not only heap, but globals, shadow stack and so on.
pub memory_size: usize,
/// Possibly set max memory size for AVM server.
pub max_memory_size: Option<usize>,
}
impl AVMRunner {
/// Create AVM with provided config.
pub fn new(
@ -87,12 +96,16 @@ impl AVMRunner {
Ok(outcome)
}
pub fn memory_size(&self) -> usize {
pub fn memory_stats(&self) -> AVMMemoryStats {
let stats = self.faas.module_memory_stats();
// only the interpreters must be loaded in FaaS
debug_assert!(stats.len() == 1);
stats[0].memory_size
AVMMemoryStats {
memory_size: stats[0].memory_size,
max_memory_size: stats[0].max_memory_size,
}
}
}