
On Fri, Jan 03, 2020 at 02:56:50PM +0100, Gionatan Danti wrote:
Il 03-01-2020 11:26 Daniel P. Berrangé ha scritto:
virtlockd also uses fcntl(), however, it doesn't have to acquire locks on the file/block device directly. It can use a look-aside file for locking. For example a path under /var/lib/libvirt/lock. This means that locks on block devices for /dev/sda1 would be held as /var/lib/libvirt/lock/$HASH(/dev/sda1)
If you mount /var/lib/libvirt/lock on NFS, these locks now apply across all machines which use the same block devices. This is useful when your block device storage is network based (iSCSI, RBD, etc).
Hi Daniel, if I understand the docs correctly, this locking scheme is really useful for raw block devices, right?
Now that Qemu automatically locks file-based vdisks, what is the main advantage of virtlockd locking?
QEMU's locking should be good enough for file based images. There isn't a clear benefit to virtlockd in this case.
There are some issues with libvirt's locking though where we haven't always released/re-acquired locks at the correct time when dealing with block jobs. As long as your not using snapshots, block rebase, block mirror APIs, it'll be ok though.
While I am not an heavy user of external snapshot and other block-related operation, I occasionally use them (and, in these cases, I found them very useful).
Does it means that I should avoid relying on virtlockd for locking? Should I rely on Qemu locks only?
As above, QEMU's locking is good enough to rely on for file based images. The flaws I mention with libvirt might actually finally be something we have fixed in 5.10.0 with QEMU 4.2.0, since we can finally use "blockdev" syntax for configuring disks. Copying Peter to confirm/deny this... Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|