Author: smh
Date: Sat Aug 30 21:44:32 2014
New Revision: 270861
URL: http://svnweb.freebsd.org/changeset/base/270861

Log:
  Ensure that ZFS ARC free memory checks include cached pages
  
  Also restore kmem_used() check for i386 as it has KVA limits that the raw
  page counts above don't consider
  
  PR:           187594
  Reviewed by:  peter
  X-MFC-With: r270759
  Review:       D700
  Sponsored by: Multiplay

Modified:
  head/sys/cddl/compat/opensolaris/kern/opensolaris_kmem.c
  head/sys/cddl/compat/opensolaris/sys/kmem.h
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c

Modified: head/sys/cddl/compat/opensolaris/kern/opensolaris_kmem.c
==============================================================================
--- head/sys/cddl/compat/opensolaris/kern/opensolaris_kmem.c    Sat Aug 30 
20:26:30 2014        (r270860)
+++ head/sys/cddl/compat/opensolaris/kern/opensolaris_kmem.c    Sat Aug 30 
21:44:32 2014        (r270861)
@@ -152,7 +152,7 @@ u_int
 kmem_free_count(void)
 {
 
-       return (vm_cnt.v_free_count);
+       return (vm_cnt.v_free_count + vm_cnt.v_cache_count);
 }
 
 u_int
@@ -169,6 +169,13 @@ kmem_size(void)
        return (kmem_size_val);
 }
 
+uint64_t
+kmem_used(void)
+{
+
+       return (vmem_size(kmem_arena, VMEM_ALLOC));
+}
+
 static int
 kmem_std_constructor(void *mem, int size __unused, void *private, int flags)
 {

Modified: head/sys/cddl/compat/opensolaris/sys/kmem.h
==============================================================================
--- head/sys/cddl/compat/opensolaris/sys/kmem.h Sat Aug 30 20:26:30 2014        
(r270860)
+++ head/sys/cddl/compat/opensolaris/sys/kmem.h Sat Aug 30 21:44:32 2014        
(r270861)
@@ -66,6 +66,7 @@ typedef struct kmem_cache {
 void *zfs_kmem_alloc(size_t size, int kmflags);
 void zfs_kmem_free(void *buf, size_t size);
 uint64_t kmem_size(void);
+uint64_t kmem_used(void);
 u_int kmem_page_count(void);
 
 /*

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c   Sat Aug 30 
20:26:30 2014        (r270860)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c   Sat Aug 30 
21:44:32 2014        (r270861)
@@ -2563,6 +2563,14 @@ arc_reclaim_needed(void)
 #endif /* sun */
 
 #else
+#ifdef __i386__
+       /* i386 has KVA limits that the raw page counts above don't consider */
+       if (kmem_used() > (kmem_size() * 3) / 4) {
+               DTRACE_PROBE2(arc__reclaim_used, uint64_t,
+                   kmem_used(), uint64_t, (kmem_size() * 3) / 4);
+               return (1);
+       }
+#endif
        if (spa_get_random(100) == 0)
                return (1);
 #endif
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to