Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce new CSAL ftl bdev #1771

Merged
merged 3 commits into from
Nov 28, 2024

Conversation

MaisenbacherD
Copy link
Contributor

For this PR to be merged the PR openebs/spdk-rs#67
for spdk-rs needs to be resolved and the submodule reference must be
updated accordingly. :)

The SPDK ftl bdev allows to create a layered device with a (fast) cache
device for buffering writes that get eventually flushed out sequentially
to a base device. SDPK ftl is also known as the Cloud Storage
Acceleration Layer (CSAL).

This kind of device potentially enables the use of emerging storage
interfaces like Zoned Namespace (ZNS) or Flexible Data Placement (FDP)
capable NVMe devices. Up to this point, those NVMe command sets are not
yet supported in SPDK upstream. However, the acceleration aspect of a
fast cache device already adds value.
With future support of new devices for SDPK ftl, Mayastor would already
be capable of utilizing those features simply by upgrading SDPK.

For now, the ftl_mount_fs test cases are hidden behind the ignore
attribute because PCIe devices are required for this test until
SPDK v24.09 is picked up, which introduces variable sector size emulation
for ftl devices.
To run these tests use the following:

RUST_LOG=TRACE cargo test -- --test-threads 1 --test ftl_mount_fs --nocapture --ignored

This patch introduces a new ftl device uri scheme:

ftl:///<ftl-device-name>?bbdev=<dev-uri-nested-encoding>&cbdev=<dev-uri-nested-encoding>

<dev-uri-nested-encoding> can be any already valid device uri where '?'
are replaced with '!' and '&' are replaced with '|'.
With SPDK v24.05 only PCIe devices will work where the cache device is
formatted to 4KiB+64B LBA format and the base device to 4KiB LBA format.

From SPDK v24.09 on, any device with a block size of 4KiB will work for
both cache and base device.

CSAL paper reference:
https://dl.acm.org/doi/10.1145/3627703.3629566

@MaisenbacherD
Copy link
Contributor Author

Discussion question: The spdk_ftl_conf allows us to set configurations like core_mask and l2p_dram_limit. Are those configurations worth exposing through the ftl uri, or should we go with the default configuration?

doc/test.md Show resolved Hide resolved
io-engine/src/bdev/ftl.rs Outdated Show resolved Hide resolved
io-engine/src/bdev/ftl.rs Show resolved Hide resolved
io-engine/src/bdev/ftl.rs Outdated Show resolved Hide resolved
io-engine/src/bdev/ftl.rs Outdated Show resolved Hide resolved
io-engine/src/bdev/ftl.rs Show resolved Hide resolved
io-engine/src/bdev/ftl.rs Outdated Show resolved Hide resolved
io-engine/src/bdev/ftl.rs Outdated Show resolved Hide resolved
io-engine/src/core/env.rs Show resolved Hide resolved
io-engine/tests/ftl_mount_fs.rs Outdated Show resolved Hide resolved
@tiagolobocastro
Copy link
Contributor

bors try

bors-openebs-mayastor bot pushed a commit that referenced this pull request Nov 22, 2024
@bors-openebs-mayastor
Copy link

try

Build failed:

@MaisenbacherD
Copy link
Contributor Author

Addressed the linter errors :)

@dsharma-dc
Copy link
Contributor

bors try

bors-openebs-mayastor bot pushed a commit that referenced this pull request Nov 25, 2024
@bors-openebs-mayastor
Copy link

try

Build failed:

@dsharma-dc
Copy link
Contributor

dsharma-dc commented Nov 25, 2024

Linter failures still. Could you please run below script in your workspace:
./scripts/rust-style.sh

Please refer https://gist.github.com/dsharma-dc/a14488638a7815561571882759e7921e

@MaisenbacherD
Copy link
Contributor Author

Linter failures still. Could you please run below script in your workspace:

Thanks for the hint :) I just ran the script.

@tiagolobocastro
Copy link
Contributor

bors try

bors-openebs-mayastor bot pushed a commit that referenced this pull request Nov 26, 2024
@MaisenbacherD
Copy link
Contributor Author

MaisenbacherD commented Nov 26, 2024

I updated the spdk-rs submodule reference to the merged commit from openebs/spdk-rs#69 :)

@bors-openebs-mayastor
Copy link

try

Build failed:

@MaisenbacherD
Copy link
Contributor Author

bors try

@bors-openebs-mayastor
Copy link

🔒 Permission denied

Existing reviewers: click here to make MaisenbacherD a reviewer

@tiagolobocastro
Copy link
Contributor

You should be able to use bors with this:
bors d+

@bors-openebs-mayastor
Copy link

✌️ MaisenbacherD can now approve this pull request. To approve and merge a pull request, simply reply with bors r+. More detailed instructions are available here.

@MaisenbacherD
Copy link
Contributor Author

Resolved some more linter issues :)

@MaisenbacherD
Copy link
Contributor Author

bors d+

@bors-openebs-mayastor
Copy link

✌️ MaisenbacherD can now approve this pull request. To approve and merge a pull request, simply reply with bors r+. More detailed instructions are available here.

@MaisenbacherD
Copy link
Contributor Author

bors try

bors-openebs-mayastor bot pushed a commit that referenced this pull request Nov 26, 2024
io-engine/src/bdev/ftl.rs Outdated Show resolved Hide resolved
io-engine/src/bdev/ftl.rs Show resolved Hide resolved
@bors-openebs-mayastor
Copy link

try

Timed out.

@MaisenbacherD
Copy link
Contributor Author

Updated spdk-rs submodule reference openebs/spdk-rs#70 (review)

MaisenbacherD and others added 3 commits November 28, 2024 09:38
The SPDK ftl bdev allows to create a layered device with a (fast) cache
device for buffering writes that get eventually flushed out sequentially
to a base device. SDPK ftl is also known as the Cloud Storage
Acceleration Layer (CSAL).

This kind of device potentially enables the use of emerging storage
interfaces like Zoned Namespace (ZNS) or Flexible Data Placement (FDP)
capable NVMe devices. Up to this point, those NVMe command sets are not
yet supported in SPDK upstream. However, the acceleration aspect of a
fast cache device already adds value.
With future support of new devices for SDPK ftl, Mayastor would already
be capable of utilizing those features simply by upgrading SDPK.

For now, the `ftl_mount_fs` test cases are hidden behind the
`nvme-pci-tests` flag because PCIe devices are required for this test
until SPDK v24.09 is picked up, which introduces variable sector size
emulation for ftl devices.
To run these tests use the following:
```
RUST_LOG=TRACE cargo test --features nvme-pci-tests -- --test-threads 1 \
--test ftl_mount_fs --nocapture
```

This patch introduces a new ftl device uri scheme:
```
ftl:///$ftl_device_name?bbdev=$bbdev_uri_percent_encoded&cbdev=$cbdev_uri_percent_encoded
```
The bbdev_uri and cbdev_uri need to use percent encoding on '?' (= '%3F')
and '&' (= '%26') segment dividers. This is needed so we can successfully
parse the ftl uri. Optionally, the sub-uris may also be fully
percent-encoded.

With SPDK v24.05 only PCIe devices will work where the cache device is
formatted to 4KiB+64B LBA format and the base device to 4KiB LBA format.

From SPDK v24.09 on, any device with a block size of 4KiB will work for
both cache and base device.

CSAL paper reference:
https://dl.acm.org/doi/10.1145/3627703.3629566

Co-authored-by: Indraneel M <[email protected]>
Signed-off-by: Dennis Maisenbacher <[email protected]>
Init SPDK tracing when `MayastorEnvironment.num_enties` is set to a
positive integer. This can be helpfull when developing new features.
Traces can be found in `/dev/shm` and have the pid or if not negative
the `MayastorEnvironment.shm_id` as a suffix.

Further information about traces and how to read the captured traces can
be found here: https://spdk.io/doc/nvmf_tgt_tracepoints.html

Signed-off-by: Dennis Maisenbacher <[email protected]>
@MaisenbacherD
Copy link
Contributor Author

@dsharma-dc Thanks for your comments :)
I addressed them.

@MaisenbacherD
Copy link
Contributor Author

bors try

bors-openebs-mayastor bot pushed a commit that referenced this pull request Nov 28, 2024
@bors-openebs-mayastor
Copy link

try

Build succeeded:

@MaisenbacherD
Copy link
Contributor Author

bors merge

@bors-openebs-mayastor
Copy link

🕐 Waiting for PR status (GitHub check) to be set, probably by CI. Bors will automatically try to run when all required PR statuses are set.

@tiagolobocastro
Copy link
Contributor

bors merge

bors-openebs-mayastor bot pushed a commit that referenced this pull request Nov 28, 2024
1771: Introduce new CSAL ftl bdev r=tiagolobocastro a=MaisenbacherD

For this PR to be merged the PR openebs/spdk-rs#67
for spdk-rs needs to be resolved and the submodule reference must be
updated accordingly. :)

The SPDK ftl bdev allows to create a layered device with a (fast) cache
device for buffering writes that get eventually flushed out sequentially
to a base device. SDPK ftl is also known as the Cloud Storage
Acceleration Layer (CSAL).

This kind of device potentially enables the use of emerging storage
interfaces like Zoned Namespace (ZNS) or Flexible Data Placement (FDP)
capable NVMe devices. Up to this point, those NVMe command sets are not
yet supported in SPDK upstream. However, the acceleration aspect of a
fast cache device already adds value.
With future support of new devices for SDPK ftl, Mayastor would already
be capable of utilizing those features simply by upgrading SDPK.

For now, the `ftl_mount_fs` test cases are hidden behind the `ignore`
attribute because PCIe devices are required for this test until
SPDK v24.09 is picked up, which introduces variable sector size emulation
for ftl devices.
To run these tests use the following:
```
RUST_LOG=TRACE cargo test -- --test-threads 1 --test ftl_mount_fs --nocapture --ignored
```

This patch introduces a new ftl device uri scheme:
```
ftl:///<ftl-device-name>?bbdev=<dev-uri-nested-encoding>&cbdev=<dev-uri-nested-encoding>
```

`<dev-uri-nested-encoding>` can be any already valid device uri where '?'
are replaced with '!' and '&' are replaced with '|'.
With SPDK v24.05 only PCIe devices will work where the cache device is
formatted to 4KiB+64B LBA format and the base device to 4KiB LBA format.

From SPDK v24.09 on, any device with a block size of 4KiB will work for
both cache and base device.

CSAL paper reference:
https://dl.acm.org/doi/10.1145/3627703.3629566

Co-authored-by: Dennis Maisenbacher <[email protected]>
@bors-openebs-mayastor
Copy link

This PR was included in a batch that successfully built, but then failed to merge into develop. It will not be retried.

Additional information:

Response status code: 422
{"message":"All comments must be resolved.","documentation_url":"https://docs.github.com/articles/about-protected-branches","status":"422"}

@tiagolobocastro
Copy link
Contributor

bors merge

bors-openebs-mayastor bot pushed a commit that referenced this pull request Nov 28, 2024
1771: Introduce new CSAL ftl bdev r=tiagolobocastro a=MaisenbacherD

For this PR to be merged the PR openebs/spdk-rs#67
for spdk-rs needs to be resolved and the submodule reference must be
updated accordingly. :)

The SPDK ftl bdev allows to create a layered device with a (fast) cache
device for buffering writes that get eventually flushed out sequentially
to a base device. SDPK ftl is also known as the Cloud Storage
Acceleration Layer (CSAL).

This kind of device potentially enables the use of emerging storage
interfaces like Zoned Namespace (ZNS) or Flexible Data Placement (FDP)
capable NVMe devices. Up to this point, those NVMe command sets are not
yet supported in SPDK upstream. However, the acceleration aspect of a
fast cache device already adds value.
With future support of new devices for SDPK ftl, Mayastor would already
be capable of utilizing those features simply by upgrading SDPK.

For now, the `ftl_mount_fs` test cases are hidden behind the `ignore`
attribute because PCIe devices are required for this test until
SPDK v24.09 is picked up, which introduces variable sector size emulation
for ftl devices.
To run these tests use the following:
```
RUST_LOG=TRACE cargo test -- --test-threads 1 --test ftl_mount_fs --nocapture --ignored
```

This patch introduces a new ftl device uri scheme:
```
ftl:///<ftl-device-name>?bbdev=<dev-uri-nested-encoding>&cbdev=<dev-uri-nested-encoding>
```

`<dev-uri-nested-encoding>` can be any already valid device uri where '?'
are replaced with '!' and '&' are replaced with '|'.
With SPDK v24.05 only PCIe devices will work where the cache device is
formatted to 4KiB+64B LBA format and the base device to 4KiB LBA format.

From SPDK v24.09 on, any device with a block size of 4KiB will work for
both cache and base device.

CSAL paper reference:
https://dl.acm.org/doi/10.1145/3627703.3629566

Co-authored-by: Dennis Maisenbacher <[email protected]>
@bors-openebs-mayastor
Copy link

This PR was included in a batch that successfully built, but then failed to merge into develop. It will not be retried.

Additional information:

Response status code: 422
{"message":"All comments must be resolved.","documentation_url":"https://docs.github.com/articles/about-protected-branches","status":"422"}

@tiagolobocastro
Copy link
Contributor

doh, had missed a couple
bors merge

@bors-openebs-mayastor
Copy link

Build succeeded:

@bors-openebs-mayastor bors-openebs-mayastor bot merged commit fb91903 into openebs:develop Nov 28, 2024
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants