From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id EE76C1FF16B for ; Thu, 9 Jan 2025 15:14:03 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 39EA310265; Thu, 9 Jan 2025 15:13:49 +0100 (CET) Date: Thu, 9 Jan 2025 15:13:14 +0100 (CET) From: =?UTF-8?Q?Fabian_Gr=C3=BCnbichler?= To: Proxmox VE development discussion Message-ID: <1841615375.1037.1736431994704@webmail.proxmox.com> In-Reply-To: References: MIME-Version: 1.0 X-Priority: 3 Importance: Normal X-Mailer: Open-Xchange Mailer v7.10.6-Rev72 X-Originating-Client: open-xchange-appsuite X-SPAM-LEVEL: Spam detection results: 0 AWL 0.045 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [lvmplugin.pm] Subject: Re: [pve-devel] [PATCH-SERIES v3 pve-storage/qemu-server/pve-qemu] add external qcow2 snapshot support X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" > Alexandre Derumier via pve-devel hat am 16.12.2024 10:12 CET geschrieben: > This patch series implement qcow2 external snapshot support for files && lvm volumes > > The current internal qcow2 snapshots have bad write performance because no metadatas can be preallocated. > > This is particulary visible on a shared filesystem like ocfs2 or gfs2. > > Also other bugs are freeze/lock reported by users since years on snapshots delete on nfs > (The disk access seem to be frozen during all the delete duration) > > This also open doors for remote snapshot export-import for storage replication. a few high level remarks: - I am not sure whether we want to/can switch over to blockdev on the fly (i.e., without some sort of opt-in phase to iron out kinks). what about upgrades with running VMs? I guess some sort of flag and per-VM switching would be a better plan.. - I am also not sure whether we want to mix and match internal and external snapshots, we probably should require a storage to use it or not at creation time and fix it, to allow us to keep the handling code from exploding complexity-wise.. - if you see a way to name the block graph nodes in a deterministic fashion (i.e., have a 1:1 mapping between snapshot and block graph node name) that would be wonderful, else we'd have to find another way to improve the lookup there.. - the relevant commits and code would really benefit from a summary of the design/semantics, it's not easy to reconstruct this from the code alone - some tests would be great as well, both to verify that the code actually behaves like we expect, and also to catch regressions when it is touched again in the future - some performance numbers would also be great :) -- internal vs external snapshots using the same underlying dir/fs -- qcow2 vs qcow2 with snapshots vs raw on LVM using the same underlying disk - did you verify the space consumption on the SAN side with the LVM plugin? would be interesting to know how it holds up in practice :) I haven't done any real world testing yet since I expect that the delta for the next version won't be small either ;) > > Changelog v3: > storage: > - snapshots files now have the name of the snapshot, and "current" snapshot is the vm volname > - allow only qcow2 format for base image for simplication > - merge snapshot code in lvmplugin (qcow2 format auto enable snapshot) > - the code is a lot more simple now > > qemu-server: > - convertion -drive to modern -blockdev > This is needed for blockdev-reopen, where we need to create && switch to snapshot files with same cache,aio,... > This is also needed to live rename snapshot files (to keep volname for current snapshot) > I have implemented && tested: > - disk create,delete,resize,convert,drive_mirror, hotplug,unplug,nbd mirror,cdrom insert/eject > - block protocol: file,block_device,rbd,nbd,glusterfs > Note that it's currently incomplete: > - proxmox backup/restore code need to be converted to blockdev, help is needed > - iscsi:// path is not yet implemented (I'll look for the v4) > - efi still in drive format (not blocking, but I'll look for v4) > > The live migration between -drive ---> --blockdev seem to work without breaking, and seem to be > transparent for the guest ok, so I think we could try to target pve9 ? > > > > storage.cfg example: > > dir: local2 > path /var/liv/vz > content snippets,vztmpl,backup,images,iso,rootdir > snapext 1 > > lvm:test > vgname test > content images > > > > > > pve-storage: > > Alexandre Derumier (3): > qcow2: add external snapshot support > lvmplugin: add qcow2 snapshot > storage: vdisk_free: remove external snapshots > > src/PVE/Storage.pm | 18 ++- > src/PVE/Storage/DirPlugin.pm | 1 + > src/PVE/Storage/LVMPlugin.pm | 231 ++++++++++++++++++++++++++--- > src/PVE/Storage/Plugin.pm | 207 ++++++++++++++++++++++---- > src/test/run_test_zfspoolplugin.pl | 18 +++ > 5 files changed, 424 insertions(+), 51 deletions(-) > > > Alexandre Derumier (11): > blockdev: cmdline: convert drive to blockdev syntax > blockdev: fix cfg2cmd tests > blockdev : convert qemu_driveadd && qemu_drivedel > blockdev: vm_devices_list : fix block-query > blockdev: convert cdrom media eject/insert > blockdev: block_resize: convert to blockdev > blockdev: nbd_export: block-export-add : use drive-$id for nodename > blockdev: convert drive_mirror to blockdev_mirror > blockdev: mirror: change aio on target if io_uring is not default. > blockdev: add backing_chain support > qcow2: add external snapshot support > > PVE/QemuConfig.pm | 4 +- > PVE/QemuMigrate.pm | 2 +- > PVE/QemuServer.pm | 946 ++++++++++++++---- > test/cfg2cmd/bootorder-empty.conf.cmd | 12 +- > test/cfg2cmd/bootorder-legacy.conf.cmd | 12 +- > test/cfg2cmd/bootorder.conf.cmd | 12 +- > ...putype-icelake-client-deprecation.conf.cmd | 6 +- > test/cfg2cmd/ide.conf.cmd | 23 +- > test/cfg2cmd/pinned-version-pxe-pve.conf.cmd | 6 +- > test/cfg2cmd/pinned-version-pxe.conf.cmd | 6 +- > test/cfg2cmd/pinned-version.conf.cmd | 6 +- > test/cfg2cmd/q35-ide.conf.cmd | 23 +- > .../q35-linux-hostpci-template.conf.cmd | 3 +- > test/cfg2cmd/seabios_serial.conf.cmd | 6 +- > ...imple-balloon-free-page-reporting.conf.cmd | 6 +- > test/cfg2cmd/simple-btrfs.conf.cmd | 6 +- > test/cfg2cmd/simple-virtio-blk.conf.cmd | 6 +- > test/cfg2cmd/simple1-template.conf.cmd | 11 +- > test/cfg2cmd/simple1.conf.cmd | 6 +- > 19 files changed, 830 insertions(+), 272 deletions(-) > > > pve-qemu: > > add block-commit-replaces option patch > > ...052-block-commit-add-replaces-option.patch | 137 ++++++++++++++++++ > debian/patches/series | 1 + > 2 files changed, 138 insertions(+) > create mode 100644 debian/patches/pve/0052-block-commit-add-replaces-option.patch > > -- > > 2.39.5 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel