Sayfalamayı dikkate alan çöp toplayıcılar var mı?


12

Çöp koleksiyonları, geri kazanılabilecek belleği bulmak için canlı olan tüm nesneleri ziyaret etmelidir. (Birçok neslin olması bunu biraz geciktirir)

Her şey eşit olduğunda, daha önce RAM'e disk belleği olan nesneyi ziyaret etmek, diğer bloğu içeri girmeden ve bu nedenle bir nesneyi disk belleği dışına çıkarmak daha iyidir.

Diğer bir olasılık, işletim sisteminin bir sayfadan bir ram sayfası almak istediğinde, GC'ye ilk olarak sayfalandırılmadan vazgeçilebilecek bir sayfa olup olmadığı sorulur. GC çoğunlukla bir sayfadaki nesnelerin taşınmasıyla yapılabilir, bu nedenle işletim sisteminin bir sayfaya ihtiyaç duyduğu süre içinde o sayfayı temizleyebilir.

Yine de, GC'nin çalıştığı düzeni yönlendiren işletim sistemi çağrı sistemi ile entegre olan çöp toplayıcılarını hatırlayamıyorum.


Tam olarak disk belleği değil, ruby kurumsal sürüm gc, nesne meta verilerini ayrı sayfalara taşıyarak gc'nin yazma sayfalarındaki kopya üzerindeki etkisini azaltmak için yeniden yazıldı.
Kullanıcı1937198


Şaşırtıcı bir şekilde, afaik / afaict, neredeyse tüm (?) gc literatürü soyut dışında İşletim Sistemi çağrılarını analiz etmiyor gibi görünüyor. fikir: nesnelerin kendilerinden ayrı bir yapıdaki nesneler arasındaki işaretçileri izleyen bir bellek ayırma sistemi daha yerel / sayfalama dostu olabilir, çünkü tüm nesneler yerine sıkıca sıkıştırılmış bir alanda yalnızca işaretçilerin kendileri geçilir (gc sırasında). bellekte yayılabilen çeşitli boyutlar (ve bazılarının nadiren erişildiği ve bu şekilde sayfalandığı). mütevazı bir ek yük olabilir, ancak uygulamaya bağlı olarak genel tasarruflara yol açabilir.
vzn

Flash sürücülerin, bellek düzenlemelerini dikkate alan bir çöp toplama biçimi kullanması gerekir, ancak bu tür şeylerin akademik literatürde ne kadar iyi tartışıldığını bilmiyorum. Çözülmesi gereken sorunlar çok farklıdır (flash sürücüler GC'ye ihtiyaç duyar, çünkü alan sadece çok büyük bloklarda geri dönüştürülebilir, bu nedenle bir blokta birkaç canlı sayfa ve çok sayıda ölü sayfa varsa, canlı veriler sayfadan önce başka bir yere kopyalanmalıdır ancak verilerin birleştirilmesi ilkeleri yardımcı olabilir.
supercat

1
Veri öğelerinin bellek yığın boyutuma göre tamamen küçük olduğu durumlarda kullandığım desen, her veri öğesinin önden arkaya ayrılmış sabit boyutlu bir başlıktan ve değişken boyutlu verilerden oluşmasıydı. önden arkaya tahsis edilebilir. Bir tablo, fiziksel adreslere eşlenen mantıksal yığın adreslerini ve her yığındaki boş alan miktarını tuttu; her taramadan sonra ne kadar alanın öldüğünü de belirleyecektir. Referanslar flash olarak saklandı ve her bir referansta "7 numaralı mantıksal yığın # 7" formu vardı. Bir GC döngüsü, tüm canlı verileri bir
parçadan yenisine kopyalar

Yanıtlar:


8

Hatırladığım gibi, kopya toplayıcıların işaretçi referanslarının yerini iyileştirme eğilimi gösterdiğinden, kopya toplayıcıların disk belleği dostu olması gerekir. Bu, program (mutator) üzerinde bağlantıları izlerken daha az sayfa hatasına neden olacak ve izleme daha az sayfa hatasına neden olacağından bir sonraki toplama döngüsünü iyileştirecek olumlu bir etkiye sahiptir. İzleme gündemi (ilk önce hangi göstergelerin işlenmesi gerekir), veri yerinin iyileştirilmesinde etkili olabilir. Bu, farklı hücre tiplerindeki farklı işaretleyicilere erişim sayısının ölçülmesiyle iyileştirilebilir.

Şimdi, genel olarak bir izleme toplayıcısını düşünürseniz, genellikle henüz izlenmemiş olan işaretçileri takip eden bir yapıya sahip olmalısınız. Bu yapıyı, aynı sayfayı işaret eden tüm bekleyen işaretçiler bir arada tutulacak şekilde organize etmek mümkün olabilir (ancak, bu gibi işaretçilerin listesini tutmak için mevcut tekniklere bağlı olarak, bazı durumlarda daha fazla yer kaplayabilir). O zaman, olası bir politika, bellekteki sayfalara hiç bekleyen işaretçi kalmadığında, her zaman aynı sayfayı gösteren en büyük bekleme işaretçisi kümesini takip etmektir.

Üçüncü paragrafta, cevapladıktan sonra eklenen soru ile ilgili olarak, kopya toplama yine bir cevaptır. İşletim sistemi, sayfalar tamamen serbest bırakıldığından toplama zamanında ayrılan fiziksel sayfa sayısını azaltabilir. Bir işaret ve süpürme toplayıcı ile, tam sayfa arınma özgürlüğü olayı muhtemelen daha nadirdir, bu nedenle dikkate alınması gereken belirli bir machanizm değmez.

Bu tür fikirler doğaldır ve muhtemelen bazı makalelerde açıklanmaktadır. Ama elden hatırlamıyorum. Lisp GC ile ilgili ilk bildirilerin bu fikirlerden bazılarını içerdiğini düşünüyorum (örneğin: önce araba veya cdr izlenmeli mi?).

Kopyalama koleksiyonunun bu rolündeki iyi haber, disk belleği, kullanılabilir depolama alanını artırdığından kopya toplama için kolay olmasıdır. Kopya toplayıcının prensipte gerçek veri depolama için kullanılandan iki kat daha fazla alan gerektirdiğini hatırlayın. Şimdi, sayfalamanın etkisi aynı zamanda makinenin adres alanına ve kullanılabilir fiziksel belleğe de bağlıdır. Eski bilgisayarda, fiziksel bellek kullanılabilir adres alanından çok daha azdı, bu nedenle disk belleği gerçekten bir alan bonusu oldu ve GC kopyalaması gibi politikalara izin verdi. Fiziksel alan adres alanı kadar büyük olsa bile, bunu paylaşmak isteyebilirsiniz, böylece GC kullanan işlemin disk belleği olmadan daha az adres alanı olur ( sayfalandırmaya bakın)). Bu sözler, kuşak koleksiyoncularının kullanımından biraz daha fazladır. Genellikle bu nitelikler ve genç neslin çoğunlukla kısa ömürlü olması nedeniyle kopya koleksiyonunu genç nesiller için kullanırlar.

Daha sonra, bir önceki soruda tartışılan, nesil GC'nin önbellek sistemi ile tüm etkileşimlerine sahipsiniz: Nesil çöp toplayıcıları doğal olarak önbellek dostu mudur?

Bu konu hakkında daha fazla bilgi için, örneğin çöp toplama ve yerellik gibi anahtar kelimelerle web'de arama yaparım .


kopya koleksiyoncularının aslında izlemekten daha "yerel" olduğu fikrinden şüpheliyim. kopya toplayıcılar, bellek erişimi dinamiklerinde (belki de neredeyse ayırt edilemez) "eski alan" üzerindeki izlemeye kavramsal olarak oldukça benzer görünmektedir. bunun bir referansa ihtiyacı olduğunu düşünüyorum. kopya mekanizmasının yeni alandaki sürekliliği iyileştirme olasılığı olduğunu söyledi. yeni alan mükemmel bir şekilde bitişik olarak başlar, ancak daha sonra bu "yerellik" zamanla azalır veya azalır.
vzn

Cevabın çoğunu buldun. Bu yüzden şüpheli olma. Konuyla ilgili temel referanslardadır. Depolama alanının sıkıştırılmış olmasından ve işaretçi yapısına göre mantıksal olarak yakın olan (işaretçi yeniden atama ile gelişebilir) birbirine yakın veri hücrelerinin yerini alan kopyalamanın konumu.
babou

hala şüpheci / şüpheliyim. kopya / gc döngüsü başlatıldığında sezgisel olarak eski alanın konumu ve / veya yakınlığı zayıf olacaktır. yerellik okuma (eski alandan) ve yazma (yeni alan) ile ilgilidir. analiz etmek için gestalt / acil davranış incelenmelidir. muhtemelen bunların çoğu teorik olarak sadece ampirik olarak etkili / doğru / gerçekçi bir şekilde incelenebilir.
vzn

Diğer birçok şey gibi literatürde olduğunu söylüyorum. Ama aramak için zamanım yok ve cevabım uzun ve bilgi ile tıka basa dolu olduğunu düşünüyorum. Kısa kaldığım için üzgünüm, yakalamak için bir tren var.
babou

Özür dilerim ... bu soruyu başka bir şeyle karıştırın.
babou

8

Emery Berger, Matthew Hertz ve Yi Feng bu konuda biraz çalıştı.

Çöp toplama, çok sayıda yazılım mühendisliği avantajı sunar, ancak sanal bellek yöneticileriyle zayıf etkileşime girer. Mevcut çöp toplayıcılar, özellikle tam yığın çöp toplama sırasında hangilerinin bellekte olduğuna bakılmaksızın uygulamanın çalışma kümesinden ve dokunmatik sayfalarından çok daha fazla sayfa gerektirir. Ortaya çıkan sayfalama, düşmeye ve durma sürelerinin saniyeler veya hatta dakikalara kadar yükselmesine neden olabilir.

Çağrı yapmayı önleyen bir çöp toplayıcı sunuyorum. Bu yer imi toplayıcı, tahliye kararlarını yönlendirmek için sanal bellek yöneticisi ile işbirliği yapar.

Bu Emery'nin onunla ilgili konuşmasının bir videosu ve sayfalama olmadan bir Çöp Toplama kağıdı yazdı

Bazı nedenlerden ötürü üzerinde çok daha fazla çalışma veya “gerçek dünya” kullanımı gibi görünmüyor. Makalenin sonunda “Yer imi toplama algoritmasının eşzamanlı bir varyantını geliştiriyoruz” diyor , ancak izleyemiyorum.

CRAMM: Çöp Toplanan Uygulamalar için Sanal Bellek Desteği, GC'nin daha az çağrı oluşturmasını sağlamak için işletim sistemini değiştirmeye bakar.

Çöp Toplama İzlemede Tutarları Dengelemek için Sayfa İkametini Kullanma

Nesnelerin ne zaman yeniden konumlandırılacağını belirlemek için çoğunlukla sayfa kalıcılığını kullanan kopyalama koleksiyonunun bir uzantısını sunuyoruz. Koleksiyoncumuz, gereksiz çalışmalardan ve boşa harcanan yerden kaçınarak, yüksek ikameti olan sayfaları teşvik eder. Her sayfanın ikametgahını tahmin eder, ancak tahminleri yanlış olduğu kanıtlandığında, toplayıcımız tahsis taleplerini karşılamak için boş alanı geri alır. Tekniğimiz, saf bir kopyalayıcı toplayıcıdan daha az yer gerektirir ve nesnelerin yerini değiştirme yeteneğinden ödün vermeden nesne sabitlemeyi destekler.Diğer hibritlerin aksine, toplayıcımız uygulamaya özgü yapılandırmaya bağlı değildir ve değişen uygulama davranışına hızla yanıt verebilir. Ölçümlerimiz, hibritimizin çeşitli koşullar altında iyi performans gösterdiğini göstermektedir; geniş bir yığın alanı olduğunda kopyalama koleksiyonunu tercih eder, ancak alan sınırlı olduğunda kopyalama dışı koleksiyona geri döner.

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.