From: Cornelia Huck <cohuck@redhat.com>
To: Alex Williamson <alex.williamson@redhat.com>
Cc: "kvm@vger.kernel.org" <kvm@vger.kernel.org>,
"Libvirt Devel" <libvir-list@redhat.com>,
"Kirti Wankhede" <kwankhede@nvidia.com>,
"Erik Skultety" <eskultet@redhat.com>,
"Pavel Hrdina" <phrdina@redhat.com>,
"Daniel P. Berrangé" <berrange@redhat.com>,
"Sylvain Bauza" <sbauza@redhat.com>,
"Christophe de Dinechin" <dinechin@redhat.com>,
"Matthew Rosato" <mjrosato@linux.ibm.com>
Subject: Re: mdevctl: A shoestring mediated device management and persistence utility
Date: Wed, 26 Jun 2019 11:58:06 +0200 [thread overview]
Message-ID: <20190626115806.3435c45c.cohuck@redhat.com> (raw)
In-Reply-To: <20190625165251.609f6266@x1.home>
On Tue, 25 Jun 2019 16:52:51 -0600
Alex Williamson <alex.williamson@redhat.com> wrote:
> Hi,
>
> Based on the discussions we've had, I've rewritten the bulk of
> mdevctl. I think it largely does everything we want now, modulo
> devices that will need some sort of 1:N values per key for
> configuration in the config file versus the 1:1 key:value setup we
> currently have (so don't consider the format final just yet).
We might want to factor out that config format handling while we're
trying to finalize it.
cc:ing Matt for his awareness. I'm currently not quite sure how to
handle those vfio-ap "write several values to an attribute one at a
time" requirements. Maybe 1:N key:value is the way to go; maybe we
need/want JSON or something like that.
>
> We now support "transient" devices and there's no distinction or
> difference in handling of such devices whether they're created by
> mdevctl or externally. All devices will also have systemd management,
> though systemd is no longer required, it's used if available. The
> instance name used for systemd device units has also changed to allow
> us to use BindsTo= such that services are not only created, but are
> also removed if the device is removed. Unfortunately it's not a simple
> UUID via the systemd route any longer.
That's a bit unfortunate; however, making it workable without systemd
certainly is a good thing :)
>
> Since the original posting, the project has moved from my personal
> github to here:
>
> https://github.com/mdevctl/mdevctl
>
> Please see the README there for overview of the new commands and
> example of their usage. There is no attempt to maintain backwards
> compatibility with previous versions, this tool is in its infancy.
> Also since the original posting, RPM packaging is included, so simply
> run 'make rpm' and install the resulting package.
Nice.
>
> Highlights of this version include proper argument parsing via getopts
> so that options can be provided in any order. I'm still using the
> format 'mdevctl {command} [options]' but now it's consistent that all
> the options come after the command, in any order. I think this is
> relatively consistent with a variety of other tools.
Parsing via getops is also very nice.
>
> Devices are no longer automatically persisted, we handle them as
> transient, but we also can promote them to persistent through the
> 'define' command. The define, undefine, and modify commands all
> operate only on the config file, so that we can define separate from
> creating. When promoting from a transient to defined device, we can
> use the existing device to create the config. Both the type and the
> startup of a device can be modified in the config, without affecting
> the running device.
>
> Starting an mdev device no longer relies exclusively on a saved config,
> the device can be fully specified via options to create a transient
> device. Specifying only a uuid is also sufficient for a defined
> device. Some consideration has also been given to uuid collisions.
> The mdev interface in the kernel prevents multiple mdevs with the same
> uuid running concurrently, but mdevctl allows mdevs to be defined with
> the same uuid under separate parent devices. Some options therefore
> allow both a uuid and parent to be specified and require this if the
> uuid alone is ambiguous. Clearly starting two such devices at the same
> time will fail and is left to higher level tools to manage, just like
> the ability to define more devices than there are available instances on
> the host system.
I still have to look into the details of this.
>
> The stop and list commands are largely the same ideas as previous
> though the semantics are completely different. Listing running devices
> now notes which are defined versus transient. Perhaps it might also be
> useful when listing defined devices to note which are running.
Yes, I think it would be useful.
>
> The sbin/libexec split of mdevctl has been squashed. There are some
> commands in the script that are currently only intended to be used from
> udev or systemd, these are simply excluded from the help. It's
> possible we may want to promote the start-parent-mdevs command out of
> this class, but the rest are specifically systemd helpers.
>
> I'll include the current help test message below for further semantic
> details, but please have a look-see, or better yet give it a try.
Had a quick look, sent two pull requests with some minor tweaks. Still
have to do a proper review, and actually try the thing on an s390.
> Thanks,
>
> Alex
>
> PS - I'm looking at adding udev change events when a device registers
> or unregisters with the mdev core, which should help us know when to
> trigger creation of persistent, auto started devices. That support is
> included here with the MDEV_STATE="registered|unregistered" environment
> values. Particularly, kvmgt now supports dynamic loading an unloading,
> so as long as the enable_gvt=1 option is provided to the i915 driver
> mdev support can come and go independent of the parent device. The
> change uevents are necessary to trigger on that, so I'd appreciate any
> feedback on those as well. Until then, the persistence of mdevctl
> really depends on mdev support on the parent device being _completely_
> setup prior to processing the udev rules.
I'll need to think about this. Do you have some preliminary patches
somewhere?
>
> # mdevctl
> Usage: mdevctl {COMMAND} [options...]
>
> Available commands:
> define Define a config for an mdev device. Options:
> <-u|--uuid=UUID> [<-p|--parent=PARENT> <-t|--type=TYPE>] [-a|--auto]
> If the device specified by the UUID currently exists, parent
> and type may be omitted to use the existing values. The auto
> option marks the device to start on parent availability.
> Running devices are unaffected by this command.
> undefine Undefine, or remove a config for an mdev device. Options:
> <-u|--uuid=UUID> [-p|--parent=PARENT]
> If a UUID exists for multiple parents, all will be removed
> unless a parent is specified. Running devices are unaffected
> by this command.
> modify Modify the config for a defined mdev device. Options:
> <-u|--uuid=UUID> [-p|--parent=PARENT] [-t|--type=TYPE] \
> [[-a|--auto]|[-m|--manual]]
> The parent option further identifies a UUID if it is not
> unique, the parent for a device cannot be modified via this
> command, undefine and re-define should be used instead. The
> mdev type and startup mode can be modified. Running devices
> are unaffected by this command.
> start Start an mdev device. Options:
> <-u|--uuid=UUID> [-p|--parent=PARENT] [-t|--type=TYPE]
> If the UUID is previously defined and unique, the UUID is
> sufficient to start the device (UUIDs may not collide between
> running devices). If a UUID is used in multiple defined
> configs, the parent device is necessary to identify the config.
> Specifying UUID, PARENT, and TYPE allows devices to be started
> regardless of a previously defined config (ie. transient mdevs).
> stop Stop an mdev device. Options:
> <-u|--uuid=UUID>
> list List mdev devices. Options:
> [-d|--defined]|[-t|--types]
> With no options, information about the currently running mdev
> devices is provided. Specifing DEFINED lists the configuration
> of defined devices, regardless of their running state.
> Specifying TYPES lists the mdev types provided by the currently
> registered mdev parent devices on the system.
next prev parent reply other threads:[~2019-06-26 9:58 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-23 23:20 mdevctl: A shoestring mediated device management and persistence utility Alex Williamson
2019-05-24 10:11 ` Cornelia Huck
2019-05-24 14:43 ` Alex Williamson
2019-06-07 16:06 ` Halil Pasic
2019-06-11 19:45 ` Cornelia Huck
2019-06-11 20:28 ` Alex Williamson
2019-06-12 7:14 ` Cornelia Huck
2019-06-12 15:54 ` Halil Pasic
2019-06-13 10:02 ` Cornelia Huck
2019-06-12 15:07 ` Halil Pasic
2019-06-13 16:17 ` Christophe de Dinechin
2019-06-13 16:35 ` Alex Williamson
2019-06-14 9:54 ` [libvirt] " Christophe de Dinechin
2019-06-14 14:23 ` Alex Williamson
2019-06-14 15:06 ` Christophe de Dinechin
2019-06-14 16:04 ` Alex Williamson
2019-06-17 16:03 ` Cornelia Huck
2019-06-17 14:00 ` Daniel P. Berrangé
2019-06-17 14:54 ` Alex Williamson
2019-06-17 15:10 ` Daniel P. Berrangé
2019-06-17 17:05 ` Alex Williamson
2019-06-18 8:44 ` Daniel P. Berrangé
2019-06-18 11:01 ` Cornelia Huck
[not found] ` <CALOCmukPWiXiM+mN0hCTvSwfdHy5UdERU8WnvOXiBrMQ9tH3VA@mail.gmail.com>
2019-06-18 22:12 ` Alex Williamson
2019-06-19 7:28 ` Daniel P. Berrangé
2019-06-19 9:46 ` Cornelia Huck
2019-06-19 18:46 ` Alex Williamson
2019-06-20 8:24 ` Daniel P. Berrangé
[not found] ` <CALOCmu=6Xmw-_-SVXujCEcgPY2CQiBQKgfUMJ45WnZ_9XORyUw@mail.gmail.com>
2019-06-19 9:57 ` Cornelia Huck
2019-06-19 19:53 ` Alex Williamson
2019-06-25 22:52 ` Alex Williamson
2019-06-26 9:58 ` Cornelia Huck [this message]
2019-06-26 14:37 ` Alex Williamson
2019-06-27 1:53 ` Alex Williamson
2019-06-27 12:26 ` Cornelia Huck
2019-06-27 15:00 ` Matthew Rosato
2019-06-27 15:38 ` Alex Williamson
2019-06-27 16:13 ` Matthew Rosato
2019-06-27 21:15 ` Alex Williamson
2019-06-28 1:57 ` Alex Williamson
2019-06-28 9:06 ` Cornelia Huck
2019-06-28 14:01 ` Matthew Rosato
2019-06-28 17:05 ` Alex Williamson
2019-07-01 8:20 ` Cornelia Huck
2019-07-01 14:40 ` Alex Williamson
2019-07-01 17:13 ` Cornelia Huck
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190626115806.3435c45c.cohuck@redhat.com \
--to=cohuck@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=berrange@redhat.com \
--cc=dinechin@redhat.com \
--cc=eskultet@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=kwankhede@nvidia.com \
--cc=libvir-list@redhat.com \
--cc=mjrosato@linux.ibm.com \
--cc=phrdina@redhat.com \
--cc=sbauza@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.