diff --git a/vmm/src/api/openapi/cloud-hypervisor.yaml b/vmm/src/api/openapi/cloud-hypervisor.yaml index a92af5ca9..c8e059da9 100644 --- a/vmm/src/api/openapi/cloud-hypervisor.yaml +++ b/vmm/src/api/openapi/cloud-hypervisor.yaml @@ -321,9 +321,13 @@ components: type: integer queue_size: type: integer + dax: + type: boolean + default: true cache_size: type: integer format: int64 + default: 8589934592 PmemConfig: required: diff --git a/vmm/src/config.rs b/vmm/src/config.rs index 0ed5d90f4..10024f5f5 100644 --- a/vmm/src/config.rs +++ b/vmm/src/config.rs @@ -409,7 +409,8 @@ pub struct FsConfig { pub sock: PathBuf, pub num_queues: usize, pub queue_size: u16, - pub cache_size: Option, + pub dax: bool, + pub cache_size: u64, } impl FsConfig { @@ -444,7 +445,7 @@ impl FsConfig { let mut queue_size: u16 = 1024; let mut dax: bool = true; // Default cache size set to 8Gib. - let mut cache_size: Option = Some(0x0002_0000_0000); + let mut cache_size: u64 = 0x0002_0000_0000; if tag.is_empty() { return Err(Error::ParseFsTagParam); @@ -476,9 +477,9 @@ impl FsConfig { if !cache_size_str.is_empty() { return Err(Error::InvalidCacheSizeWithDaxOff); } - cache_size = None; + cache_size = 0; } else if !cache_size_str.is_empty() { - cache_size = Some(parse_size(cache_size_str)?); + cache_size = parse_size(cache_size_str)?; } Ok(FsConfig { @@ -486,6 +487,7 @@ impl FsConfig { sock: PathBuf::from(sock), num_queues, queue_size, + dax, cache_size, }) } diff --git a/vmm/src/device_manager.rs b/vmm/src/device_manager.rs index 3edfa15a9..cd6d18586 100644 --- a/vmm/src/device_manager.rs +++ b/vmm/src/device_manager.rs @@ -958,8 +958,8 @@ impl DeviceManager { if let Some(fs_list_cfg) = &vm_info.vm_cfg.lock().unwrap().fs { for fs_cfg in fs_list_cfg.iter() { if let Some(fs_sock) = fs_cfg.sock.to_str() { - let mut cache: Option<(VirtioSharedMemoryList, u64)> = None; - if let Some(fs_cache) = fs_cfg.cache_size { + let cache: Option<(VirtioSharedMemoryList, u64)> = if fs_cfg.dax { + let fs_cache = fs_cfg.cache_size; // The memory needs to be 2MiB aligned in order to support // hugepages. let fs_guest_addr = allocator @@ -1004,15 +1004,18 @@ impl DeviceManager { offset: 0, len: fs_cache, }); - cache = Some(( + + Some(( VirtioSharedMemoryList { addr: fs_guest_addr, len: fs_cache as GuestUsize, region_list, }, addr as u64, - )); - } + )) + } else { + None + }; let virtio_fs_device = vm_virtio::vhost_user::Fs::new( fs_sock,