On Wed, Mar 5, 2014 at 12:39 AM, Jeff Haran <Jeff.Haran@citrix.com> wrote:
From: kernelnewbies-bounces@kernelnewbies.org [mailto:kernelnewbies-bounces@kernelnewbies.org] On Behalf Of pramod gurav Sent: Monday, March 03, 2014 11:33 PM To: priyaranjan Cc: kernelnewbies Subject: Re: Linux MM : virtual memory address space
On Mon, Mar 3, 2014 at 11:52 PM, priyaranjan <priyaranjan45678@gmail.com> wrote:
I was going through http://linux-mm.org/HighMemory
"Currently the 32 bit x86 architecture is the most popular type of computer. In this architecture, traditionally the Linux kernel has split the 4GB of virtual memory address space into 3GB for user programs and 1GB for the kernel"
What about 64-bit system? Where does the code lie in linux kernel for the check?
Is there any latest and updated memory management documentation for Linux kernel?
Regards,
Priyaranjan
Priyaranjan,
As below link suggests:
http://users.nccs.gov/~fwang2/linux/lk_addressing.txt
Also read this blog written in chinese:
http://adam8157.info/blog/2012/07/linux-x86-64-vm/
on 64 bit arch the virtual address space is huge (2 to thr power of 64). So the overhead of translating the virtual addresses will be high. TO avoid this only lower 48 bits are used to form virtual addresses.
I believe this statement about only the lower 48 bits being used it not correct. That would imply that the upper 16 bits of all virtual addresses on x86_64 would be the same, which is clearly not the case since the upper 16 bits of user space vas are all 0s yet the upper 16 bits of kernel space vas are all 1s.
Jeff Haran
Hi Jeff, Just noticed a line in /proc/cpuinfo on my 64 bit linux Machine which is: --> address sizes : 36 bits physical, 48 bits virtual This should confirm the statement that, only lower 48 bits are used for virtual address space on a 64 it arch. And about upper 16 bits in kernel being 1s in the address range shown in the link, I think they are not correct. The writer of the blog has done some wrong manipulations. The user space addresses are correct. Kernel Space address raneg has to be: 0x0000800000000000 to 0x0000ffffffffffff.
This virtual space will still be very large (256 TB) and hence the user/kernel split is 1:1 (128TB:128TB). And as suggested in link it is very unlikely that you will have such a huge RAM(more than 128TB) installed on any machine there is no concept of HIGHMEM.
Hope this clears the air a bit.
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
-- Thanks and Regards Pramod
-- Thanks and Regards Pramod