HD / DVD film izledikten sonra çok fazla aktif bellek


3

Takılı 16GB bellek ile 2010 orta orta iMac (çekirdek i7) sahibi.
Normalde, Mac OS X (SL ve Lion) hiçbir zaman takas kullanmaz (sayfa giriş / çıkış = 0'dır), her zaman 3-8 GB boş hafıza vardır.
Ancak birkaç DVD / h264 filmi izledikten sonra, sadece 50-100 * MB * boş hafıza vardır ve takas aktif olarak kullanılır. Video dosyalarının sistem belleğine eşleştirildiği anlaşılıyor, çünkü etkin olmayan bellek miktarı ~ = dosya boyutu. Tek geçici çözüm purgeyardımcı programı kullanmaktır .

purgeHer filme baktığımda koşmaktan daha iyi bir çözüm arıyorum .

çalışma süresi:

4:08  up 3 days,  7:35, 5 users, load averages: 0,71 0,76 0,71

vm_stat:

Mach Virtual Memory Statistics: (page size of 4096 bytes)
Pages free:                         738409.
Pages active:                      1715722.
Pages inactive:                     536891.
Pages speculative:                  857329.
Pages wired down:                   344323.
"Translation faults":           1067897384.
Pages copy-on-write:               6068992.
Pages zero filled:               591232281.
Pages reactivated:                 1906255.
Pageins:                           5019598.
Pageouts:                           861857.
Object cache: 16 hits of 1354202 lookups (0% hit rate)

Hangi video oynatıcıları kullanıyorsunuz? Ayrıca unutmayın, sistem her zaman 50 ila 100 MB boş hafıza almaya çalışacaktır, böylece işler düzgün çalışıyor demektir. "Takas aktif olarak kullanılıyor" derken ne demek istiyorsun?
bmike

QuickTime / dahili DVD oynatıcı / VLC / MPlayerX. Neredeyse her operasyon için tarih yazılır ve değiştirilir.
Kentzo

QuickTime ve DVD oynatıcı aslan makinelerime en az takas ediyor. 2 GB RAM'e sahip bir havada bile video oynatmak, ikinci takas dosyasının bile diskte oluşturulmasına neden olmaz.
bmike

1
@bmike: QuickTime takas değil, gördüğü her okumayı önbelleğe alan işletim sistemi. Diğer bellek sayfaları disk önbelleğinden daha uzun süre etkin olmadığından ilk önce değiştirilirler. Bu normal ve istenen bir davranış .
Josh

Yanıtlar:


3

Gördüğün şey normal ve istenen davranış.

OS X, Linux ve BSD gibi, bir disk önbelleğine sahiptir. Bu, okunan veya diske yazılmış herhangi bir şeyin bellekte tutulduğu anlamına gelir. "Aktif Değil" belleği bu disk önbelleğini içerir.

AskDifferent üzerindeki bu cevap yaptığı gibi, onu açıklayan macosxhints.com bu yazı :

Bununla birlikte, X'in temelleri (yani UN * X çekirdeği), kullanıcı tarafından herhangi bir girişe ihtiyaç duyulmaksızın bu iki özelliği de sağlar. Buna dosya sistemi arabellek önbelleği denir. En önemli fark, arabellek önbelleğinin boyutunun dinamik olmasıdır. Bazı küçük boyutlarla başlar ve giriş / çıkış talepleri ve Uygulamalar belleği gereksinimleri zaman içinde değiştikçe büyüyebilir ve küçülebilir.

Buna 'arabellek önbelleği' denir, çünkü g / Ç verilerini diske giden yolda arabelleğe alır. Bir Uygulama veri yazdığında, ilk önce Uygulamalar dosya tampon belleği bölgesine bırakılır ve ardından çekirdeğin (OS) Uygulama tamponundan diske kopyalaması için kütüphane rutinleri aracılığıyla talep edilir. Çekirdek zorunlu olacak ve önce arabelleğine kopyalayacaktır - dosya sistemi arabelleği önbelleği. Çekirdek, arabellek önbelleğinde daha fazla alana ihtiyaç duyuyorsa, onu boş bellekten alır. Bu olduğunda, boş hafıza değeri Terminal'in en üst komutunda derhal boş hafıza azalması gösterecektir. Daha sonraki bir noktada, çekirdek bu verileri (kirli arabellekleri olarak adlandırılır) uygun disk konumuna kopyalayacaktır. Bunun yapılmasının sıklığının 30 saniye olduğunu düşünüyorum - diske senkronizasyon deniyor.

Diske disk belleği yerleştirilmiş olması her zaman kötü bir şey değildir . Bellek sayfaları tamamen etkin değilse, diske disk belleği ayırmak performansı artırabilir , çünkü disk önbelleği için kullanılabilecek RAM israfı yapıyorlar. Sayfalara bir kez basıldıklarında ve film izlemeyi bıraktığınızda, gerektiğinde arabellekleri ve disk önbelleğini otomatik olarak değiştirecekleri şekilde geri çağırın. purgeHer seferinde koşmana gerek yok . OS X'in disk önbelleğini, tasarlandığı gibi yönetmesine izin verin.

Bu konuda daha fazla bilgi için bakınız çağrı üzerine wikipedia makale ve Sayfa önbelleği makalesine .


TL; DR bilgisi:

İşte takas Linux altında nasıl çalıştığını açıklayan bir makale . OS X için% 100 geçerli olmamakla birlikte, konsept aynıdır. İlgili kısmı alıntılayacağım:

Bir uygulama belleğe ihtiyaç duyduğunda ve tüm RAM tamamen dolduğunda, çekirdeğin bir miktar belleği boşaltmak için iki yolu vardır: en eski verileri ortadan kaldırarak RAM'deki disk önbelleğini azaltabilir veya daha az kullanılan kısımları değiştirebilir ( sayfalarında) diskteki takas bölümüne programların dışına. Hangi yöntemin daha verimli olacağını tahmin etmek kolay değildir. Çekirdek, son etkinlik geçmişine dayanarak, iki yöntemin etkinliğini belirli bir anda kabaca tahmin ederek bir seçim yapar.

Bir DVD veya film izlediğinizden, en son kullanılan bellek sayfaları disk önbelleğidir, bu nedenle OS X, RAM’de kalmaya ve video dosyalarına erişmeye başlamadan önce etkin olmayan bellek sayfalarını değiştirmeye karar verir. . Video dosyalarına erişmeyi bırakıp değiştirilen bellek sayfalarını kullanarak programlara eriştiğinizde, tersi doğrudur: OS X, video verilerini içeren disk önbelleğini atar ve değiştirdiği bellek sayfalarıyla değiştirir. Ardından takas kullanımınız azalır.

İşte FreeBSD'ye özgü (Mac OS X'e benzer) özel biraz daha fazla bilgi :

FreeBSD disk önbelleği için 'tüm belleği' kullanacaktır. Bunun anlamı 'serbest' kepçenin tipik olarak içinde sadece birkaç sayfa içerdiğidir. Sistem biterse, önbellek kovasından daha fazla sayfa boşaltabilir.

Sistem etkinliği şu şekilde çalışır: Bir program, diskteki bir dosyaya (vb ...) aktif olarak bir sayfaya başvurduğunda, sayfa fiziksel bir G / Ç işlemi aracılığıyla arabellek önbelleğine getirilir. Tipik olarak 'aktif' kovaya gider. Bir program sayfaya başvurmayı durdurursa, sayfa yavaş yavaş etkin olmayan veya önbellek kovalarına doğru hareket eder (kirli olup olmamasına bağlı olarak). Kirli sayfalar, yavaşça arka mağazalarına yazılarak yavaşça 'temizlenir' ve etkin olmayanlardan önbelleğe taşınırlar ve önbellek sayfaları, ücretsiz kovada en az sayıda gerçekten boş sayfa bulundurmak için gerektiği şekilde serbest bırakılır. Bu sayfalar, takas alanlarını destek depoları olarak tahsis ederek, kovalardan geçmelerine ve sonunda yeniden kullanılmalarına izin vererek hala temizlenebilir.

[...]

VM arabellek önbelleği, temel alınan depolamayı önbelleğe alır; örneğin, yalnızca bir dosyayla ilişkili veri bloklarını önbelleğe almakla kalmaz, aynı zamanda inode bloklarını ve bitmap bloklarını da önbelleğe alır. Bu nedenle çoğu dosya sistemi işlemi, üçlü-dolaylı blok aramaları ve hatta

[...]

FreeBSD tartışmasız en iyi takas kodlarından bazılarına sahiptir. Ben şahsen Linux’tan daha çok hoşuma gidiyor. Linux takas konusunda daha hafiftir, ancak değişen yük koşullarında sistem belleği kaynak kullanımını dengelemez. FreeBSD yapar.

FreeBSD, bellekte varolan sayfaların işe yaramazlığını not eder ve daha aktif amaçlar için (örneğin, dosya tamponlama veya daha fazla program alanı gibi) kullanılabilmesi için boş hafıza kullanmanın avantajlı olacağına karar verir. (Kullanılmayan) sayfaları (ucuz) disk alanından kazanmak için çevrede tutmak berbat bir atıktır. Düşük seviye SWAP G / Ç, dosya G / Ç'den daha az CPU yükü ile daha hızlı olabileceğinden, kullanılmayan sayfaları daha yüksek genel gider mekanizmaları tarafından kullanılmak üzere serbest bırakılabilmeleri için dışarı çıkarmak istenebilir. (not 1)

(Benimkine önem ver, özellikle kalınca sorduğun şey için bu koyu kısmı kontrol et, yani, "Hareketsiz hafızam varken neden takas kullanılıyor?)


Önbelleğe almanın kötü bir şey olduğunu söylemek istemiyorum ve amacını biliyorum. Kötü olan şey, 16GB belleğe sahip olduğum (bellekte kullandığım hemen hemen tüm veri / kodları saklamak için yeterli) ve OSX'in yarısı büyük önbelleğe alınmış video dosyalarını sakladığı için takas kullanıyor olması. 100-200MB kullanılabilir bellek miktarı yaklaştığında dosyaları önbellekten serbest bırakacak önbelleğe alma politikasını ayarlamak istiyorum.
Kentzo 14:11

3
Üstün cevap Josh! OP'de kaybolmuş gözüküyor. Sistemin nasıl çalıştığını tam olarak anlamayan, ancak davranışını aynı şekilde değiştirmek isteyen kullanıcıları hiç anlamadım. @Kentzo, böyle şeyleri ayarlayamazsınız. Kullanıcı kontrolüne açık değillerdir.

Asla bir kullanıcı ülkesi aradığımı söylemedim. Önbelleğe alma politikasını kontrol etmek için çekirdek işlevleri varsa, sadece gelin, gerisini ben hallederim. Buradaki fikir, zaten bu soruna rastlayan biriydi ve zaten bir daemon / script yazdı.
Kentzo,

@Kentzo: "Kötü bir şey, 16GB'lık belleğim olması ve OSX'in takas kullanmasıdır çünkü yarısı büyük önbelleğe alınmış video dosyalarını tutar". Bunu yalnızca değiştirilen bellek sayfalarını kullanmadığınızda yapmanız gerekir. Değişim fena değil. Video dosyalarını izlemeyi tamamladığınızda sayfalar hemen değiştirilmelidir.
Josh,

1
Sayfa dosyası boyutunuzu 250 MB civarında ayarlamayı deneyin. Bakalım aynı davranışa şahit oldunuz mu. (Bunu OSX'te yapabileceğinizi bile bilmiyorum .) Yaptığı şey, videonun içeriğini kopyalamak ve oynatmak için her şeyi bitişik yapmak. Ayrıca, bir DVD ripini HDD’nize oynamak yerine doğrudan dönen parlak optik diskten DVD oynatırken bunu yaptığınızı doğrulayın. Parlak bir optik altlığı olan, tam olarak aynı şeyi yaparsa, muhtemelen çekirdeği ile değil, OSX uygulamalarında bir hata bulduğunuzu biliyorsunuzdur.
jcolebrand

1

Bildiğim kadarıyla (ve fark ettiğim için) bu "etkin olmayan" hafıza hakkında endişelenmenize gerek yok. Sistem isteğe bağlı olarak yeniden tahsis eder. Sistemin işlemesi için büyük bir dosya aktarımı olduğunda olur. Bu tür bir işlem, işlemi hızlandırmak için mümkün olduğunca fazla bellek kullanır. Aktarım tamamlandığında, hafıza durumu "etkin değil" olarak kalır, ancak siz de özgür olarak kabul edebilirsiniz ...


Bir filmi izledikten sonra tüm video oynatıcılardan düzgün bir şekilde çıksam, işletim sistemi hangi süreci hızlandırmaya çalışıyor? Aktif olmayan belleği tekrar kullanmak yerine neden sabit sürücüyü (takas yeri bulunduğu) kullanıyor ?
Kentzo

@Kentzo: İşletim sistemi otomatik olarak disk okumalarını boş RAM'e kaydeder. Uzun zamandır aktif olmayan bellek sayfaları, disk önbelleğine / tamponlarına yer açmak için diske yönlendirilir, çünkü bu aslında performansı artırabilir . Bunu cevabımı yazdım ve bunu telafi etmek için bir referans arıyorum.
Josh
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.