summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2013-06-03 04:16:48 +0000
committerkib <kib@FreeBSD.org>2013-06-03 04:16:48 +0000
commit6e7fd639651595da1774be6c953050fdcc72eee5 (patch)
tree0124cdc11c4a24f6b495a10849344cecbffd60c3
parente047d2d65ce2c5a19fdadeae38f512508444f993 (diff)
downloadFreeBSD-src-6e7fd639651595da1774be6c953050fdcc72eee5.zip
FreeBSD-src-6e7fd639651595da1774be6c953050fdcc72eee5.tar.gz
When auto-sizing the buffer cache, limit the amount of physical memory
used as the estimation of size, to 32GB. This provides around 100K of buffer headers and corresponding KVA for buffer map at the peak. Sizing the cache larger is not useful, also resulting in the wasting and exhausting of KVA for large machines. Reported and tested by: bdrewery Sponsored by: The FreeBSD Foundation
-rw-r--r--sys/kern/vfs_bio.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/kern/vfs_bio.c b/sys/kern/vfs_bio.c
index ed51997..03ba78c 100644
--- a/sys/kern/vfs_bio.c
+++ b/sys/kern/vfs_bio.c
@@ -560,7 +560,8 @@ kern_vfs_bio_buffer_alloc(caddr_t v, long physmem_est)
nbuf += min((physmem_est - 4096) / factor,
65536 / factor);
if (physmem_est > 65536)
- nbuf += (physmem_est - 65536) * 2 / (factor * 5);
+ nbuf += min((physmem_est - 65536) * 2 / (factor * 5),
+ 32 * 1024 * 1024 / (factor * 5));
if (maxbcache && nbuf > maxbcache / BKVASIZE)
nbuf = maxbcache / BKVASIZE;
OpenPOWER on IntegriCloud