Actually it seems to be 3/4:

dsl_pool.c
    391                 zfs_write_limit_max = ptob(physmem) >> 
zfs_write_limit_shift;
    392                 zfs_write_limit_inflated = MAX(zfs_write_limit_min,
    393                     spa_get_asize(dp->dp_spa, zfs_write_limit_max));

While spa_get_asize is:

spa_misc.c
   1249 uint64_t
   1250 spa_get_asize(spa_t *spa, uint64_t lsize)
   1251 {
   1252         /*
   1253          * For now, the worst case is 512-byte RAID-Z blocks, in which
   1254          * case the space requirement is exactly 2x; so just assume 
that.
   1255          * Add to this the fact that we can have up to 3 DVAs per bp, 
and
   1256          * we have to multiply by a total of 6x.
   1257          */
   1258         return (lsize * 6);
   1259 }

Which will result in:
   zfs_write_limit_inflated = MAX((32 << 20), (ptob(physmem) >> 3) * 6);

Bob Friesenhahn wrote:
> Even if I set zfs_write_limit_override to 8053063680 I am unable to
> achieve the massive writes that Solaris 10 (141415-03) sends to my
> drive array by default.
> 
> When I read the blog entry at
> http://blogs.sun.com/roch/entry/the_new_zfs_write_throttle, I see this
> statement:
> 
> "The new code keeps track of the amount of data accepted in a TXG and
> the time it takes to sync. It dynamically adjusts that amount so that
> each TXG sync takes about 5 seconds (txg_time variable). It also
> clamps the limit to no more than 1/8th of physical memory."
> 
> On my system I see that the "about 5 seconds" rule is being followed,
> but see no sign of clamping the limit to no more than 1/8th of
> physical memory.  There is no sign of clamping at all.  The writen
> data is captured and does take about 5 seconds to write (good
> estimate).
> 
> On my system with 20GB of RAM, and ARC memory limit set to 10GB
> (zfs:zfs_arc_max = 0x280000000), the maximum zfs_write_limit_override
> value I can set is on the order of 8053063680, yet this results in a
> much smaller amount of data being written per write cycle than the
> Solaris 10 default operation.  The default operation is 24 seconds of
> no write activity followed by 5 seconds of write.
> 
> On my system, 1/8 of memory would be 2.5GB.  If I set the
> zfs_write_limit_override value to 2684354560 then it seems that about
> 1.2 seconds of data is captured for write.  In this case I see 5
> seconds of no write followed by maybe a second of write.
> 
> This causes me to believe that the algorithm is not implemented as
> described in Solaris 10.
> 
> Bob
_______________________________________________
zfs-discuss mailing list
zfs-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/zfs-discuss

Reply via email to