Messages in this thread | | | Date | Wed, 28 Apr 2004 20:13:43 -0400 | From | Jeff Garzik <> | Subject | Re: ~500 megs cached yet 2.6.5 goes into swap hell |
| |
Brett E. wrote: > exits, freeing up the malloc'ed memory. This brings free memory up by > 400 megs and brings the cache down to close to 0, of course the cache
Yeah, I have something similar (attached). Run it like
fillmem <number-of-megabytes>
> grows right afterwards. It would be nice to cap the cache datastructures > in the kernel but I've been posting about this since September to no > avail so my expectations are pretty low.
This is a frequent request... although I disagree with a hard cap on the cache, I think the request (and similar ones) should hopefully indicate to the VM gurus that the kernel likes cache better than anon VMAs that must be swapped out.
Jeff
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h>
#define MEGS 140 #define MEG (1024 * 1024)
int main (int argc, char *argv[]) { void **data; int i, r; size_t megs = MEGS;
if ((argc >= 2) && (atoi(argv[1]) > 0)) megs = atoi(argv[1]);
data = malloc (megs * sizeof (void*)); if (!data) abort();
memset (data, 0, megs * sizeof (void*));
srand(time(NULL));
for (i = 0; i < megs; i++) { data[i] = malloc(MEG); memset (data[i], i, MEG); printf("malloc/memset %03d/%03lu\n", i+1, megs); } for (i = megs - 1; i >= 0; i--) { r = rand() % 200; memset (data[i], r, MEG); printf("memset #2 %03d/%03lu = %d\n", i+1, megs, r); } printf("done\n"); return 0; }
| |