All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Richard W.M. Jones" <rjones@redhat.com>
To: Teng-Feng Yang <shinrairis@gmail.com>
Cc: pbonzini@redhat.com, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] TRIM/DISCARD/UNMAP support on qemu-nbd
Date: Thu, 2 Jan 2014 16:15:03 +0000	[thread overview]
Message-ID: <20140102161503.GA14565@redhat.com> (raw)
In-Reply-To: <CAKTMprM8tuGyppzWHVj0ViPan4nuCz0oveJOCA2dcVLxZ2t7=w@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 3520 bytes --]

On Mon, Dec 30, 2013 at 07:58:29PM +0800, Teng-Feng Yang wrote:
> I have been studying QCOW2 file format for a couple of days, and I am
> a little bit confused about whether QCOW2 supports UNMAP or not.
> As I surf through internet, some mailing list discussion had mentioned
> that qemu-nbd and nbd module both support UNMAP command.
> So I follow the steps below on my machine (Ubuntu 13.10 with linux
> kernel 3.12) to test if qemu-nbd and QCOW2 do support UNMAP.
> 
> 1. Create a qcow2 file via qemu-img
>     > sudo qemu-img create -f qcow2 -o cluster_size=524288 base.qcow2 1G
> 
> 2. Connect this qcow2 file with qemu-nbd
>     > sudo qemu-nbd -c /dev/nbd0 base.qcow2 --discard=unmap
> 
> 3. Use sg_unmap command to issue UNMAP command to this NBD
>     > sudo sg_unmap --lba=0 --num=1 /dev/nbd0
> 
> Everytime I get the following error message:
> 
>     unmap cdb: 42 00 00 00 00 00 00 00 18 00
> unmap: pass through os error: Inappropriate ioctl for device
> UNMAP failed (use '-v' to get more information)
> 
> I also try to format this nbd device with EXT4 and mount it, but still
> cannot perform fstrim on the mount point.
> 
> Have I done anything wrong?

There are a lot of factors for getting unmap/discard/trim to work,
including:

 - guest tools (sg_unmap) or guest filesystem must support it
 - guest kernel must support it
 - host qemu must support it
 - host filesystem/etc must support it

My (possibly weak) understanding of the upstream qemu code is that
unmap/discard/trim is not supported in qcow2.  It is only supported in
raw files when using a POSIX-like host OS which has either of:

 - block devices supporting BLKDISCARDZEROES
 - files on XFS
 - files on other filesystems that support FALLOC_FL_PUNCH_HOLE (eg ext4)

Having said that, I did some tests using libguestfs and I could not
show that unmap was working, either using raw or qcow2 (both on ext4),
with virtio-scsi, and recent kernel & qemu.  I did not see any errors,
but also I don't see what I'm doing wrong.

Attached is my test script.

You will need to compile libguestfs with:

  ./configure --with-extra-packages="sg3_utils"

The results on my machine are:

$ /tmp/sparsetest.sh 
0 /tmp/test1
0 /tmp/test2
Read Capacity results:
   Protection: prot_en=0, p_type=0, p_i_exponent=0
   Logical block provisioning: lbpme=1, lbprz=0
   Last logical block address=204799 (0x31fff), Number of logical blocks=204800
   Logical block length=512 bytes
   Logical blocks per physical block exponent=0
   Lowest aligned logical block address=0
Hence:
   Device size: 104857600 bytes, 100.0 MiB, 0.10 GB
Block limits VPD page (SBC):
  Write same no zero (WSNZ): 1
  Maximum compare and write length: 0 blocks
  Optimal transfer length granularity: 0 blocks
  Maximum transfer length: 0 blocks
  Optimal transfer length: 0 blocks
  Maximum prefetch length: 0 blocks
  Maximum unmap LBA count: 0
  Maximum unmap block descriptor count: 0
  Optimal unmap granularity: 8
  Unmap granularity alignment valid: 0
  Unmap granularity alignment: 0
  Maximum write same length: 0x0 blocks

16M	  /tmp/test1           <--- note no sparseness is created
16M	  /tmp/test2

Please let us know if you get this working, because I'd really like to
fix virt-sparsify so it can work in-place!

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
virt-p2v converts physical machines to virtual machines.  Boot with a
live CD or over the network (PXE) and turn machines into KVM guests.
http://libguestfs.org/virt-v2v

[-- Attachment #2: sparsetest.sh --]
[-- Type: application/x-sh, Size: 843 bytes --]

  reply	other threads:[~2014-01-02 16:15 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-30 11:58 [Qemu-devel] TRIM/DISCARD/UNMAP support on qemu-nbd Teng-Feng Yang
2014-01-02 16:15 ` Richard W.M. Jones [this message]
2014-01-07 14:48   ` Paolo Bonzini
2014-01-07 20:27     ` Richard W.M. Jones
2014-01-07 20:48       ` Paolo Bonzini
2014-01-07 21:22         ` Richard W.M. Jones
2014-01-08 22:11           ` Paolo Bonzini
2014-01-08 22:24             ` Richard W.M. Jones
2014-01-08 22:45               ` Paolo Bonzini
2014-01-08 22:53                 ` Richard W.M. Jones
2014-01-09  7:02                   ` Paolo Bonzini
2014-01-07 21:27         ` Richard W.M. Jones
2014-01-06  2:45 ` Stefan Hajnoczi

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=20140102161503.GA14565@redhat.com \
    --to=rjones@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=shinrairis@gmail.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.