qemu-block
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-block] [PATCH v3 00/32] Dynamic module loading for block drive


From: John Snow
Subject: Re: [Qemu-block] [PATCH v3 00/32] Dynamic module loading for block drivers
Date: Thu, 7 Jul 2016 16:01:12 -0400
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.1.1


On 07/05/2016 11:24 AM, Colin Lord wrote:
> This is the next version of this patch series. The first three patches
> in the series are mostly the same as they were last time, but with the
> issues mentioned in the reviews fixed. Most notably this means much less
> copy-paste happening in block.c.
> 
> The new changes, and the reason this series is so large, is a result of
> isolating the block driver probe functions from the rest of the drivers.
> This was mentioned in the reviews from the last version as something
> that should be added. This allows the probes to be accessed without
> needing to load all the modules. There are quite a few probes, which is
> why there are so many patches in this series. I tried to keep the
> patches where I was relocating the code separate from the patches where
> the probe function signatures were changed.
> 
> The probe functions now return both a score and a format/protocol name,
> which allows them to be completely separate from the drivers they
> correspond to. I didn't put all the probe functions in the same file as
> Fam suggested because it turns out there are some naming conflicts
> between some macros commonly used in the probe functions. For instance,
> QCowHeader is used in both qcow and qcow2 probes, but the meaning is
> different between them. Having separate files makes resolving these
> conflicts simple.
> 
> Also, just as a point of interest, I've done some basic profiling of my
> own to see what performance benefits there are to be made. I recorded
> the time to main of each option that you can enable/disable in the
> configuration by enabling each option by itself while explicitly
> disabling all other options. With each configuration I ran qemu 5 times
> while recording the time to main. All the results are in milliseconds.
> 
> minimal config      2.772
> vhdx                2.776
> attr                2.786
> coroutine-pool      2.836
> bzip                2.856
> linux-aio           2.867
> vnc-jpeg            2.872
> snappy              2.875
> fdt                 2.888
> brlapi              2.916
> vhost-net           2.922
> bluez               2.937
> cap-ng              2.940
> libiscsi            2.945
> nettle              2.945
> seccomp             2.973
> numa                2.983
> lzo                 2.994
> usb-redir           3.005
> cocoa               3.007
> libnfs              3.026
> vnc-sasl            3.071
> vnc-png             3.081
> virtfs              3.081
> uuid                3.086
> tpm                 3.136
> curses              3.145
> gcrypt              3.190
> smartcar            3.242
> rdma                3.570
> jemalloc            3.584
> glusterfs           3.597
> sdl                 3.677
> libusb              3.758
> libssh2             3.906
> tcmalloc            3.959
> xen                 4.151
> xen-pci-passthrough 4.167
> curl                5.245
> spice               5.289
> gnutls              5.400
> gtk                 8.782
> vte                 9.764
> rbd                 44.315
> 

Right around here is probably a pretty good place to include the
patchset changelog.

For larger series like this, you *may* also want to call on a script
written by Jeff Cody[1] to produce a patchset changelog. It works pretty
well in conjunction with git-publish[2].

(Not everybody does this. In fact, mostly just Max and I do. (You still
need at least a hand-written changelog, though.))

Using it is at your discretion, it can be useful at times.
Take a look at Max's series "[Qemu-devel] [PATCH v3 for-2.7 00/14] qapi:
Allow blockdev-add for NBD" for a good example [3].

the script git-backport-diff is usually used to check differences in a
series between an upstream and downstream version of a series, but it
can also be used to compare a v3 against a v2.

> Colin Lord (30):
>   blockdev: prepare iSCSI block driver for dynamic loading
>   blockdev: Move bochs probe into separate file
>   blockdev: Move cloop probe to its own file
>   blockdev: Move luks probe to its own file
>   blockdev: Move dmg probe to its own file
>   blockdev: Move parallels probe to its own file
>   blockdev: Move qcow probe to its own file
>   blockdev: Move qcow2 probe to its own file
>   blockdev: Move qed probe to its own file
>   blockdev: Move raw probe to its own file
>   blockdev: Move vdi probe to its own file
>   blockdev: Move vhdx probe to its own file
>   blockdev: Move vmdk probe to its own file
>   blockdev: Move vpc probe to its own file
>   blockdev: Separate bochs probe from its driver
>   blockdev: Separate cloop probe from its driver
>   blockdev: Separate luks probe from its driver
>   blockdev: Separate dmg probe from its driver
>   blockdev: Separate parallels probe from its driver
>   blockdev: Separate qcow probe from its driver
>   blockdev: Separate qcow2 probe from its driver
>   blockdev: Separate qed probe from its driver
>   blockdev: Separate raw probe from its driver
>   blockdev: Separate vdi probe from its driver
>   blockdev: Separate vhdx probe from its driver
>   blockdev: Separate vmdk probe from its driver
>   blockdev: Separate vpc probe from its driver
>   blockdev: Remove the .bdrv_probe field from BlockDrivers
>   blockdev: Separate out bdrv_probe_device functions
>   blockdev: Remove bdrv_probe_device field from BlockDriver
> 
> Marc Mari (2):
>   blockdev: Add dynamic generation of module_block.h
>   blockdev: Add dynamic module loading for block drivers
> 
>  Makefile                         |   7 ++
>  block.c                          | 181 
> +++++++++++++++++++++++++++++++--------
>  block/Makefile.objs              |   4 +
>  block/bochs.c                    |  56 +-----------
>  block/cloop.c                    |  17 +---
>  block/crypto.c                   |  22 +----
>  block/dmg.c                      |  17 +---
>  block/iscsi.c                    |  36 --------
>  block/parallels.c                |  44 +---------
>  block/probe/bochs.c              |  28 ++++++
>  block/probe/cloop.c              |  22 +++++
>  block/probe/dmg.c                |  22 +++++
>  block/probe/host_cdrom.c         |  47 ++++++++++
>  block/probe/host_device.c        |  42 +++++++++
>  block/probe/luks.c               |  26 ++++++
>  block/probe/parallels.c          |  26 ++++++
>  block/probe/qcow.c               |  22 +++++
>  block/probe/qcow2.c              |  22 +++++
>  block/probe/qed.c                |  24 ++++++
>  block/probe/raw.c                |  14 +++
>  block/probe/vdi.c                |  29 +++++++
>  block/probe/vhdx.c               |  27 ++++++
>  block/probe/vmdk.c               |  67 +++++++++++++++
>  block/probe/vpc.c                |  16 ++++
>  block/qcow.c                     |  32 +------
>  block/qcow2.c                    |  14 +--
>  block/qed.c                      |  16 +---
>  block/raw-posix.c                |  55 +-----------
>  block/raw-win32.c                |  11 +--
>  block/raw_bsd.c                  |  10 +--
>  block/vdi.c                      |  70 +--------------
>  block/vhdx.c                     |  21 +----
>  block/vmdk.c                     |  61 +------------
>  block/vpc.c                      |   9 +-
>  include/block/block_int.h        |   3 -
>  include/block/driver/bochs.h     |  40 +++++++++
>  include/block/driver/parallels.h |  26 ++++++
>  include/block/driver/qcow.h      |  21 +++++
>  include/block/driver/vdi.h       |  49 +++++++++++
>  include/block/driver/vmdk.h      |   7 ++
>  include/block/probe.h            |  33 +++++++
>  include/qemu/module.h            |   3 +
>  scripts/modules/module_block.py  | 108 +++++++++++++++++++++++
>  util/module.c                    |  38 +++-----
>  vl.c                             |  38 ++++++++
>  45 files changed, 948 insertions(+), 535 deletions(-)
>  create mode 100644 block/probe/bochs.c
>  create mode 100644 block/probe/cloop.c
>  create mode 100644 block/probe/dmg.c
>  create mode 100644 block/probe/host_cdrom.c
>  create mode 100644 block/probe/host_device.c
>  create mode 100644 block/probe/luks.c
>  create mode 100644 block/probe/parallels.c
>  create mode 100644 block/probe/qcow.c
>  create mode 100644 block/probe/qcow2.c
>  create mode 100644 block/probe/qed.c
>  create mode 100644 block/probe/raw.c
>  create mode 100644 block/probe/vdi.c
>  create mode 100644 block/probe/vhdx.c
>  create mode 100644 block/probe/vmdk.c
>  create mode 100644 block/probe/vpc.c
>  create mode 100644 include/block/driver/bochs.h
>  create mode 100644 include/block/driver/parallels.h
>  create mode 100644 include/block/driver/qcow.h
>  create mode 100644 include/block/driver/vdi.h
>  create mode 100644 include/block/driver/vmdk.h
>  create mode 100644 include/block/probe.h
>  create mode 100644 scripts/modules/module_block.py
> 

[1] https://github.com/codyprime/git-scripts
[2] https://github.com/stefanha/git-publish
[3] https://lists.gnu.org/archive/html/qemu-devel/2016-04/msg01048.html



reply via email to

[Prev in Thread] Current Thread [Next in Thread]