Update internal config tool for EDMM support
This commit is contained in:
parent
22ff266958
commit
08b3dc7268
@ -1,6 +1,7 @@
|
||||
{
|
||||
"resource_limits": {
|
||||
"kernel_space_heap_size": "40MB",
|
||||
"kernel_space_heap_max_size": "512MB",
|
||||
"kernel_space_stack_size": "1MB",
|
||||
"user_space_size": "600MB",
|
||||
"max_num_of_threads": 32
|
||||
|
7
tools/gen_internal_conf/Cargo.lock
generated
7
tools/gen_internal_conf/Cargo.lock
generated
@ -77,6 +77,7 @@ version = "0.2.0"
|
||||
dependencies = [
|
||||
"clap",
|
||||
"env_logger",
|
||||
"lazy_static",
|
||||
"log",
|
||||
"regex",
|
||||
"serde",
|
||||
@ -109,6 +110,12 @@ version = "0.4.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e"
|
||||
|
||||
[[package]]
|
||||
name = "lazy_static"
|
||||
version = "1.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.70"
|
||||
|
@ -19,3 +19,4 @@ log = "0.4"
|
||||
env_logger = "0.7"
|
||||
serde-xml-rs = "0.4"
|
||||
regex = "1"
|
||||
lazy_static = "1.4.0"
|
||||
|
@ -7,6 +7,7 @@ extern crate serde_derive;
|
||||
extern crate serde_xml_rs;
|
||||
|
||||
use clap::{App, Arg, SubCommand};
|
||||
use lazy_static::lazy_static;
|
||||
use log::debug;
|
||||
use serde_derive::{Deserialize, Serialize};
|
||||
use serde_json::json;
|
||||
@ -14,6 +15,37 @@ use std::fs::File;
|
||||
use std::io::Write;
|
||||
use std::path::Path;
|
||||
|
||||
// Some hardcode implicit config value. Please update the values defined in "init()" when necessary.
|
||||
lazy_static! {
|
||||
static ref DEFAULT_CONFIG: DefaultConfig = DefaultConfig::init();
|
||||
}
|
||||
|
||||
struct DefaultConfig {
|
||||
// Corresponds to HeapMaxSize in Enclave.xml
|
||||
kernel_heap_max_size: &'static str,
|
||||
// Corresponds to TCSMaxNum in Enclave.xml
|
||||
num_of_tcs_max: u32,
|
||||
// Corresponds to MiscSelect in Enclave.xml
|
||||
misc_select: &'static str,
|
||||
// Corresponds to MiscMask in Enclave.xml
|
||||
misc_mask: &'static str,
|
||||
}
|
||||
|
||||
impl DefaultConfig {
|
||||
fn init() -> Self {
|
||||
Self {
|
||||
kernel_heap_max_size: "1024MB",
|
||||
num_of_tcs_max: 4096,
|
||||
// If UserRegionSize is not configured, but the heap, stack and thread related
|
||||
// configurations have dynamic part, set MiscSelect[0] = 1 and MiscMask[0] = 0,
|
||||
// the enclave can be loaded on SGX 1.0 and 2.0 platform, and on SGX 2.0 platform,
|
||||
// it can utilize the dynamic components.
|
||||
misc_select: "1",
|
||||
misc_mask: "0x0",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
env_logger::init();
|
||||
|
||||
@ -125,6 +157,11 @@ fn main() {
|
||||
enclave_config_file_path
|
||||
);
|
||||
|
||||
// get the number of TCS
|
||||
let tcs_num = occlum_config.resource_limits.max_num_of_threads;
|
||||
let tcs_min_pool = tcs_num;
|
||||
let tcs_max_num = std::cmp::max(tcs_num, DEFAULT_CONFIG.num_of_tcs_max);
|
||||
|
||||
// get the kernel stack size
|
||||
let stack_max_size =
|
||||
parse_memory_size(&occlum_config.resource_limits.kernel_space_stack_size);
|
||||
@ -135,16 +172,36 @@ fn main() {
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
// get the kernel heap size
|
||||
let heap_max_size =
|
||||
let heap_init_size =
|
||||
parse_memory_size(&occlum_config.resource_limits.kernel_space_heap_size);
|
||||
if heap_max_size.is_err() {
|
||||
if heap_init_size.is_err() {
|
||||
println!(
|
||||
"The kernel_space_heap_size \"{}\" is not correct.",
|
||||
occlum_config.resource_limits.kernel_space_heap_size
|
||||
);
|
||||
return;
|
||||
}
|
||||
// For max heap size, try to use the values provided by users. If not provided, use the default value
|
||||
let heap_max_size = {
|
||||
if let Some(ref kernel_space_heap_max_size) =
|
||||
occlum_config.resource_limits.kernel_space_heap_max_size
|
||||
{
|
||||
let heap_max_size = parse_memory_size(&kernel_space_heap_max_size);
|
||||
if heap_max_size.is_err() {
|
||||
println!(
|
||||
"The kernel_space_heap_max_size \"{}\" is not correct.",
|
||||
kernel_space_heap_max_size
|
||||
);
|
||||
return;
|
||||
}
|
||||
heap_max_size
|
||||
} else {
|
||||
parse_memory_size(DEFAULT_CONFIG.kernel_heap_max_size)
|
||||
}
|
||||
};
|
||||
|
||||
// get the user space size
|
||||
let user_space_size = parse_memory_size(&occlum_config.resource_limits.user_space_size);
|
||||
if user_space_size.is_err() {
|
||||
@ -183,16 +240,19 @@ fn main() {
|
||||
ISVSVN: occlum_config.metadata.version_number,
|
||||
StackMaxSize: stack_max_size.unwrap() as u64,
|
||||
StackMinSize: stack_max_size.unwrap() as u64, // just use the same size as max size
|
||||
HeapInitSize: heap_init_size.unwrap() as u64,
|
||||
HeapMaxSize: heap_max_size.unwrap() as u64,
|
||||
HeapMinSize: heap_max_size.unwrap() as u64, // just use the same size as max size
|
||||
TCSNum: occlum_config.resource_limits.max_num_of_threads,
|
||||
HeapMinSize: heap_init_size.unwrap() as u64,
|
||||
TCSNum: tcs_num,
|
||||
TCSMinPool: tcs_min_pool,
|
||||
TCSMaxNum: tcs_max_num,
|
||||
TCSPolicy: 1,
|
||||
DisableDebug: match occlum_config.metadata.debuggable {
|
||||
true => 0,
|
||||
false => 1,
|
||||
},
|
||||
MiscSelect: "0".to_string(),
|
||||
MiscMask: "0xFFFFFFFF".to_string(),
|
||||
MiscSelect: DEFAULT_CONFIG.misc_select.to_string(),
|
||||
MiscMask: DEFAULT_CONFIG.misc_mask.to_string(),
|
||||
ReservedMemMaxSize: user_space_size.unwrap() as u64,
|
||||
ReservedMemMinSize: user_space_size.unwrap() as u64,
|
||||
ReservedMemInitSize: user_space_size.unwrap() as u64,
|
||||
@ -426,6 +486,8 @@ struct OcclumConfiguration {
|
||||
struct OcclumResourceLimits {
|
||||
max_num_of_threads: u32,
|
||||
kernel_space_heap_size: String,
|
||||
#[serde(default)]
|
||||
kernel_space_heap_max_size: Option<String>,
|
||||
kernel_space_stack_size: String,
|
||||
user_space_size: String,
|
||||
#[cfg(feature = "ms_buffer")]
|
||||
@ -497,9 +559,12 @@ struct EnclaveConfiguration {
|
||||
ISVSVN: u32,
|
||||
StackMaxSize: u64,
|
||||
StackMinSize: u64,
|
||||
HeapInitSize: u64,
|
||||
HeapMaxSize: u64,
|
||||
HeapMinSize: u64,
|
||||
TCSNum: u32,
|
||||
TCSMaxNum: u32,
|
||||
TCSMinPool: u32,
|
||||
TCSPolicy: u32,
|
||||
DisableDebug: u32,
|
||||
MiscSelect: String,
|
||||
|
Loading…
Reference in New Issue
Block a user