diff options
author | avg <avg@FreeBSD.org> | 2010-10-07 18:16:14 +0000 |
---|---|---|
committer | avg <avg@FreeBSD.org> | 2010-10-07 18:16:14 +0000 |
commit | 86ef76003513bdab705bb75c5b1eed24a4cb1a76 (patch) | |
tree | 90197c37ba99dc3c0a0b3f34b44773061099ff77 /sys/cddl/compat/opensolaris/kern | |
parent | 7010764d95d1e14fa58744c9671c2a8b0abadee4 (diff) | |
download | FreeBSD-src-86ef76003513bdab705bb75c5b1eed24a4cb1a76.zip FreeBSD-src-86ef76003513bdab705bb75c5b1eed24a4cb1a76.tar.gz |
opensolaris_kmem kmem_size(): report lesser of vm_kmem_size and available
physical memory
This is needed to correctly autotune ZFS ARC size when vm_kmem_size is
set to value larger than available physical memory.
MFC after: 2 weeks
Diffstat (limited to 'sys/cddl/compat/opensolaris/kern')
-rw-r--r-- | sys/cddl/compat/opensolaris/kern/opensolaris_kmem.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/sys/cddl/compat/opensolaris/kern/opensolaris_kmem.c b/sys/cddl/compat/opensolaris/kern/opensolaris_kmem.c index a24ca83..5d4ba06 100644 --- a/sys/cddl/compat/opensolaris/kern/opensolaris_kmem.c +++ b/sys/cddl/compat/opensolaris/kern/opensolaris_kmem.c @@ -112,18 +112,30 @@ zfs_kmem_free(void *buf, size_t size __unused) free(buf, M_SOLARIS); } +static uint64_t kmem_size_val; + +static void +kmem_size_init(void *unused __unused) +{ + + kmem_size_val = (uint64_t)cnt.v_page_count * PAGE_SIZE; + if (kmem_size_val > vm_kmem_size) + kmem_size_val = vm_kmem_size; +} +SYSINIT(kmem_size_init, SI_SUB_KMEM, SI_ORDER_ANY, kmem_size_init, NULL); + uint64_t kmem_size(void) { - return ((uint64_t)vm_kmem_size); + return (kmem_size_val); } uint64_t kmem_used(void) { - return ((uint64_t)kmem_map->size); + return (kmem_map->size); } static int |