Bill Allombert on Mon, 13 Nov 2000 20:03:16 +0100 (MET) |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: *** the PARI stack overflows !!! |
> >If there is no serious shortage of swap space, you may shamelessly >run gp with something like -s 50000000 . This will reserve that >many bytes of virtual memory (and thus block that much swap space >from being used by other processes), but it will not take up any >physical RAM unless and until it actually needs it. (NB this state- >ment is Solaris-specific; on other platforms your mileage may vary. >Contact me directly via my work address in the Reply-To if you have >Solaris-specific questions arising from this.) Under Linux things are a little different. You may allocate as much memory as total of real memory(swap+RAM) minus the amount of allocated memory. For example on my machine with 64Mb+128Mb swap I can launch 3 gp -s100M At this time the memory is not truly allocated. A certain number of virtual memory pages (a page is typically 4kb ) are created and link to a zero page with the flag "copy on write". No memory is used until you write on the page. Then the page became a real page and the writing is done. However a page is never automatically freed by this process. A nice trick to do under Linux $ gp -s 50M ? {big computation} ? allocatemem(0) \\ free page ? allocatemem(50*10^6) \\ realloc page ? {new computation} You are sure to never use more memory than neccessary, while having a sort of automatic stack growth. The big caveats is that a lot of functions use the stack size to determine if they must garbage collect, so a big stack lead to less conservative garbage collecting. I thing that PARI should use another value. Say, a flag -w "wanted_stack_size" to gp and use wanted_stack_size and not stacksize. The problem with this approach is what to do when with are between wanted_stack_size and not stacksize ? You can say the amount of memory of program use with 'ps aux' USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND bill 3200 0.0 6.3 132604 4032 pts/5 S 19:46 0:00 gp -s 130M bill 3201 0.0 6.3 132604 4032 pts/7 S 19:46 0:00 gp -s 130M bill 3225 9.5 6.3 122836 4032 pts/8 S 19:56 0:00 gp -s 120M VSZ is the virtual memory allocated RSS is the real memory used. You can see a GP process use only 4Mb after startup yellowpig% cat /proc/meminfo total: used: free: shared: buffers: cached: Mem: 64991232 63877120 1114112 35131392 1339392 15491072 Swap: 131567616 18644992 112922624 MemTotal: 63468 kB MemFree: 1088 kB MemShared: 34308 kB Buffers: 1308 kB Cached: 15128 kB SwapTotal: 128484 kB SwapFree: 110276 kB I hope this will help Linux users to use stack size for the best. Cheers, Bill.