İşletim sisteminde bellek balonlaması


13

Bazı hipervizörler, balon adı verilen bir yöntem kullanarak bellek kullanımını optimize eder (en azından KVM bunu çağırır), bu yöntem VM'ler arasındaki belleği tekilleştirir ve yazma sırasında kopyalamayla ortak sayfaları salt okunur olarak ayarlar.
Bu bir çatal çağrısının tersidir.

İşlemler için bir işletim sistemi düzeyinde uygulamak mümkün mü (esas olarak aynı sitede birden çok sekmeli Chromium'a göz atarken belleğin çoğaltılmasını düşünüyordum), zaten uygulandı mı?

Yanıtlar:


14

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


3
Aynı sayfada birleştirme, hipervizöre (ve yaşına) bağlı olarak 'aşkın bellek' olarak da adlandırılır.
Tim Post

Teşekkür ederim, KSM'nin uygulamanın farkında olmasını gerektirdiğini görüyorum ve (hızlı) bir aramadan Chromium şu an bunu desteklemiyor. İkili dosyaların tekilleştirildiğinin farkındayım, ancak çoğunlukla RAM'ime ağır bir yük getiren JIT çıktısına ve ham komut dosyalarına atıfta bulunuyorum ...

Chromium'daki ham komut dosyaları da tekilleştirilir - diğer tüm web nesnelerinde olduğu gibi disk önbelleğine inerler ve disk önbelleği okunmaz.
qdot

Ham komut dosyaları eşlenir, ancak yaygın komut dosyaları (jQuery ve Angular.js gibi) bile önbellekte çoğaltılır ve CDN'lerin yoğun kullanımı ve çeşitli site sunucularında komut dosyalarının tam kopyaları olduğundan birbirleriyle eşleştirilmez.

Bu muhtemelen sohbetle sonuçlanmalı, ancak istatistiklerinizi Linux'un KSM'sinden görmek isterim.
qdot
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.