Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

I'm studying for RHCSA and am confused by a statement I came across in some training material:

There is no practical maximum RAM, as theoretically, you could run 128 TB of RAM on RHEL 6. But that's just theory. The maximum RAM supported by Red Hat on RHEL 6 is 16 GB on 32-bit systems and 2 TB on 64-bit systems.

Can someone please explain where the 128 TB theoretical limit is coming from? I'm confused on how the author knows the theoretical limit exists if RHEL 6 clearly defines other maximum limits. Is this just factoring in the theoretical limits of 64-bit architecture? Or is there some other reason here?

share|improve this question
2  
Here is the answer. You can rewrite it and insert as a answer –  dchirikov Jan 12 '13 at 21:26
    
@dchirkov thanks. –  Mike B Jan 12 '13 at 21:36

3 Answers 3

From the kernel documentation, in Documentation/x86/x86_64/mm.txt:

Virtual memory map with 4 level page tables:

0000000000000000 - 00007fffffffffff (=47 bits) user space, different per mm

247 bytes = 128TiB

share|improve this answer
    
2^48 = 256 TiB ;-) –  Huygens Mar 14 '13 at 9:31

Of course, you cannot use more RAM than your hardware allows (48 bits = 256 TB is common these days), and then you will be limited by the amount of memory the Linux kernel can handle.

There are different limits depending on which architecture you are using.

For example, on the Intel x86 64-bit architecture, Linux cannot use more than 64 TB of physical memory (since version 2.6.30, but it was 16 TB just before). Note that RHEL 6 uses a 2.6.32 kernel.

On the 64-bit s390 architecture, the same limit applies (since 2.6.28).

If you use 32-bit however, the limit is 4 GB, but using a strange trick called PAE, you may go up to 64 GB (often used on x86).

I think other 64-bit architectures have lower limits.

However, I don't know why there would be a theoretical limit of 128 TB. If it existed, it would rather be practical, i.e. software (kernel) or hardware limitations (see above). Afterall, 2^64 times an octet is 16777216 TB...

Nevertheless, keep in mind that Red Hat may have changed its kernel source code to allow for different limits.

share|improve this answer
1  
The 48-bit limit on x86-64 is very much a hardware limit at this point. en.wikipedia.org/wiki/X86-64#Virtual_address_space_details –  Mat Mar 14 '13 at 6:43
    
Sure, but this is implementation dependant and can change in the future. The question is about a theoretical limit. I updated my answer though. –  Totor Mar 14 '13 at 8:55
1  
This is hardware implementation dependent. AMD and Intel x86_64 today's architecture support only 48 bit of address space. This architecture could evolve in the future. –  Huygens Mar 14 '13 at 9:33

One should not mix up virtual memory and physical volatile memory. The former is CPU architecture specific and will be mapped to volatile and non-volatile memory. The latter, aka RAM, should be independent of CPU architecture from the kernel point of view.

Today's AMD and Intel x86_64 implementation only support 48 bit of addressable virtual memory. Which means that the kernel can address 2^48 = 256 TiB per process VM.
Linux kernel on x86_64 architecture split the addressable VM space in 2, 128 TiB for user space and 128 TiB for kernel space. So a process can theoretically address a total of 128 TiB of virtual memory.

The maximum of volatile physical memory that the kernel can handle is a different aspect, but I do not know this information.

Regarding the RHCSA author statement

The author of the statement "There is no practical maximum RAM, as theoretically, you could run 128 TB of RAM on RHEL 6." is using wrong or misunderstood terminology. Here are the table from Red Hat web site summarizing the capabilities of RHEL 3, 4, 5 and 6. And they clearly state "Maximum x86_64 per-process virtual address space [...] 128TB [for RHEL 6]"

The same page states that RHEL 6 supports a maximum of 2TB/64TB RAM (physical volatile memory). I guess it means that it is certified for a 2TB max RAM, and theoretically could go up to 64TB. SLES is much clearer in this respect.

share|improve this answer
    
You say a process can address 128 TB, but the whole system (several processes) may have and use more, so the sentence "you could run 128 TB of RAM on RHEL 6" seems awkward to me, especially given the fact that the official Linux kernel cannot... –  Totor Mar 14 '13 at 12:02
    
Could you provide the pointer to where you found the statement "you could run 128 TB of RAM on RHEL 6"? I doubt it is from Red Hat them selves! The author is confusing physical memory and virtual memory. –  Huygens Mar 14 '13 at 12:06
    
@Totor I just updated my answer with a link to Red Hat's web site which does not confirm the RHCSA statement. –  Huygens Mar 14 '13 at 12:17

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.