Bộ nhớ trong hệ điều hành


13

Một số nhà ảo thuật tối ưu hóa việc sử dụng bộ nhớ bằng cách sử dụng một phương thức được gọi là Ballooning (ít nhất đó là cái mà KVM gọi nó), phương pháp này sao chép bộ nhớ giữa các VM và đặt các trang phổ biến thành chỉ đọc khi sao chép.
Đây là loại đối diện của một cuộc gọi ngã ba.

Có khả thi khi thực hiện ở cấp độ HĐH cho các quy trình không (tôi chủ yếu nghĩ đến việc sao chép bộ nhớ khi duyệt bằng Chromium với nhiều tab trên cùng một trang), đã được triển khai chưa?

Câu trả lời:


14

Trên thực tế, những gì bạn đã mô tả nhầm lẫn khinh khí cầu và 'hợp nhất cùng trang'. Tôi sẽ cố gắng giải thích trên cả hai để làm cho sự khác biệt rõ ràng.

Ký ức

Đây là một mẹo để đảm bảo rằng một số bộ nhớ được phân bổ cho máy ảo khách vẫn có thể sử dụng được bởi một khách khác hoặc chính máy chủ lưu trữ (cache, v.v.). Nó được thực hiện theo cách sau:

Hạt nhân khách được tiêm trình điều khiển, theo dõi việc sử dụng bộ nhớ của khách và 'đánh cắp' một số bộ nhớ không sử dụng (phân bổ nó cho không gian bộ nhớ của khách, do đó đảm bảo không có gì trên máy khách này có thể chạm vào phạm vi đó).

Sau đó, nó thông báo cho hạt nhân máy chủ rằng trên thực tế nó có thể loại bỏ các trang bộ nhớ này khỏi lõi, rằng chúng sẽ không được sử dụng trong máy khách (cho đến khi khách gặp một số áp lực bộ nhớ, lúc đó quả bóng sẽ xì hơi và sử dụng những phạm vi này một lần nữa).

Cuối cùng, hạt nhân có thể phân bổ cùng một bộ nhớ cho một khách khác và làm cho toàn bộ việc sử dụng bộ nhớ hiệu quả hơn rất nhiều nếu khách đang chạy với nhiều bộ nhớ trống.

Sáp nhập cùng trang

Kỹ thuật này xác định các trang bộ nhớ giống hệt nhau, vì một số lý do chưa được đánh dấu 'chỉ đọc gần đúng' với bản sao trên ghi và đánh dấu chúng như vậy.

Bây giờ, ở cấp độ HĐH, cần có giới hạn cho các loại thủ thuật này. Nói một cách đơn giản, hầu hết thời gian khi bạn có các trang bộ nhớ giống hệt nhau, chúng chỉ ở chế độ đọc (đôi khi không có CoW), vì đây hầu hết là mã ứng dụng, thư viện, v.v. Chúng được mở thông qua Bản đồ bộ nhớ và do đó, kernel có thể giữ chỉ có một bản sao của chúng trong lõi (nếu có, nó cũng có thể hoàn toàn loại nó ra và cho phép nó được phân trang từ cửa hàng chính khi cần thiết).

Ở cấp độ hệ điều hành ảo hóa, cùng một nguyên tắc được áp dụng đúng trong mỗi hệ thống con khách. Tuy nhiên, hạt nhân máy chủ, không biết hai khách có chạy cùng một mã hay không và do đó có chung bộ nhớ - khách không giao tiếp để phối hợp điều đó.

Đó là lý do tại sao đôi khi nó có thể quét toàn bộ hệ thống để tìm các trang bộ nhớ giống hệt nhau - hầu hết thời gian, chúng sẽ giống hệt nhau trên các hệ điều hành khách, không phải trong mỗi hệ điều hành - hạt nhân khách tạo ra một công việc tốt giữ cho bộ nhớ gọn gàng trong phạm vi của nó. Do đó, trong môi trường VM điển hình, nơi một nhân chủ lưu trữ xử lý hơn 50 khách, mức tiết kiệm bộ nhớ có thể khá đáng kể.

Cả hai cùng một lúc

Ballooning và Sáp nhập cùng trang có thể cùng tồn tại rất tốt, đạt được bộ nhớ khá đáng kể so với các hệ thống giống hệt nhau.


Để trả lời câu hỏi của bạn - Việc kết hợp cùng trang có thể và đôi khi được bật ở cấp độ HĐH. Nó có liên quan đến việc chia sẻ trang được diễn giải và do đó có thể giống hệt nhau mà không có cùng một tệp sao lưu.

Trong ví dụ về Chromium của bạn - bản thân các nhị phân quy trình đã được sao chép qua bản đồ khởi động chỉ đọc - chúng chia sẻ cùng một không gian bộ nhớ. Bộ đệm trang (nội dung của các tab) cũng thường được chia sẻ giữa các quy trình (sao chép chỉ đọc khi ghi) do cách quản lý bộ đệm đĩa - cùng một tệp trên đĩa có thể được mở một cách mô phỏng giữa các quy trình khác nhau trong VM ý nghĩa tối ưu.

Lợi thế sẽ rõ ràng nhất với trạng thái chia sẻ của các công cụ Javascript khác nhau - nhưng tôi không chắc liệu chúng có được phân bổ trong cùng một bố cục bộ nhớ hay không, đảm bảo rằng toàn bộ trang bộ nhớ giống hệt nhau.

Điều này là khác nhau trên các hệ thống di động. Android, ví dụ, sử dụng rộng rãi KSM để sao chép mã giống hệt nhau giữa các ứng dụng khác nhau.

Trong cả hai trường hợp, bạn có thể tự kích hoạt nó trên Linux (Hợp nhất Kernel SamePage). Trình điều khiển xuất các số liệu thống kê khác nhau, sau khi đọc câu trả lời này, bạn sẽ có thể diễn giải và tự đưa ra quyết định cho dù đó là một kết hợp tốt cho mục đích của bạn.

https://www.kernel.org/doc/Documentation/vm/ksm.txt


3
Hợp nhất cùng trang cũng được gọi là 'bộ nhớ siêu việt', tùy thuộc vào trình ảo hóa (và tuổi của nó).
Tim Post

Cảm ơn bạn, tôi thấy rằng KSM yêu cầu ứng dụng phải biết về nó và từ một tìm kiếm (nhanh chóng), Chromium không hỗ trợ ứng dụng này ngay bây giờ. Tôi biết rằng các tệp nhị phân bị trùng lặp, nhưng tôi chủ yếu đề cập đến đầu ra JIT và các tập lệnh thô gây căng thẳng nặng nề cho RAM của tôi ...

Các tập lệnh thô trong Chromium cũng bị lặp lại - chúng nằm trong bộ đệm của đĩa như với tất cả các đối tượng web khác và bộ đệm của đĩa được ánh xạ, không được đọc.
qdot

Các tập lệnh thô được ánh xạ, nhưng ngay cả các tập lệnh phổ biến (như jQuery và Angular.js) được sao chép trong bộ đệm và chúng không khớp với nhau do sử dụng nhiều CDN và bản sao chính xác của tập tin tập lệnh trên các máy chủ trang web khác nhau.

Điều này có lẽ sẽ kết thúc trong trò chuyện, nhưng tôi rất muốn xem số liệu thống kê của bạn từ KSM của Linux.
qdot
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.