On 9/20/07, Roch - PAE <[EMAIL PROTECTED]> wrote:
>
> Next application modifies D0 -> D0' and also writes other
> data D3, D4. Now you have
>
>         Disk0   Disk1   Disk2   Disk3
>
>         D0      D1      D2      P0,1,2
>         D0'     D3      D4      P0',3,4
>
> But if D1 and D2 stays immutable for long time then we can
> run out of pool blocks with D0 held down in an half-freed state.
> So as we near full pool capacity, a scrubber would have to walk
> the stripes  and look for partially freed ones. Then it
> would need to do a scrubbing "read/write" on D1, D2 so that
> they become part of a new stripe with some other data
> freeing the full initial stripe.
>

Or, given a list of partial stripes (and sufficient cache), next write
of D5 could be combined with D1,D2:

         Disk0   Disk1   Disk2   Disk3

         D0      D1      D2      P0,1,2
         D0'     D3      D4      P0',3,4
         D5      free    free    P5,1,2

therefore freeing D0 and P012:

         Disk0   Disk1   Disk2   Disk3

         free    D1      D2      free
         D0'     D3      D4      P0',3,4
         D5      free    free    P5,1,2

(I assumed no need for alignment). Performance-wise, i'm guessing it
might be beneficial to "quickly" write mirrored blocks on the disk and
later combine them, freeing the now unneeded mirrors.
_______________________________________________
zfs-discuss mailing list
zfs-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/zfs-discuss

Reply via email to