Tại sao giới hạn RAM lý thuyết cho RHEL 6 128 TB và điều này được xác định như thế nào?


8

Tôi đang học RHCSA và bối rối trước một tuyên bố tôi đã gặp trong một số tài liệu đào tạo:

Không có RAM tối đa thực tế, theo lý thuyết, bạn có thể chạy 128 TB RAM trên RHEL 6. Nhưng đó chỉ là lý thuyết. RAM tối đa được Red Hat hỗ trợ trên RHEL 6 là 16 GB trên hệ thống 32 bit và 2 TB trên hệ thống 64 bit.

Ai đó có thể vui lòng giải thích giới hạn lý thuyết 128 TB đến từ đâu không? Tôi bối rối về cách tác giả biết giới hạn lý thuyết tồn tại nếu RHEL 6 xác định rõ ràng các giới hạn tối đa khác. Đây có phải chỉ là bao thanh toán trong giới hạn lý thuyết của kiến ​​trúc 64 bit? Hoặc có một số lý do khác ở đây?


3
Đây là câu trả lời. Bạn có thể viết lại và chèn vào như một câu trả lời
dchirikov

Câu trả lời:


7

Từ tài liệu kernel, trong Documentation/x86/x86_64/mm.txt:

Virtual memory map with 4 level page tables:

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

2 47 byte = 128TiB


2 ^ 48 = 256 TiB ;-)
Huygens

Câu trả lời rất súc tích. Để biết thêm thông tin, xem lwn.net/Articles/117783 35 bit cho chỉ mục bảng trang và 4096 byte (2 ^ 12) là kích thước của một trang. Cho 2 ^ (35) * 2 ^ (12) = 2 ^ 47 = 128 TB
pveentjer

4

Câu trả lời ngắn

Mỗi quy trình Linux có thể giải quyết tối đa 128 TB bộ nhớ ảo . Tuy nhiên, điều này là nhiều hơn nhân Linux có thể xử lý vật lý . Do đó, giới hạn này là lý thuyết.

Nó có thể đã được chọn tùy ý, dựa trên một kịch bản sử dụng "trường hợp xấu nhất" được cho là có thể đoán được.

Câu trả lời được xây dựng

Bạn thực sự không thể sử dụng nhiều RAM hơn phần cứng cho phép (48 bit = 256 TB là phổ biến hiện nay), và sau đó bạn sẽ bị giới hạn bởi số lượng bộ nhớ vật lý mà nhân Linux có thể xử lý.

Ví dụ, trên kiến trúc Intel x86 64 bit , Linux không thể sử dụng hơn 64 TB bộ nhớ vật lý (kể từ phiên bản 2.6.30 , nhưng trước đó là 16 TB ). Lưu ý rằng RHEL 6 sử dụng kernel 2.6.32 .

Trên kiến trúc s390 64 bit , áp dụng giới hạn tương tự (kể từ 2.6.28 ). Tuy nhiên, nếu bạn sử dụng 32 bit, giới hạn là 4 GB , nhưng sử dụng một thủ thuật lạ có tên PAE , bạn có thể lên tới 64 GB (thường được sử dụng trên x86).

Tôi nghĩ các kiến ​​trúc 64 bit khác có giới hạn thấp hơn.

Xem bảng giới hạn Red Hat để biết thêm thông tin (cảm ơn Huygens ).


1
Giới hạn 48 bit trên x86-64 rất nhiều giới hạn phần cứng tại thời điểm này. vi.wikipedia.org/wiki/X86-64#Virtual_address_space_details
Mat

Chắc chắn, nhưng điều này phụ thuộc vào việc thực hiện và có thể thay đổi trong tương lai. Câu hỏi là về một giới hạn lý thuyết . Tôi đã cập nhật câu trả lời của tôi mặc dù.
Totor

2
Đây là phụ thuộc thực hiện phần cứng. Kiến trúc AMD và Intel x86_64 ngày nay chỉ hỗ trợ 48 bit không gian địa chỉ. Kiến trúc này có thể phát triển trong tương lai.
Huygens

1

Không nên trộn lẫn bộ nhớ ảo và bộ nhớ biến động vật lý. Cái trước là kiến ​​trúc CPU cụ thể và sẽ được ánh xạ tới bộ nhớ dễ bay hơi và không bay hơi. Cái sau, còn gọi là RAM, nên độc lập với kiến ​​trúc CPU từ quan điểm hạt nhân.

Việc triển khai AMD và Intel x86_64 ngày nay chỉ hỗ trợ 48 bit bộ nhớ ảo có thể định địa chỉ. Điều đó có nghĩa là hạt nhân có thể giải quyết 2 ^ 48 = 256 TiB cho mỗi quá trình VM.
Nhân Linux trên kiến ​​trúc x86_64 chia không gian VM có thể đánh địa chỉ thành 2, 128 TiB cho không gian người dùng và 128 TiB cho không gian kernel. Vì vậy, về mặt lý thuyết có thể giải quyết tổng cộng 128 TiB bộ nhớ ảo.

Tối đa bộ nhớ vật lý dễ bay hơi mà kernel có thể xử lý là một khía cạnh khác, nhưng tôi không biết thông tin này.

Về tuyên bố của tác giả RHCSA

Tác giả của tuyên bố "Không có RAM tối đa thực tế, vì theo lý thuyết, bạn có thể chạy 128 TB RAM trên RHEL 6." đang sử dụng thuật ngữ sai hoặc hiểu sai. Dưới đây là bảng từ trang web Red Hat tóm tắt các khả năng của RHEL 3, 4, 5 và 6 . Và họ nêu rõ "Không gian địa chỉ ảo tối đa x86_64 cho mỗi quá trình [...] 128TB [cho RHEL 6]"

Cùng một trang nói rằng RHEL 6 hỗ trợ tối đa 2TB / 64TB RAM (bộ nhớ biến động vật lý). Tôi đoán nó có nghĩa là nó được chứng nhận cho RAM tối đa 2TB và về mặt lý thuyết có thể lên tới 64TB. SLES rõ ràng hơn nhiều về mặt này .


Bạn nói rằng một quy trình có thể giải quyết 128 TB, nhưng toàn bộ hệ thống (một số quy trình) có thể có và sử dụng nhiều hơn, vì vậy câu "bạn có thể chạy 128 TB RAM trên RHEL 6" có vẻ khó xử với tôi, đặc biệt là thực tế là chính thức Nhân Linux không thể ...
Totor

Bạn có thể cung cấp con trỏ tới nơi bạn tìm thấy tuyên bố "bạn có thể chạy 128 TB RAM trên RHEL 6" không? Tôi nghi ngờ đó là từ Red Hat họ tự chọn! Tác giả đang nhầm lẫn bộ nhớ vật lý và bộ nhớ ảo.
Huygens

@Totor Tôi vừa cập nhật câu trả lời của mình với một liên kết đến trang web của Red Hat không xác nhận tuyên bố RHCSA.
Huygens

@Totor: Trên nhân Linux, HIGHMEM chưa được chuyển sang 64-bit. Không có HIGHMEM, tất cả RAM được ánh xạ vào không gian địa chỉ kernel, là 128 TB, do đó là giới hạn.
Yuhong Bảo

0

Lý do khác đó là lý thuyết là thiếu kinh nghiệm thực hiện.

Thông thường, các lập trình viên thường thay đổi kích thước các biến số trước khả năng của phần cứng là gì, do đó, hạt nhân không cần lập trình thay thế và thay thế rủi ro vì phần cứng của khả năng đó xuất hiện sau đó một thập kỷ.

Tuy nhiên kích thước thay đổi không phải là giới hạn duy nhất. Cấu trúc dữ liệu và thuật toán của họ áp đặt giới hạn của riêng họ. Hãy tưởng tượng trong một khoảnh khắc thực hiện bước đi tuyến tính của cấu trúc dữ liệu mô tả từng trang 4KB của 128TB đó. Có một số câu trả lời rõ ràng: không sử dụng các trang 4KB, không sử dụng cấu trúc dữ liệu tuyến tính, không thường xuyên truy cập các cấu trúc dữ liệu đó, giảm tải càng nhiều càng tốt vào phần cứng. Nhưng có những hạn chế về cấu trúc dữ liệu + thuật toán tinh vi hơn mà chúng ta sẽ không biết cho đến khi gặp phải chúng.

Chúng tôi biết rằng nếu chúng tôi khám phá một cách kỳ diệu một PC 128TB vào ngày mai và cố gắng khởi động Linux trên nó thì nó sẽ hoạt động khủng khiếp và có lẽ rất khủng khiếp khi không bắt đầu. Nhưng sửa các thuật toán là chuyện nhỏ, sửa các cấu trúc dữ liệu là một số công việc nhưng vẫn ít tốn công hơn nhiều so với việc sửa kích thước của một biến được hiểu rộng rãi. Vì vậy, chúng ta sẽ thấy những thay đổi của bản chất đó khi kích thước bộ nhớ tăng lên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.