Do you know about the following compiler flags (of sun studio compilers)
-xpagesize_heap=<a> Controls the preferred page size for the heap,
a={4K|2M|4M|default}
-xpagesize_stack=<a> Controls the preferred page size for the stack,
a={4K|2M|4M|default}
-xpagesize=<a> Controls the preferred page size for the stack and for the
heap, a={4K|2M|4M|default}
Alexander
On Thu, 6 Sep 2007, Andrew Gallatin wrote:
>
> Are there any tuning parameters which will increase the chances that
> applications will be able to use large pages on amd64 anywhere near as
> well as on sparc? Or is the x86/amd64 large page implementation just
> not as mature?
>
> I have noticed that using a fairly recent open solaris (actually
> NexentaOS), on an amd64 with 512MB, pmap reports that my application
> gets very few large pages, often just one. In debugging this, I
> located a sparc and an x86 which had lots (8GB) of memory, and were
> running the same version of the OS. Unfortunately, this version is
> S10 11/06. At any rate, the sparc seems to always be able to allocate
> a majority of its RAM as large pages, where the amd64 can allocate
> only a very small percentage (which seems to decrease the longer the
> machine has been up)
>
> I have written the appended trivial application which does nothing but
> allocate memory, fault it in, and fork of a pmap to see what page
> size(s) it ended up with.
>
> On the sparc I can get 6.5GB worth of large pages
> % head -1 /etc/release
> Solaris 10 11/06 s10s_u3wos_10 SPARC
> % uname -srpiv
> SunOS 5.10 Generic_118833-33 sparc SUNW,Sun-Fire-T200
> % prtconf | head -2
> System Configuration: Sun Microsystems sun4v
> Memory size: 8184 Megabytes
> % vmstat
> kthr memory page disk faults cpu
> r b w swap free re mf pi po fr de sr s1 s2 s3 s4 in sy cs us sy id
> 0 0 0 7095352 7590048 1 23 3 0 0 0 1 0 0 1 0 375 291 209 0 0 100
> % ppgsz -F -o heap=4M ./lgpg 6500 | grep heap
> 0000000100102000 3064K 8K rwx-- [ heap ]
> 0000000100400000 6656000K 4M rwx-- [ heap ]
>
> On the amd64, I can get nowhere near that number of 2MB pages, even
> though the machine is freshly booted.
>
> % head -1 /etc/release
> Solaris 10 11/06 s10x_u3wos_10 X86
> % uname -srpiv
> SunOS 5.10 Generic_125101-08 i386 i86pc
> % prtconf | head -2
> System Configuration: Sun Microsystems i86pc
> Memory size: 8191 Megabytes
> % vmstat
> kthr memory page disk faults cpu
> r b w swap free re mf pi po fr de sr cd f0 s0 -- in sy cs us sy id
> 0 0 0 6064208 6967940 59 7751 55 0 0 0 381 7 0 0 0 830 652 440 0 3 96
> % ppgsz -F -o heap=2M ./lgpg 6500 | grep heap
> 0000000000412000 1976K 4K rw--- [ heap ]
> 0000000000600000 813056K 2M rw--- [ heap ]
> 0000000032000000 5840896K 4K rw--- [ heap ]
> 0000000196800000 2048K 2M rw--- [ heap ]
>
>
> Thanks for any light you all can shed on this,
>
> Drew
>
> #include <stdlib.h>
> #include <stdio.h>
> #include <string.h>
> #include <unistd.h>
>
> void
> usage(char *name)
> {
> fprintf(stderr, "usage: %s alloc_size_megs", name);
> exit(1);
> }
>
>
> int
> main(int argc, char **argv)
> {
> char buf[64];
> size_t alloc_size;
> char *ptr;
> int pid;
>
>
> pid = (int)getpid();
> if (argc < 2)
> usage(argv[0]);
>
> alloc_size = atoi(argv[1]);
> alloc_size *= 1024UL * 1024UL;
> ptr = malloc(alloc_size);
> if (ptr == NULL) {
> perror("malloc");
> exit(1);
> }
>
> memset(ptr, 1, alloc_size);
> sprintf(buf, "pmap -s %d\n", pid);
> system(buf);
> return(0);
> }
>
> _______________________________________________
> perf-discuss mailing list
> [email protected]
>
_______________________________________________
perf-discuss mailing list
[email protected]