Version française
Home     About     Download     Resources     Contact us    
Browse thread
OCaml runtime using too much memory in 64-bit Linux
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Adam Chlipala <achlipala@j...>
Subject: OCaml runtime using too much memory in 64-bit Linux
I've encountered a problem where certain OCaml programs use orders of 
magnitude more RAM when compiled/run in 64-bit Linux instead of 32-bit 
Linux.  Some investigation led to the conclusion that the difference has 
to do with the size of OCaml page tables.  (Here I mean the page tables 
maintained by the OCaml runtime system, not any OS stuff.)

A program that should be using just a few megabytes of RAM ends up using 
200+ MB to store a page table.  It seems that a C macro is defined by 
default on 64-bit Linux to use mmap() instead of malloc().  Ironically, 
a comment says that this was done to avoid being given blocks of memory 
that are very far apart from each other, forcing the creation of overly 
large page tables.  It's ironic because that is exactly the problem that 
is showing up now with mmap().  It ends up called twice for the program 
I'm looking at, and the two addresses it returns are far enough apart to 
lead to creation of a 200 MB page table.

Has anyone else experienced this problem?  Would the runtime system need 
to be changed to avoid it?