[linux-lvm] Snapshot question... [scaling problem]

Ross Boylan ross at biostat.ucsf.edu
Thu Apr 24 03:57:25 UTC 2008


On Tue, 2008-04-22 at 12:12 -0400, Brian J. Murrell wrote:
> On Tue, 2008-04-22 at 11:47 +0100, Stephane Chazelas wrote:
> > 
> > but
> > when you write to it, the system makes sure that unless it has
> > been done already, the block you're modifying are being copied
> > first from the "real" volume to COW volume before being modified
> > in the "real" volume.
> 
> And to be clear, the COW volumes of _all_ snapshots[1].  This is where
> the snapshot scaling problem arises.
Could someone say a bit more, because I definitely don't follow this.
If the [1] after snaphots means something, I don't know what.

I've seen references to this scaling problem before, and have never
quite gotten it.  The quoted paragraph above sounds as if it means
whenever there is a write to any volume, the COW tables for all
snapshots get the contents that are about to be overwritten.

I have multiple snapshots active, and it doesn't seem to work this way.
Some volumes have big snapshot volumes, into which substantial material
is written.  Others have small snapshot volumes, into which very little
is written.  In particular, the little ones don't seem to be getting the
writes to the big ones.  I judge how much of the COW is in use from the
output of lvdisplay (attached at bottom)

If all COW volumes get the overwritten material, then they'd all have
the same size in use.  And they don't seem to.

As I said, I'm missing something.  Could someone enlighten me?

Ross Boylan

lvdisplay for big volume shows
 LV Name                /dev/daisy/_var_spool_cyrus
 VG Name                daisy
 LV UUID                vUs6Bj-2DRx-4OVt-7FBr-K2dW-3gTV-AHpNRZ
 LV Write Access        read/write
 LV snapshot status     active destination for /dev/daisy/cyrspool
 LV Status              available
 # open                 0
 LV Size                23.62 GB
 Current LE             756
 COW-table size         12.00 GB
 COW-table LE           384
 Allocated to snapshot  29.78% 
 Snapshot chunk size    4.00 KB
 Segments               1
 Allocation             inherit
 Read ahead sectors     auto
 - currently set to     256
 Block device           254:41

and for the little one it shows
 LV Name                /dev/daisy/_var_lib_cyrus
 VG Name                daisy
 LV UUID                qkcv3k-XBYW-2gcx-pjbM-oF0g-Mlfk-P28QcH
 LV Write Access        read/write
 LV snapshot status     active destination for /dev/daisy/cyrlib
 LV Status              available
 # open                 0
 LV Size                96.00 MB
 Current LE             3
 COW-table size         128.00 MB
 COW-table LE           4
 Allocated to snapshot  33.32% 
 Snapshot chunk size    4.00 KB
 Segments               1
 Allocation             inherit
 Read ahead sectors     auto
 - currently set to     256
 Block device           254:38

I think this means the first one used 3.6G=12G*.30 while the second used
42.7MB = 128MB*.33.  The amount written to the first one exceeds the
total size available (128MB) for the 2nd snapshot.  I'm running Linux
kernel 2.6.18 as packaged for Debian.




More information about the linux-lvm mailing list