Evet.
Çok zorlayıcı, yasaklayıcı bir sebep olmadıkça (hiç disk yok veya yalnızca ağ diski var) hariç, kesinlikle her zaman takas özelliğini etkinleştirmelisiniz. Sıkça tavsiye edilen saçma boyutların (örneğin, RAM miktarının iki katı) sırasına göre bir takasınız mı olmalı? Hayır , hayır .
Bunun nedeni, takas işleminin yalnızca uygulamalarınız fiziksel RAM'den daha fazla bellek kullanması durumunda yararlı olmamasıdır (aslında, bu durumda takas performansı hiç de ciddi bir şekilde etkilediğinden dolayı hiç de faydalı değildir ). Takas için ana teşvik günümüzde olduğu değil sihirli 32 GiB içine RAM 16GiB açmak için, ama yüklü, mevcut RAM daha verimli kullanılmasını sağlamak için.
Modern bir bilgisayarda, RAM kullanılmaz. Kullanılmayan RAM, bunun yerine parayı satın alıp tasarruf etmeyeceğiniz bir şeydir. Bu nedenle, yük veya başka bellek eşlemeli olan şey, edebileceğim bir şey şey muhtemelen sonraki bir zamanda herkes tarafından yeniden (güvenlik kısıtlamaları ile sınırlı) önbelleğe ediliyor. Makine başlatıldıktan hemen sonra, tüm fiziksel RAM bir şey için kullanılacaktır .
İşletim sisteminden yeni bir bellek sayfası istediğinizde, bellek yöneticisi bilinçli bir karar vermelidir:
- Sayfayı arabellek önbelleğinden temizleme
- Bir haritayı bir haritadan temizleme (çoğu sistemde etkin olarak # 1 ile aynı)
- Uzun süredir erişilemeyen bir sayfayı - tercihen hiçbir zaman - takas etmeyin (bu aslında son anda değil, proaktif olarak gerçekleşebilir)
- Sürecini öldür ya da rastgele bir işlemi öldür (OOM)
- Çekirdek panik
Seçenekler # 4 ve # 5 çok istenmeyen bir durumdur ve yalnızca işletim sistemi kesinlikle başka bir seçeneğe sahip değilse gerçekleşir. Seçenek # 1 ve # 2, kısa süre sonra tekrar ihtiyaç duyacağınız bir şeyi atmanız anlamına gelir. Bu, performansı olumsuz yönde etkiler.
Seçenek # 3, yakın zamanda yavaş depolamaya ihtiyaç duymayacağınız (muhtemelen) bir şeyi taşıyacağınız anlamına gelir. Bu iyi çünkü artık ihtiyacınız olan bir şey hızlı RAM'i kullanabilir.
3. seçeneği kaldırarak, işletim sistemini etkin bir şekilde # 1 veya # 2 yapmakla sınırlandırdınız. Bir sayfayı diskten yeniden yüklemek, takastan yeniden yüklemekle aynıdır, takastan yeniden yüklemek zorunda kalmak dışında genellikle daha az olasıdır (uygun disk belleği kararları alınmasından dolayı).
Başka bir deyişle, takas işlevini devre dışı bırakarak hiçbir şey elde edemezsiniz, ancak işletim sisteminin bellek isteğiyle ilgili olarak kullanabileceği yararlı seçenek sayısını sınırlandırırsınız. Hangi olmayabilir , ama çok büyük olasılıkla olabilir bir dezavantaj (ve bir avantaj olmayacak).
[DÜZENLE]
mmap
Manpage'in dikkatlice okuyucusu , özellikle de tanımı, MAP_NORESERVE
“yeterli” fiziksel belleğe sahip bir sistemde bile bir takas işleminin neden bir zorunluluk olduğunun bir başka iyi nedenini görecektir:
"Takas alanı rezerve edilmediğinde, herhangi bir fiziksel bellek yoksa, bir yazma üzerine SIGSEGV verilebilir."
- Bir dakika bekle, bu ne anlama geliyor?
Bir dosyayı eşlerseniz, dosya içeriğine doğrudan, dosya bir şekilde, sihirle programınızın adres alanındaki gibi erişebilirsiniz. Salt okunur erişim için, işletim sistemi ilke olarak farklı bir sanal sayfaya her eriştiğinizde farklı verilerle çoğalabilecek tek bir fiziksel bellek sayfasından daha fazlasına ihtiyaç duymaz (verimlilik nedenleriyle, elbette bu değil. prensipte terabayt değerindeki verilere tek bir fiziksel hafıza sayfasıyla erişebilirsiniz). Şimdi sana ne olursa ayrıcadosya eşlemesine yaz? Bu durumda, işletim sisteminde yazılan her sayfa için hazır bir fiziksel sayfa (veya takas alanı) bulunmalıdır. Kirli sayfalar geri yazma işlemi çalışmalarını gerçekleştirene kadar (birkaç saniye olabilir) verileri etrafta tutmanın başka bir yolu yoktur. Bu nedenle, işletim sistemi saklar (ancak zorunlu olarak hiç işlemez) alanını değiştirir, bu nedenle kullanılmayan bir fiziksel sayfa yokken bir haritaya yazıyorsanız (bu oldukça olası ve normal bir durum) yeniden garantili o çalışmaya devam edeceğini.
Şimdi, takas yoksa ne olacak? Bu, hiçbir takas işleminin rezerve edilemeyeceği anlamına gelir (hah!) Ve bu, hiçbir fiziksel sayfa kalmaz kalmaz ve bir sayfaya yazıyorsanız, işlem alma biçiminizde hoş bir sürprizle karşılaşacağınız anlamına gelir. bir segmentasyon hatası ve muhtemelen öldürülüyor.
[/DÜZENLE]
Bununla birlikte, RAM'in iki katı değiş tokuş yapmanın geleneksel önerisi saçmadır. Disk alanı ucuz olmasına rağmen, bu kadar takas atamak mantıklı değil. Ucuz şey israf hala savurgan olduğunu ve kesinlikle istemiyoruz sürekli içinde takas ve dışarı oluşturduğunun megabayt (veya daha büyük) boyutunda birkaç yüz çalışıyor gibi.
Tek bir "doğru" takas boyutu yoktur (kullanıcılar ve görüşler kadar çok "doğru" boyut vardır). Genellikle benim için çok iyi çalışan RAM boyutundan bağımsız olarak sabit bir 512MiB atarım. Bunun nedeni, 512MiB'nin bugünlerde her zaman küçük bir diskte bile karşılayabileceğiniz bir şey olmasıdır . Öte yandan, birkaç gigabayt takas alanını eklemek daha iyi değildir. Bir şeylerin ciddi şekilde yanlış gitmesi dışında, onları kullanmayacaksınız.
Bir SSD'de bile, takas RAM'den daha yavaş olan büyüklük emirleridir (veri yolu bant genişliği ve gecikme nedeniyle) ve takas için muhtemelen tekrar ihtiyaç duyulmayacak bir şeyi taşımak çok kabul edilebilirken (yani, muhtemelen olmayacak) tekrar takas etmek, bu nedenle mevcut sayfa havuzunuz ücretsiz olarak etkili bir şekilde büyütülür), gerçekten önemli miktarda takas seçeneğine ihtiyacınız varsa (yani, örneğin bir 50GiB veri kümesi kullanan bir uygulamanız varsa), hemen hemen kaybolmuş olursunuz.
Bilgisayarınız, gigabayt sayfa değerinde girip çıkmaya başladığında, her şey bir taramaya gider. Yani, çoğu insan için (ben dahil) bu bir seçenek değildir ve bu kadar değiş tokuş yapmak bu yüzden bir anlam ifade etmemektedir.