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