Skip to content

docs: add nydus v3 proposal#1903

Draft
imeoer wants to merge 1 commit into
dragonflyoss:masterfrom
imeoer:v3.0
Draft

docs: add nydus v3 proposal#1903
imeoer wants to merge 1 commit into
dragonflyoss:masterfrom
imeoer:v3.0

Conversation

@imeoer
Copy link
Copy Markdown
Collaborator

@imeoer imeoer commented Mar 24, 2026

Overview

Nydus is considering a major refactor to version v3, and we've drafted a proposal for it.

Related Issues

Please link to the relevant issue. For example: Fix #123 or Related #456.

Change Details

Please describe your changes in detail:

Test Results

If you have any relevant screenshots or videos that can help illustrate your changes, please add them here.

Change Type

Please select the type of change your pull request relates to:

  • Bug Fix
  • Feature Addition
  • Documentation Update
  • Code Refactoring
  • Performance Improvement
  • Other (please describe)

Self-Checklist

Before submitting a pull request, please ensure you have completed the following:

  • I have run a code style check and addressed any warnings/errors.
  • I have added appropriate comments to my code (if applicable).
  • I have updated the documentation (if applicable).
  • I have written appropriate unit tests.

Signed-off-by: imeoer <yansong.ys@antgroup.com>
Copy link
Copy Markdown
Contributor

@Fricounet Fricounet left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A lot of good things I look forward to!

Comment thread docs/nydus-v3-proposal.md
## Overall Improvements

- Consolidate and simplify command-line arguments, APIs, and configuration formats.
- Remove features that are no longer needed or have been effectively unmaintained.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do you have a list of what you have in mind there?

Comment thread docs/nydus-v3-proposal.md
Comment on lines +163 to +193
``` yaml
# Nydusd configuration

backend:
# Type: registry | localfs | oss
type: registry
config:
# Drop the read request once http request timeout, in seconds
timeout: 5
# Drop the read request once http connection timeout, in seconds
connect_timeout: 5
# Retry count when read request failed
retry_limit: 0
proxy:
url:

cache:
# Type: blobcache | dummy
type: blobcache
config:
# Directory of cache files, only for local
work_dir: /cache

prefetch:
# Enable blob prefetch
enable: false
# Prefetch thread count
threads_count: 10
# Limit prefetch bandwidth to 1MiB/s
bandwidth_rate: 1048576
```
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is that the complete config format envisioned there? Or are there other knobs which are missing?

Comment thread docs/nydus-v3-proposal.md
Comment on lines +246 to +249
| FUSE + Virtiofs | Mount meta and blob files as FUSE, expose through Virtiofs to guest | Frequent kernel/user context switches, high file operation overhead |
| Virtiofs + Blobs | Expose blob directory via Virtiofs, guest mounts meta + blobs as EROFS | EROFS DAX integration causes compatibility issues |
| Virtio-blk + Blobs | Build meta + blobs into virtio-blk device, guest mounts as EROFS | No DAX support, causes guest/host double page cache waste |
| Virtio-pmem + Local Blobs | Map local meta + blob files to mmap region as virtio-pmem device | Requires pre-downloaded blobs, no on-demand fetching |
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could we enrich this with how each approach can be done currently (ie using which config flags). I know this has been a massive source of confusion for me in the past so would love to see that clarified

Comment thread docs/nydus-v3-proposal.md
### Functional Changes

- Simplify the API surface and adopt a more mature HTTP server framework to improve concurrency.
- Switch to YAML as the configuration format and simplify the configuration model.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

definitely something I'd like to see! The current json config is hard to reason about and it's painful to figure out which option is doing what

Comment thread docs/nydus-v3-proposal.md
### Functional Changes

- Embed CRC32 into chunk metadata by default.
- Support build-time deduplication based on chunk dictionaries.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just curious ,what's the benefit?

Comment thread docs/nydus-v3-proposal.md
- Introduce a stricter filesystem test suite.
- Reduce CI runtime for integration tests.

## Nydus Build Tool (nydus-image)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the idea with nydus-image is that it's the low level tool that allows for interacting with nydus images but only locally right? For registry interactions, nydus-image rely on higher level tools (like nydusify) to get the image from the registry and present it locally in a way that's understandable for nydus-image right?

Comment thread docs/nydus-v3-proposal.md
--log-level <log-level>
Log level: [default: info] [possible values: trace, debug, info, warn, error]
--type <type>
Conversion type: [default: dir-nydus] [possible values: dir-nydus, tar-nydus]
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

potentially, would we consider supporting a diroci-nydus or taroci-nydus option which can work witch images if they are in an OCI tar format? (imo that's also fine to consider that nydus-image won't support this and it's the role of the caller to handle unpacking the tar image in a directory for nydus-image to consume)

Comment thread docs/nydus-v3-proposal.md
Usage: nydusd <COMMAND> [OPTIONS]

Commands:
fuse [default] Run as a FUSE daemon to mount nydus image
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no erofs?

Comment thread docs/nydus-v3-proposal.md

# For fuse, prefetch subcommand
--apisock <apisock>
Path to the nydus daemon administration API socket
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Path to the nydus daemon administration API socket
Path where the nydus daemon administration API socket will be created

small nit just so that it's clear that nydusd is creating the socket and does not expect it to be there. In opposition to the config and bootstrap flags where the files need to be present

Comment thread docs/nydus-v3-proposal.md

### API

``` shell
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe consider adding the API that will be used to pass the config that shouldn't be written to disk?

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.

2 participants