On 08/31/2010 09:21, Giulio Ferro wrote:> 1) Is it a good idea to upgrade this production system to the latest 8
> stable (8.1 stable I believe)? Is it really stable?
For this question alone, I can verify that it is stable to upgrade to
the stable branch. Though on one hand it might be reasonable for you to
locally merge changes from the two points of CDDL into your source tree.
Example: (Tested here)
cd /usr/src
svn merge svn://svn.freebsd.org/base/stable/8/cddl cddl
svn merge svn://svn.freebsd.org/base/stable/8/sys/cddl sys/cddl
If you do not have any local changes to your source tree for those parts
of the branch then you should not have any problems or conflicts upon
merge & this will bring your system up-to-date with ZFSv14 in stable/8.
Another route if you use CVS would be to checkout the source tree using
Subversion and diff it locally but you should still end up with the same
result.
There are a few patches that I can recommend but they are for stable/8
that has been patched with ZFSv15 that is due to be committed some time
in September - November. Patches and descriptions below. And attached is
a UMA patch for the VFS subsystem that helps a little with performance
but not near as much as the patches below.
http://people.freebsd.org/~mm/patches/zfs/v15/stable-8-v15.patch
http://people.freebsd.org/~mm/patches/zfs/zfs_metaslab.patch
http://people.freebsd.org/~mm/patches/zfs/zfs_abe_stat_rrwlock.patch
And for the better performance question by upgrading... that is a real
hard question to answer not knowing your hardware implementation. There
really has not been that much of a performance increase that I can
account for regarding stable/8 vs. releng/8.1, or at least not yet.
PS: I have done minimal testing for V4: /nfs either my understanding of
it or the way it is setup to work is somewhat confusing but this is only
with very little knowledge of NFSv4 so please only take this as opinion
but I would not upgrade a production system to use V4: /nfs quite yet
unless the need demands it.
Regards & Good Luck,
--
jhell,v
-------------- next part --------------
diff --git a/sys/vm/uma_core.c b/sys/vm/uma_core.c
index 2dcd14f..ed07ecb 100644
--- a/sys/vm/uma_core.c
+++ b/sys/vm/uma_core.c
@@ -2727,14 +2727,26 @@ zone_free_item(uma_zone_t zone, void *item, void *udata,
}
MPASS(keg == slab->us_keg);
- /* Do we need to remove from any lists? */
+ /* Move to the appropriate list or re-queue further from the head. */
if (slab->us_freecount+1 == keg->uk_ipers) {
+ /* Partial -> free. */
LIST_REMOVE(slab, us_link);
LIST_INSERT_HEAD(&keg->uk_free_slab, slab, us_link);
} else if (slab->us_freecount == 0) {
+ /* Full -> partial. */
LIST_REMOVE(slab, us_link);
LIST_INSERT_HEAD(&keg->uk_part_slab, slab, us_link);
}
+ else {
+ /* Partial -> partial. */
+ uma_slab_t tmp;
+
+ tmp = LIST_NEXT(slab, us_link);
+ if (tmp != NULL && slab->us_freecount > tmp->us_freecount) {
+ LIST_REMOVE(slab, us_link);
+ LIST_INSERT_AFTER(tmp, slab, us_link);
+ }
+ }
/* Slab management stuff */
freei = ((unsigned long)item - (unsigned long)slab->us_data)