> + ASSERT(vp);
> + zfs_inactive_impl(vp, CRED(), NULL);
> +}
> +
> +/*
> + * This value will be multiplied by zfs_dirty_data_max to determine
> + * the threshold past which we will call zfs_inactive_impl() async.
> + *
> + * Selecting the multiplier is a balance between how long we're willing to
> wait
> + * for delete/free to complete (get shell back, have a NFS thread captive,
> etc)
> + * and reducing the number of active requests in the backing taskq.
> + *
> + * 4 GiB (zfs_dirty_data_max default) * 16 (multiplier default) = 64 GiB
> + * meaning by default we will call zfs_inactive_impl async for vnodes > 64
> GiB
> + */
> +uint16_t zfs_inactive_async_multiplier = 16;
I'm not sure I understand the reasoning here. It seems like we would want
large files to be deleted async so that we improve interactive performance of
delete. Therefore we should go async if we think the deletion will be slow.
It will be slow if we have to read a lot of indirect blocks. So maybe we
should go async if number of indirect blocks is > X. (maybe X=1)
---
Reply to this email directly or view it on GitHub:
https://github.com/openzfs/openzfs/pull/61/files#r51762487
_______________________________________________
developer mailing list
[email protected]
http://lists.open-zfs.org/mailman/listinfo/developer