Aslında, tanımladığınız şey balonlamayı ve 'aynı sayfayı birleştirmeyi' karıştırıyor. Ayrımı belirgin hale getirmek için bu ikisini üzerinde durmaya çalışacağım.
Bellek balonlaması
Konuk sanal makineye ayrılan belleğin bir kısmının başka bir konuk veya ana bilgisayarın kendisi (önbellekler vb.) Tarafından kullanılabilir kalmasını sağlamak için bir hiledir . Aşağıdaki şekilde yapılır:
Konuk çekirdeğine, konuk bellek kullanımını izleyen ve kullanılmayan belleklerden bazılarını 'çalan' bir sürücü enjekte edilir (konuk bellek alanında kendisine tahsis edilir, böylece bu konuktaki hiçbir şeyin bu aralığa dokunamaması sağlanır).
Daha sonra ev sahibi çekirdeği, aslında bu bellek sayfalarını çekirdekten kaldırabileceğini, konukta kullanılmayacaklarını (konuk, balonun hangi noktada söneceği ve kullanacağı bellek baskısı yaşayana kadar) bilgilendirir. bu aralıklar tekrar).
Sonuçta, çekirdek başka bir konuk için aynı bellek ve tüm bellek kullanımı çok daha verimli yapabilir eğer misafirler boş hafıza bir sürü yayınlanıyor.
Aynı Sayfa Birleştirme
Bu teknik, bir nedenden ötürü zaten 'salt okunur' yazılı olmayan kopya ile işaretlenmemiş özdeş bellek sayfalarını tanımlar ve bunları böyle işaretler.
Şimdi, işletim sistemi düzeyinde, bu tür numaralara sınırlı ihtiyaç vardır. Basitçe, çoğu zaman özdeş bellek sayfalarınız olduğunda, bunlar zaten salt okunurdur (bazen CoW olmadan bile), çünkü bunlar çoğunlukla uygulama kodu, kütüphaneler vb. bunların yalnızca bir kopyası çekirdekte (varsa, tamamen sayfadan çıkartabilir ve gerektiğinde birincil mağazadan sayfalanmasına izin verebilir).
Sanallaştırılmış işletim sistemi düzeyinde, her ilke alt sisteminde aynı ilke düzgün şekilde uygulanır. Ancak, ev sahibi çekirdek, konukların ikisinin çoğunlukla aynı kodu çalıştırması ve böylece aynı belleği paylaşması konusunda hiçbir fikri yoktur - konuklar bunu koordine etmek için iletişim kurmazlar.
Hangi zaman zaman aynı bellek sayfaları için tüm sistemi tarayabilir yüzden - çoğu zaman, bunlar aynı olacaktır genelinde değil, her birinin içinde, misafir işletim sistemleri - misafir çekirdek 's aralığında düzgün bellek tutarak iyi bir iş yapar. Bu nedenle, bir ana çekirdeğin 50'den fazla misafiri işlediği tipik VM ortamında bellek tasarrufu oldukça önemli olabilir.
İkisi birden
Balonlama ve Aynı Sayfa Birleştirme, aynı sistemler için oldukça önemli bir bellek fazlalığı sağlayarak çok iyi bir şekilde var olabilir.
Sorunuzu cevaplamak için - Aynı Sayfa Birleştirme, bazen işletim sistemi düzeyinde etkinleştirilebilir. Yorumlanan sayfa paylaşımı ile ilgilidir ve böylece aynı yedekleme dosyasına sahip olmadan aynı olabilir.
Chromium örneğinizde - işlem ikili dosyalarının kendileri zaten salt okunur başlangıç haritası aracılığıyla tekilleştirilmiştir - tam olarak aynı bellek alanını paylaşırlar. Sayfa önbellekleri (sekmelerin içeriği) genellikle disk önbelleğinin yönetilme biçimi nedeniyle işlemler arasında (salt okunur kopyala yazma) paylaşılır - aynı disk dosyası VM'deki farklı işlemler arasında eşzamanlı olarak açılabilir -optimal anlamda.
Avantajı en çok farklı Javascript motorlarının paylaşılan durumu ile açık olacaktır - ancak tam olarak aynı bellek düzeninde tahsis edilip edilmediğinden emin değilim, tüm bellek sayfasının aynı olduğundan emin olun.
Bu, mobil sistemlerde farklıdır. Örneğin Android, farklı uygulamalar arasında aynı kodu tekilleştirmek için KSM'yi yoğun bir şekilde kullanır.
Her iki durumda da, Linux'ta kendiniz etkinleştirebilirsiniz (Çekirdek SamePage Birleştirme). Sürücü, bu cevabı okuduktan sonra yorumlayabilmeniz ve amacınız için iyi bir eşleşme olup olmadığına karar vermeniz gereken çeşitli istatistikler verir.
https://www.kernel.org/doc/Documentation/vm/ksm.txt