Hi Hayfeng... On Tue, Apr 6, 2010 at 21:37, hayfeng Lee <teklife.kernel@xxxxxxxxx> wrote: > Why does linux choose 896MB to do a start point of ZONE_HIGHMEM and > the end point of ZONE_NORMAL. Just for experience? > What is the advantages? In 32 bit x86 architecture, kernel are given 1 GiB address space, while user space gets 3 GiB. This is known as 3:1 Virtual memory split. Within this 1 GiB address space, kernel could do direct mapping to RAM. However, the upper 128 MiB are left out for vmalloc area and other needs such as temporary mapping and so on. Therefore, you're left with 1 GiB - 128 MiB = 896 MiB. perhaps you could rise another question: why 3:1 vm split? why we left 128 MiB for vmalloc+another mapping? IMO this is simply a choice. In the past ( and AFAIK the patch is still downloadable somewhere), you can even have 4:4 VM split, thus giving even larger ZONE_NORMAL theoritically. But this is not preferred, because processor has to do almost complete TLB flush on every context between user-kernel space and vice versa. Does this clear your confusion? -- regards, Mulyadi Santosa Freelance Linux trainer and consultant blog: the-hydra.blogspot.com training: mulyaditraining.blogspot.com -- To unsubscribe from this list: send an email with "unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx Please read the FAQ at http://kernelnewbies.org/FAQ