Re: Add blocksize properties to libvirt

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

 



On Mon, Jul 10, 2023 at 16:39:43 +0300, Андрей Ячменёв wrote:
>    Hello!
> 
>    I want to make patch for exposing min_io_size and opt_io_size properties
>    to
>    export block topology information to the guest. This is needed to set
>    optimal
>    i/o alignment for storages in underlay.
> 
>    This option already exists in qemu but haven't been implemented yet in
>    libvirt.
> 
>    It is assumed if you do not set these values qemu wont be report that into
>    the guest. Inside guest undefined opt_io_size value transferred to
>    sys/block/{drive}/queue/optimal_io_size like 0. And filesystems like xfs
>    or
>    ext4 don't set correct aggregated io size (typicaly 32k bytes for xfs).

Note that qemu apart from the possibility to explicitly specify the size
supports also a 'backend_defaults' option, which is by default in _AUTO
mode. Inside of 'blkconf_blocksizes()' the block size defaults are then
populated.

By default in _AUTO mode 'conf->physical_block_size' and
'conf->logical_block_size' are auto-populated but not
'conf->opt_io_size' or the discard granularity setting.

I think we should give the users the possibility to enable the
qemu-configured defaults in this case knowing the proper value to
configure may be non-trivial, more on that below.

> 
>    At the moment i think to make a patch with changes to the conf and qemu
>    parts
>    of libvirt.
> 
>    These options should be added to the address tag in the guest xml to
>    section
>    for disk devices. The values should be positive integers. To use these
>    options,
>    you must use qemu.

Libvirt already handles some of the sibling values for configuring block
sizes via:

  <disk type='block' device='disk'>
    <driver name='qemu' type='raw'/>
    <source dev='/dev/sda'/>
    <geometry cyls='16383' heads='16' secs='63' trans='lba'/>
    <blockio logical_block_size='512' physical_block_size='4096'/>
    <target dev='hdj' bus='ide'/>
  </disk>

Thus you should be able to use that placement without the need to
reinvent any placement. Placing it under address would even be wrong.

>    Can you tell me if there are any additional restrictions about this
>    options
>    that should be taken into account?

In libvirt we generally try to expose config knobs which make sense for
the users to set. That requires that the users know how to set the
option properly. Based on that I'd suggest that you first and foremost
allow the users to enable the backend defaults in qemu, as that seems to
set many things optimally without the user needing to know more.

Later then you can also add knobs to fine tune the values if necessary.

Please don't forget to read our contribution guidelines and follow the
coding style we have in place.

Note that some of the knobs may not be available in all supported QEMU
versions (libvirt currently supports qemu-4.2 and newer) which may
require adding a capability check.

If you have any questions regarding specifics feel free to ask on-list
or on our IRC channel.




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux