[zfs-discuss] Performance issue with zfs send of a zvol (Again)

2009-01-20 Thread Brian H. Nelson
Nobody can comment on this?

-Brian


Brian H. Nelson wrote:
 I noticed this issue yesterday when I first started playing around with 
 zfs send/recv. This is on Solaris 10U6.

 It seems that a zfs send of a zvol issues 'volblocksize' reads to the 
 physical devices. This doesn't make any sense to me, as zfs generally 
 consolidates read/write requests to improve performance. Even the dd 
 case with the same snapshot does not exhibit this behavior. It seems to 
 be specific to zfs send.

 I checked with 8k, 64k, and 128k volblocksize, and the reads generated 
 by zfs send always seem to follow that size, while the reads with dd do not.

 The small reads seems to hurt performance of zfs send. I tested with a 
 mirror, but on another machine with a 7 disk raidz, the performance is 
 MUCH worse because the 8k reads get broken up into even smaller reads 
 and spread across the raidz.

 Is this a bug, or can someone explain why this is happening?

 Thanks
 -Brian

 Using 8k volblocksize:

 -bash-3.00# zfs send pool1/vo...@now  /dev/null

 capacity operationsbandwidth
 pool  used  avail   read  write   read  write
 ---  -  -  -  -  -  -
 pool14.01G   274G  1.88K  0  15.0M  0
   mirror 4.01G   274G  1.88K  0  15.0M  0
 c0t9d0   -  -961  0  7.46M  0
 c0t11d0  -  -968  0  7.53M  0
 ---  -  -  -  -  -  -
 == ~8k reads to pool and drives

 -bash-3.00# dd if=/dev/zvol/dsk/pool1/vo...@now of=/dev/null bs=8k

 capacity operationsbandwidth
 pool  used  avail   read  write   read  write
 ---  -  -  -  -  -  -
 pool14.01G   274G  2.25K  0  17.9M  0
   mirror 4.01G   274G  2.25K  0  17.9M  0
 c0t9d0   -  -108  0  9.00M  0
 c0t11d0  -  -109  0  8.92M  0
 ---  -  -  -  -  -  -
 == ~8k reads to pool, ~85k reads to drives


 Using volblocksize of 64k:

 -bash-3.00# zfs send pool1/vol...@now  /dev/null

 capacity operationsbandwidth
 pool  used  avail   read  write   read  write
 ---  -  -  -  -  -  -
 pool16.01G   272G378  0  23.5M  0
   mirror 6.01G   272G378  0  23.5M  0
 c0t9d0   -  -189  0  11.8M  0
 c0t11d0  -  -189  0  11.7M  0
 ---  -  -  -  -  -  -
 == ~64k reads to pool and drives

 -bash-3.00# dd if=/dev/zvol/dsk/pool1/vol...@now of=/dev/null bs=64k

 capacity operationsbandwidth
 pool  used  avail   read  write   read  write
 ---  -  -  -  -  -  -
 pool16.01G   272G414  0  25.7M  0
   mirror 6.01G   272G414  0  25.7M  0
 c0t9d0   -  -107  0  12.9M  0
 c0t11d0  -  -106  0  12.8M  0
 ---  -  -  -  -  -  -
 == ~64k reads to pool, ~124k reads to drives


 Using volblocksize of 128k:

 -bash-3.00# zfs send pool1/vol1...@now  /dev/null

 capacity operationsbandwidth
 pool  used  avail   read  write   read  write
 ---  -  -  -  -  -  -
 pool14.01G   274G188  0  23.3M  0
   mirror 4.01G   274G188  0  23.3M  0
 c0t9d0   -  - 94  0  11.7M  0
 c0t11d0  -  - 93  0  11.7M  0
 ---  -  -  -  -  -  -
 == ~128k reads to pool and drives

 -bash-3.00# dd if=/dev/zvol/dsk/pool1/vol1...@now of=/dev/null bs=128k

 capacity operationsbandwidth
 pool  used  avail   read  write   read  write
 ---  -  -  -  -  -  -
 pool14.01G   274G247  0  30.8M  0
   mirror 4.01G   274G247  0  30.8M  0
 c0t9d0   -  -122  0  15.3M  0
 c0t11d0  -  -123  0  15.5M  0
 ---  -  -  -  -  -  -
 == ~128k reads to pool and drives

   

-- 
---
Brian H. Nelson Youngstown State University
System Administrator   Media and Academic Computing
  bnelson[at]cis.ysu.edu
---

___
zfs-discuss mailing list
zfs-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/zfs-discuss


Re: [zfs-discuss] Performance issue with zfs send of a zvol (Again)

2009-01-20 Thread Richard Elling
Brian H. Nelson wrote:
 Nobody can comment on this?
 
 -Brian
 
 
 Brian H. Nelson wrote:
 I noticed this issue yesterday when I first started playing around with 
 zfs send/recv. This is on Solaris 10U6.

 It seems that a zfs send of a zvol issues 'volblocksize' reads to the 
 physical devices. This doesn't make any sense to me, as zfs generally 
 consolidates read/write requests to improve performance. Even the dd 
 case with the same snapshot does not exhibit this behavior. It seems to 
 be specific to zfs send.

 I checked with 8k, 64k, and 128k volblocksize, and the reads generated 
 by zfs send always seem to follow that size, while the reads with dd do not.

This is what I would expect, though there seems to be an optimization
opportunity.  When doing a send, the things sent are records which are
of the size volblocksize.  When doing a dd, the minimum size read will
be a record, but there may also be prefetching involved.

The optimization opportunity would be to enable prefetching when needed.
However, this may not be readily apparent on devices which allow
multiple outstanding I/Os.

 The small reads seems to hurt performance of zfs send. I tested with a 
 mirror, but on another machine with a 7 disk raidz, the performance is 
 MUCH worse because the 8k reads get broken up into even smaller reads 
 and spread across the raidz.

 Is this a bug, or can someone explain why this is happening?

This is how raidz works, today.  A record is split across the columns
of the raidz set.
  -- richard

 Thanks
 -Brian

 Using 8k volblocksize:

 -bash-3.00# zfs send pool1/vo...@now  /dev/null

 capacity operationsbandwidth
 pool  used  avail   read  write   read  write
 ---  -  -  -  -  -  -
 pool14.01G   274G  1.88K  0  15.0M  0
   mirror 4.01G   274G  1.88K  0  15.0M  0
 c0t9d0   -  -961  0  7.46M  0
 c0t11d0  -  -968  0  7.53M  0
 ---  -  -  -  -  -  -
 == ~8k reads to pool and drives

 -bash-3.00# dd if=/dev/zvol/dsk/pool1/vo...@now of=/dev/null bs=8k

 capacity operationsbandwidth
 pool  used  avail   read  write   read  write
 ---  -  -  -  -  -  -
 pool14.01G   274G  2.25K  0  17.9M  0
   mirror 4.01G   274G  2.25K  0  17.9M  0
 c0t9d0   -  -108  0  9.00M  0
 c0t11d0  -  -109  0  8.92M  0
 ---  -  -  -  -  -  -
 == ~8k reads to pool, ~85k reads to drives


 Using volblocksize of 64k:

 -bash-3.00# zfs send pool1/vol...@now  /dev/null

 capacity operationsbandwidth
 pool  used  avail   read  write   read  write
 ---  -  -  -  -  -  -
 pool16.01G   272G378  0  23.5M  0
   mirror 6.01G   272G378  0  23.5M  0
 c0t9d0   -  -189  0  11.8M  0
 c0t11d0  -  -189  0  11.7M  0
 ---  -  -  -  -  -  -
 == ~64k reads to pool and drives

 -bash-3.00# dd if=/dev/zvol/dsk/pool1/vol...@now of=/dev/null bs=64k

 capacity operationsbandwidth
 pool  used  avail   read  write   read  write
 ---  -  -  -  -  -  -
 pool16.01G   272G414  0  25.7M  0
   mirror 6.01G   272G414  0  25.7M  0
 c0t9d0   -  -107  0  12.9M  0
 c0t11d0  -  -106  0  12.8M  0
 ---  -  -  -  -  -  -
 == ~64k reads to pool, ~124k reads to drives


 Using volblocksize of 128k:

 -bash-3.00# zfs send pool1/vol1...@now  /dev/null

 capacity operationsbandwidth
 pool  used  avail   read  write   read  write
 ---  -  -  -  -  -  -
 pool14.01G   274G188  0  23.3M  0
   mirror 4.01G   274G188  0  23.3M  0
 c0t9d0   -  - 94  0  11.7M  0
 c0t11d0  -  - 93  0  11.7M  0
 ---  -  -  -  -  -  -
 == ~128k reads to pool and drives

 -bash-3.00# dd if=/dev/zvol/dsk/pool1/vol1...@now of=/dev/null bs=128k

 capacity operationsbandwidth
 pool  used  avail   read  write   read  write
 ---  -  -  -  -  -  -
 pool14.01G   274G247  0  30.8M  0
   mirror 4.01G   274G247  0  30.8M  0
 c0t9d0   -  -122  0  15.3M  0
 c0t11d0  -  -123  0  15.5M  0
 ---  -  -  -  -  -  -
 == ~128k reads to pool and drives

   
 
___
zfs-discuss mailing list
zfs-discuss@opensolaris.org