Browse thread
OCaml runtime using too much memory in 64-bit Linux
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ 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?