On Fri, 17 Sep 2010, Christian Robottom Reis wrote:
On Thu, Sep 16, 2010 at 06:28:03PM -0600, John Rigby wrote:
LINARO: [Config] Turn on CONFIG_HIGHMEM for vexpress
Hello there,
Question: in general, why would we use CONFIG_HIGHMEM instead of
changing the kernel/userspace memory split?
Changing the memory split might affect some applications that expect a large address space. For example, if an application is making heavy usage of mmap(), either to map files into memory, or to map some hardware like a framebuffer, then it might run out of virtual space. Ironically the reported error in that case would be "out of memory" even if not all the physical memory is exhausted, while a system with less RAM but a standard user:kernel split would allow such applications to work properly. The first case might occur with gcc when compiling, or more likely when linking, large applications. A full "git repack" on a large repository is also likely to get less efficient (it can scale its vm usage down but with some performance penalty). The second case can be seen with the X server and high end graphic cards on X86 for example (no idea if that would be the case on current ARM graphic hardware).
Yet, highmem carries some small overhead of its own. So if you know that all the applications you need have a workset that always fits in a reduced address space then it is more advantageous to use a 2G:2G user:kernel split and keep highmem off.
Of course, if the system has 3G of RAM or more (think LPAE) then you don't have much choice but to use highmem.
Nicolas