On 28.11.2012 22:45, Bruce Evans wrote:
On Wed, 28 Nov 2012, Alan Cox wrote:
I'm pretty sure that the "realmem" calculation is going to overflow on
i386/PAE, where the number of bytes of physical memory is greater than
the type long can represent.
It overflows on i386 even without PAE, where the number of bytes of
physical memory is greater than the type long can represent (2GB). This is the
usual case for new
hardware.
Please have a look at the attached patch. Is quad_t the appropriate
type to use? If not, which is the right one?
I think it changes the defaults for machines with small amounts of
memory (say 32MB) in dangerous ways.
Reserving half of kva for mbufs is network-centric. I reserve more
than half of kva for the buffer cache in some configurations
(VM_BCACHE_SIZE_MAX defaults too 200 MB, but I use 512 MB), and in the
old scheme where the default for mbufs was under-sized, this may even
have fitted without separate tuning for mbufs.
Please note that NO *reservations* are made for mbufs. It's only *limits*
that are enforced. For example stand-alone mbufs were not limited at all
previously and could completely exhaust all available kernel memory.
The code has lots of style bugs.
Thank you for your detailed input. I'll handle that after the "long"
overflow issue is solved.
--
Andre
Index: kern/subr_param.c
===================================================================
--- kern/subr_param.c (revision 243631)
+++ kern/subr_param.c (working copy)
@@ -271,7 +271,7 @@
void
init_param2(long physpages)
{
- long realmem;
+ quad_t realmem;
/* Base parameters */
maxusers = MAXUSERS;
@@ -332,10 +332,10 @@
* available kernel memory (physical or kmem).
* At most it can be 3/4 of available kernel memory.
*/
- realmem = lmin(physpages * PAGE_SIZE,
+ realmem = qmin(physpages * PAGE_SIZE,
VM_MAX_KERNEL_ADDRESS - VM_MIN_KERNEL_ADDRESS);
maxmbufmem = realmem / 2;
- TUNABLE_LONG_FETCH("kern.maxmbufmem", &maxmbufmem);
+ TUNABLE_QUAD_FETCH("kern.maxmbufmem", &maxmbufmem);
if (maxmbufmem > (realmem / 4) * 3)
maxmbufmem = (realmem / 4) * 3;
Index: sys/mbuf.h
===================================================================
--- sys/mbuf.h (revision 243631)
+++ sys/mbuf.h (working copy)
@@ -395,7 +395,7 @@
*
* The rest of it is defined in kern/kern_mbuf.c
*/
-extern long maxmbufmem;
+extern quad_t maxmbufmem;
extern uma_zone_t zone_mbuf;
extern uma_zone_t zone_clust;
extern uma_zone_t zone_pack;
_______________________________________________
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"