Skip to content

Commit

Permalink
Merge #1667
Browse files Browse the repository at this point in the history
1667: Upgrading to SPDK 24.05 r=dsavitskiy a=dsavitskiy



Co-authored-by: Dmitry Savitskiy <[email protected]>
  • Loading branch information
mayastor-bors and dsavitskiy committed Aug 7, 2024
2 parents 5d4d9de + 9ee949a commit da558e6
Show file tree
Hide file tree
Showing 8 changed files with 102 additions and 49 deletions.
8 changes: 7 additions & 1 deletion io-engine-tests/src/error_bdev.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,13 @@ pub fn create_error_bdev(error_device: &str, backing_device: &str) {

unsafe {
// this allows us to create a bdev without its name being a uri
retval = create_aio_bdev(cname.as_ptr(), filename.as_ptr(), 512, false)
retval = create_aio_bdev(
cname.as_ptr(),
filename.as_ptr(),
512,
false,
false,
)
};
assert_eq!(retval, 0);

Expand Down
1 change: 1 addition & 0 deletions io-engine/src/bdev/aio.rs
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ impl CreateDestroy for Aio {
cname.as_ptr(),
self.blk_size,
false,
false,
)
};

Expand Down
14 changes: 10 additions & 4 deletions io-engine/src/bdev/uring.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use futures::channel::oneshot;
use snafu::ResultExt;
use url::Url;

use spdk_rs::libspdk::{create_uring_bdev, delete_uring_bdev};
use spdk_rs::libspdk::{bdev_uring_opts, create_uring_bdev, delete_uring_bdev};

use crate::{
bdev::{dev::reject_unknown_parameters, util::uri, CreateDestroy, GetName},
Expand Down Expand Up @@ -101,10 +101,16 @@ impl CreateDestroy for Uring {
}

let cname = CString::new(self.get_name()).unwrap();
let opts = bdev_uring_opts {
name: cname.as_ptr(),
filename: cname.as_ptr(),
block_size: self.blk_size,
uuid: spdk_rs::Uuid::generate().into_raw(),
};

if let Some(mut bdev) = UntypedBdev::checked_from_ptr(unsafe {
create_uring_bdev(cname.as_ptr(), cname.as_ptr(), self.blk_size)
}) {
if let Some(mut bdev) =
UntypedBdev::checked_from_ptr(unsafe { create_uring_bdev(&opts) })
{
if let Some(uuid) = self.uuid {
unsafe { bdev.set_raw_uuid(uuid.into()) };
}
Expand Down
10 changes: 10 additions & 0 deletions io-engine/src/bin/io-engine.rs
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,16 @@ fn start_tokio_runtime(args: &MayastorCliArgs) {
warn!("RDMA is enabled for Mayastor NVMEoF target");
}

unsafe {
spdk_rs::libspdk::spdk_blob_enable_cluster_unmap(args.bs_cluster_unmap);
}

if args.bs_cluster_unmap {
warn!("Blob store cluster release on UNMAP is enabled");
} else {
debug!("Blob store cluster release on UNMAP is disabled");
}

print_feature!("Async QPair connection", "spdk-async-qpair-connect");
print_feature!("Fault injection", "fault-injection");

Expand Down
7 changes: 7 additions & 0 deletions io-engine/src/core/env.rs
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,9 @@ pub struct MayastorCliArgs {
/// Enables RDMA between initiator and Mayastor Nvmf target.
#[clap(long = "enable-rdma", env = "ENABLE_RDMA", value_parser = delay_compat)]
pub rdma: bool,
/// Enables globally blob store cluster release on unmap.
#[clap(long, env = "ENABLE_BS_CLUSTER_UNMAP", hide = true)]
pub bs_cluster_unmap: bool,
}

fn delay_compat(s: &str) -> Result<bool, String> {
Expand Down Expand Up @@ -340,6 +343,7 @@ impl Default for MayastorCliArgs {
snap_rebuild: false,
developer_delay: false,
rdma: false,
bs_cluster_unmap: false,
}
}
}
Expand Down Expand Up @@ -421,6 +425,7 @@ pub struct MayastorEnvironment {
enable_io_all_thrd_nexus_channels: bool,
developer_delay: bool,
rdma: bool,
bs_cluster_unmap: bool,
}

impl Default for MayastorEnvironment {
Expand Down Expand Up @@ -470,6 +475,7 @@ impl Default for MayastorEnvironment {
enable_io_all_thrd_nexus_channels: false,
developer_delay: false,
rdma: false,
bs_cluster_unmap: false,
}
}
}
Expand Down Expand Up @@ -612,6 +618,7 @@ impl MayastorEnvironment {
skip_sig_handler: args.skip_sig_handler,
developer_delay: args.developer_delay,
rdma: args.rdma,
bs_cluster_unmap: args.bs_cluster_unmap,
enable_io_all_thrd_nexus_channels: args
.enable_io_all_thrd_nexus_channels,
..Default::default()
Expand Down
100 changes: 62 additions & 38 deletions io-engine/src/subsys/config/opts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -103,12 +103,17 @@ pub struct NvmfTgtConfig {

impl From<NvmfTgtConfig> for Box<spdk_nvmf_target_opts> {
fn from(o: NvmfTgtConfig) -> Self {
let mut out = spdk_nvmf_target_opts {
name: unsafe { zeroed() },
max_subsystems: o.max_namespaces,
crdt: o.crdt,
discovery_filter: 0,
};
let mut out = struct_size_init!(
spdk_nvmf_target_opts {
name: unsafe { zeroed() },
max_subsystems: o.max_namespaces,
crdt: o.crdt,
discovery_filter: 0,
dhchap_digests: 0,
dhchap_dhgroups: 0,
},
size
);
copy_str_with_null(&o.name, &mut out.name);
Box::new(out)
}
Expand Down Expand Up @@ -162,6 +167,10 @@ pub struct NvmfTcpTransportOpts {
acceptor_poll_rate: u32,
/// Use zero-copy operations if the underlying bdev supports them
zcopy: bool,
/// ACK timeout in milliseconds
ack_timeout: u32,
/// Size of RDMA data WR pool
data_wr_pool_size: u32,
}

/// try to read an env variable or returns the default when not found
Expand Down Expand Up @@ -273,6 +282,8 @@ impl Default for NvmfTcpTransportOpts {
abort_timeout_sec: 1,
acceptor_poll_rate: try_from_env("NVMF_ACCEPTOR_POLL_RATE", 10_000),
zcopy: try_from_env("NVMF_ZCOPY", 1) == 1,
ack_timeout: try_from_env("NVMF_ACK_TIMEOUT", 0),
data_wr_pool_size: try_from_env("NVMF_DATA_WR_POOL_SIZE", 0),
}
}
}
Expand All @@ -282,25 +293,29 @@ impl Default for NvmfTcpTransportOpts {
/// know about it during compile time.
impl From<NvmfTcpTransportOpts> for spdk_nvmf_transport_opts {
fn from(o: NvmfTcpTransportOpts) -> Self {
Self {
max_queue_depth: o.max_queue_depth,
max_qpairs_per_ctrlr: o.max_qpairs_per_ctrl,
in_capsule_data_size: o.in_capsule_data_size,
max_io_size: o.max_io_size,
io_unit_size: o.io_unit_size,
max_aq_depth: o.max_aq_depth,
num_shared_buffers: o.num_shared_buf,
buf_cache_size: o.buf_cache_size,
dif_insert_or_strip: o.dif_insert_or_strip,
reserved29: Default::default(),
abort_timeout_sec: o.abort_timeout_sec,
association_timeout: 120000,
transport_specific: std::ptr::null(),
opts_size: std::mem::size_of::<spdk_nvmf_transport_opts>() as u64,
acceptor_poll_rate: o.acceptor_poll_rate,
zcopy: o.zcopy,
reserved61: Default::default(),
}
struct_size_init!(
Self {
max_queue_depth: o.max_queue_depth,
max_qpairs_per_ctrlr: o.max_qpairs_per_ctrl,
in_capsule_data_size: o.in_capsule_data_size,
max_io_size: o.max_io_size,
io_unit_size: o.io_unit_size,
max_aq_depth: o.max_aq_depth,
num_shared_buffers: o.num_shared_buf,
buf_cache_size: o.buf_cache_size,
dif_insert_or_strip: o.dif_insert_or_strip,
reserved29: Default::default(),
abort_timeout_sec: o.abort_timeout_sec,
association_timeout: 120000,
transport_specific: std::ptr::null(),
acceptor_poll_rate: o.acceptor_poll_rate,
zcopy: o.zcopy,
reserved61: Default::default(),
ack_timeout: o.ack_timeout,
data_wr_pool_size: o.data_wr_pool_size,
},
opts_size
)
}
}

Expand Down Expand Up @@ -477,6 +492,9 @@ impl From<&NvmeBdevOpts> for spdk_bdev_nvme_opts {
io_path_stat: false,
allow_accel_sequence: false,
rdma_max_cq_size: 0,
rdma_cm_event_timeout_ms: 0,
dhchap_digests: 0,
dhchap_dhgroups: 0,
}
}
}
Expand Down Expand Up @@ -700,13 +718,16 @@ pub struct IoBufOpts {

impl GetOpts for IoBufOpts {
fn get(&self) -> Self {
let mut opts = spdk_iobuf_opts {
small_pool_count: 0,
large_pool_count: 0,
small_bufsize: 0,
large_bufsize: 0,
};
unsafe { spdk_iobuf_get_opts(&mut opts) };
let mut opts = struct_size_init!(
spdk_iobuf_opts {
small_pool_count: 0,
large_pool_count: 0,
small_bufsize: 0,
large_bufsize: 0,
},
opts_size
);
unsafe { spdk_iobuf_get_opts(&mut opts, opts.opts_size) };
opts.into()
}

Expand Down Expand Up @@ -744,11 +765,14 @@ impl From<spdk_iobuf_opts> for IoBufOpts {

impl From<&IoBufOpts> for spdk_iobuf_opts {
fn from(o: &IoBufOpts) -> Self {
Self {
small_pool_count: o.small_pool_count,
large_pool_count: o.large_pool_count,
small_bufsize: o.small_bufsize,
large_bufsize: o.large_bufsize,
}
struct_size_init!(
Self {
small_pool_count: o.small_pool_count,
large_pool_count: o.large_pool_count,
small_bufsize: o.small_bufsize,
large_bufsize: o.large_bufsize,
},
opts_size
)
}
}
9 changes: 4 additions & 5 deletions io-engine/src/subsys/nvmf/subsystem.rs
Original file line number Diff line number Diff line change
Expand Up @@ -129,10 +129,7 @@ impl Debug for NvmfSubsystem {
.field("subnqn", &self.0.as_ref().subnqn.as_str().to_string())
.field("sn", &self.0.as_ref().sn.as_str().to_string())
.field("mn", &self.0.as_ref().mn.as_str().to_string())
.field(
"allow_any_host",
&self.0.as_ref().flags.allow_any_host(),
)
.field("allow_any_host", &self.0.as_ref().allow_any_host)
.field("ana_reporting", &self.0.as_ref().flags.ana_reporting())
.field("listeners", &self.listeners_to_vec())
.finish()
Expand Down Expand Up @@ -527,7 +524,9 @@ impl NvmfSubsystem {
uuid: Default::default(),
reserved44: unsafe { zeroed() },
anagrpid: 0,
reserved60: unsafe { zeroed() },
no_auto_visible: false,
reserved61: unsafe { zeroed() },
transport_specific: ptr::null(),
},
opts_size
);
Expand Down
2 changes: 1 addition & 1 deletion spdk-rs

0 comments on commit da558e6

Please sign in to comment.