mirror of
https://git.FreeBSD.org/src.git
synced 2025-01-30 16:51:41 +00:00
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
This commit is contained in:
parent
65d495a87e
commit
92ac3eb59f
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=270861
@ -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)
|
||||
{
|
||||
|
@ -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);
|
||||
|
||||
/*
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user