Hi Michael,

Thanks for your interest in contributing this!

(CC: +Naveen, +Keith, -linux-nvme)

Some observations and commets on your patch submission below.

Firstly, your mail delivery is broken - this is not getting through to
qemu-devel. Also, I don't think kernel developers have that much
interest in this, so no need to CC linux-nvme.

Also, please CC all maintainers (see ./scripts/get_maintainer.pl).

On Aug 23 17:30, Michael Kropaczek wrote:
>      Added support for NVMEe NameSpaces Mangement allowing the guest OS to
>      create, delete namespaces by issuing create-ns and delet-ns commands.
>      It is an extension to currently implemented Qemu nvme virtual device.
>      Virtual devices representing namespaces will be created and/or deleted
>      during Qemu's running session, at anytime.
> 
>       The implementation of the Namespaces Management consists of two patches:
>        First:  create-ns (this patch)
>        Second: delete-ns (a patch will follow)
> 

  1. Please format the commit message without the indendations.
  2. You do not need to state the patches belonging to the series (that
     goes into the cover letter - see below).

> Signed-off-by: Michael Kropaczek <michael.kropac...@solidigm.com>
> 
> Description:
> 
> Currently namespaces could be defined as follows:
> 1. Legacy Namespace - just one namespace within Nvme controller's
>    where the back-end was specified for nvme device by -drive parameter
>    pointing directly to the image file.
> 2. Additional Namespaces - specified by nvme-ns devices each having its
>    own back-end. To have multiple namespaces each needed to be specified
>    at Qemu's command line being associated with the most recently defined
>    nvme-bus from nvme device.
>    If a such additional namespace should be attached and/or detached by the
>    guest OS, nvme controller has to be linked with another device nvme-subsys.
> 
> All that have a static behavior, all need to be specified at the Qemu's 
> command
> line, all specified virtual nvme entities will be processed during Qemu's
> start-up created and provided to the guest OS.
> 
> To have a support for nvme create-ns and delete-ns commands with specified
> parameters, as the NVMe specification defines, a different approach is needed.
> Virtual devices representing namespaces need to be created and/or deleted 
> during Qemu's running session, at anytime. The back-end image sizes for a
> namespace must accommodate the payload size and size of metadata resulted
> from specified parameters. And the total capacity of the nvme controller
> together with un-allocated capacity needs to be taken into account and updated
> following the commands nvme create-ns and delete-ns respectively.
> 
> Here is the approach:
> The nvme device will get new parameters:
>  - auto-ns-path, specifies the path to to image and necessary
>    configuration files.
>  - auto-ns-purge, controls behavior when delete-ns command is issued.
>    If set to 'on' the associated back-end images will be deleted,
>    otherwise such will be preserved as backup files (not Qemu backup files)
>  - auto-ns-tnvmcap, specifies total controller's space pool in bytes that
>    can be allocated for namespaces, usually when nvme device is created
>    first time. When Qemu restarted this parameter could be omitted.
> 
> The virtual devices representing namespace will be created during the Qemu
> running session dynamically. QOM classes and instances will be created
> utilizing existing configuration scheme already used for Qemu's start-up.
> Back-end images will be created and associated with QOM namespaces (virtual
> instances) or disassociated deleted or renamed. Also it is assured that all
> settings will remain persistent over Qemu start-ups and shutdowns.
> The implementation makes it possible to combine the existing
> "Additional Namespace" implementation with the new "Managed Namespaces",
> those will coexist with obvious restrictions, like both will share the same
> NsIds space, "static" namespaces will not be deleted etc..
> 

This should go into your "cover letter". See `git format-patch
--cover-letter`.

Your two patches should be sent as a series with the above as the cover
letter. Each patch should carry a commit message explaining why it is
being done and why it is being done in a particular way, but the cover
letter should (if required) elaborate on your motivation and approach
for the series as a whole.

`git format-patch` and `git send-email` can do this properly for you.
Alternatively, you can use git-publish which is a nice frontend for
working with patch series.

Now, as for the patches themselves. There is actually already a patch
for namespace management on the list - see[1] for a 7.1-based tree with
this applied. The approach there is to pre-add a set of namespaces with
zero sized images (indicating that they are "unallocated") and then
resize them on namespace create (using blk_truncate). This limits the
number of creatable namespaces, but this
is indicated in the MN field.

The core issue with that patch is that it blocks the QEMU main thread
while the truncation is going on, which is not good and which is why
this has never been merged. However, I just peeked into
block/block-backend.c and it looks like truncate could be used with AIO
(though currently not wired up).

The same core blocking issues exist in your approach. Also, doing
filesystem stuff is a layering violation. The emulated devices really
should not break out of their "bubble", even though they can.

However! I'm a little intrigued by your approach to storing persistent
state by writing out a config file and auto loading it. I have been
considering various ways of doing that for some time since there are
other areas where we need persistent state like that (format nvm is one
example, zone state another).


  [1]: 
https://github.com/OpenMPDK/qemu/commit/a7357a4c553f4106e76e3ec052205659bcc5d741


Cheers,
Klaus

Reply via email to