svn commit: r270861 - in head/sys/cddl: compat/opensolaris/kern compat/opensolaris/sys contrib/opensolaris/uts/common/fs/zfs
Steven Hartland
smh at FreeBSD.org
Sat Aug 30 21:44:33 UTC 2014
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
More information about the svn-src-all
mailing list