it-swarm-tr.com

Linux'ta dosyaları önbelleğe alma / ön yükleme RAM

4GB RAM ve oldukça aynı gün tüm gün hizmet veren oldukça eski bir sunucum var, ancak 3GB RAM "ücretsiz" dir.

Bir ram-drive çalıştırmayı deneyen herkes hız açısından harika olduğuna tanık olabilir. Bu sistemin bellek kullanımı genellikle 1GB/4GB'den daha yüksek değildir, bu yüzden iyi bir şey için bu ekstra belleği kullanmanın bir yolu olup olmadığını bilmek istiyorum.

  • Dosya sistemine belirli dosyaları her zaman RAM dışında sunmasını söylemek mümkün mü?
  • RAM kullanarak dosya okuma yeteneklerini geliştirmek için kullanabileceğim başka yöntemler var mı?

Daha spesifik olarak, burada bir 'hack' aramıyorum. Ben dosya sistemi çağrıları bir ram sürücü oluşturmak ve orada dosyaları el ile kopyalamak gerek kalmadan RAM) dosyaları hizmet istiyorum veya en azından benim için bunu yapan bir komut dosyası istiyorum.

Buradaki olası uygulamalar:

  • Çok okunan statik dosyaları olan web sunucuları
  • Büyük kütüphanelere sahip uygulama sunucuları
  • Çok fazla RAM'e sahip masaüstü bilgisayarlar

Herhangi bir fikir?

Düzenle:

  • Bunu çok bilgilendirici buldum: Linux Sayfa Önbelleği ve pdflush
  • Zan'ın belirttiği gibi, bellek aslında özgür değil. Demek istediğim, uygulamalar tarafından kullanılmıyor ve bellekte nelerin önbelleğe alınması gerektiğini kontrol etmek istiyorum.
76
Andrioid

vmtouch iş için iyi bir araç gibi görünüyor.

Özellikleri:

  • bir dizinin ne kadarının önbelleğe alındığını sorgula
  • bir dosyanın ne kadarının önbelleğe alındığını sorgulama (ayrıca hangi sayfalar, grafiksel gösterim)
  • dosyayı önbelleğe yükle
  • dosyayı önbellekten kaldır
  • dosyaları önbellekte kilitle
  • cin gibi koş

vmtouch kılavuz

DÜZENLEME: Soruda sorulan kullanım vmtouch Hompage adresindeki örnek 5'te listelenmiştir.

Example 5

Daemonise and lock all files in a directory into physical memory:

vmtouch -dl /var/www/htdocs/critical/

EDIT2: Yorumlarda not edildi olduğu gibi, artık bir git depos kullanılabilir.

60
seeker

Bu, vmtouch Sanal Bellek Dokunucusu yardımcı programı kullanılarak da mümkündür.

Araç, bir Linux sistemindeki dosya sistemi önbelleğini kontrol etmenizi sağlar. VM önbellek alt sisteminde belirli bir dosyayı veya dizini zorlayabilir veya kilitleyebilir veya VM'de bir dosya/dizinin hangi bölümlerinin bulunduğunu görmek için kullanabilirsiniz.

How much of the /bin/ directory is currently in cache?

$ vmtouch /bin/
           Files: 92
     Directories: 1
  Resident Pages: 348/1307  1M/5M  26.6%
         Elapsed: 0.003426 seconds

Veya...

Let's bring the rest of big-dataset.txt into memory...

$ vmtouch -vt big-dataset.txt
big-dataset.txt
[OOo                                                 oOOOOOOO] 6887/42116
[OOOOOOOOo                                           oOOOOOOO] 10631/42116
[OOOOOOOOOOOOOOo                                     oOOOOOOO] 15351/42116
[OOOOOOOOOOOOOOOOOOOOOo                              oOOOOOOO] 19719/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOo                        oOOOOOOO] 24183/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo                  oOOOOOOO] 28615/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo              oOOOOOOO] 31415/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo      oOOOOOOO] 36775/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo  oOOOOOOO] 39431/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO] 42116/42116

           Files: 1
     Directories: 0
   Touched Pages: 42116 (164M)
         Elapsed: 12.107 seconds
26
ewwhite

Zavallı bir adamın dosya sistemi önbelleğine bir şeyler alma hilesi basitçe onu kedi ve/dev/null'a yönlendirmektir.

23
cagenut

Linux, diskte olabildiğince fazla disk önbelleğe alır IO. Bu önbellek ve arabellek istatistiklerinin ne olduğudur.

Ancak, verilerinizi bellekte depolamakta ısrar ediyorsanız, tmpfs veya ramfs kullanarak bir ram sürücüsü oluşturabilirsiniz. Aradaki fark, ramfs'nin istediğiniz tüm belleği ayırmasıdır, çünkü tmpfs sadece blok cihazınızın kullandığı belleği kullanacaktır. Hafızam biraz paslı, ancak şunları yapabilmelisin:

 # mount -t ramfs ram /mnt/ram 

veya

 # mount -t tmpfs tmp /mnt/tmp

ve ardından verilerinizi dizine kopyalayın. Açıkçası, makineyi kapattığınızda veya bu bölümü ayırdığınızda, verileriniz kaybolacaktır.

18
David Pashley

2.6 çekirdek değiştirme ve sayfa önbellekleme özellikleri üzerine kapsamlı bir okumadan sonra 'fcoretools' buldum. Hangi iki araçtan oluşur;

  • fincore: Uygulamanın çekirdek bellekte kaç sayfa sakladığını gösterir
  • fadvise: Çekirdek belleği (sayfa önbelleği) değiştirmenizi sağlar.

(Başka birinin bunu ilginç bulması durumunda, bunu buraya gönderiyorum)

18
Andrioid

Diğer araçları kullanmadan bile önemli ölçüde yardımcı olabilecek iki çekirdek ayarı vardır:

swappiness

linux çekirdeğine swap'ı ne kadar agresif kullanması gerektiğini söyler. Wikipedia makalesinden alıntı:

Swappiness, Linux çekirdeği için, sayfaları sistem sayfası önbelleğinden bırakmanın aksine, çalışma zamanı belleğini değiştirmek arasındaki dengeyi değiştiren bir özelliktir. Swappiness 0 ile 100 arasındaki değerlere ayarlanabilir. Düşük bir değer, çekirdeğin mümkün olduğunca değiştirmekten kaçınmaya çalışacağı ve bunun yerine daha yüksek bir değerin çekirdeği agresif bir şekilde takas alanı kullanmaya çalışacağı anlamına gelir. Varsayılan değer 60'tır ve çoğu masaüstü sistemi için 100'e ayarlamak genel performansı etkileyebilir, daha düşük (0'a eşit) olarak ayarlamak etkileşimi artırabilir (yanıt gecikmesini azaltabilir).

vfs_cache_pressure

Alıntı yapma vm.txt :

Çekirdeğin dizin ve inode nesnelerinin önbelleğe alınması için kullanılan belleği geri alma eğilimini kontrol eder.

Varsayılan vfs_cache_pressure = 100 değerinde çekirdek, dizgi ve inode'ları pagecache ve swapcache geri alımına göre "adil" bir oranda geri almaya çalışacaktır. Vfs_cache_pressure değerinin azaltılması, çekirdeğin dişçilik ve inode önbelleklerini tutmayı tercih etmesine neden olur. ...


swappiness yüksek (100 gibi) ayarlandığında, çekirdek takas etmek için ihtiyaç duymadığı her şeyi hareket ettirir ve dosyaları önbelleğe almak için RAM) ve vfs_cache_pressure daha düşük (diyelim ki 50 değil, 0 değil!), uygulama verilerini RAM'de tutmak yerine önbellek dosyalarını tercih eder.

(Büyük bir Java proje üzerinde çalışıyorum ve her çalıştırdığımda, RAM ve disk önbelleğini temizlediğimde) Bu iki ayarı değiştirerek, kaynakları ve derlenmiş çıktıyı RAM'de önbelleğe almayı başardım, bu da süreci önemli ölçüde hızlandırır.)

7
Petr Pudlák

Ben aslında 3 GB ile diskten dosya hizmet şüphe RAM ücretsiz. Linux dosya önbellekleme çok iyi.

Disk GÇ görüyorsanız, günlük yapılandırmalarınıza bakarım. Bir çökme durumunda en son günlük bilgilerinin kullanılabilir olmasını sağlamak için birçok günlük arabelleksiz olarak ayarlanır. Ne olursa olsun hızlı olması gereken sistemlerde arabelleğe alınmış log IO kullanın veya bir uzak günlük sunucusu kullanın.

3
Zan Lynx

Yalnızca mmaps dosyalarınızın çalışmasını sağlayan bir programınız olabilir.

3
Brad Gilbert

Bol miktarda belleğiniz varsa, önbelleklemek istediğiniz dosyalarda cat veya benzeri ile kolayca okuyabilirsiniz. Linux daha sonra onu korumak için iyi bir iş çıkarır.

http://www.coker.com.au/memlockd/ bunu yapar

gerçekten ihtiyacınız olmasa da, linux kullandığınız dosyaları kendi kendine önbelleğe almak için oldukça iyi bir iş çıkarır.

0
Justin

Kullanabileceğiniz çeşitli ramfs sistemleri vardır (örneğin, ramfs, tmpfs), ancak genel olarak dosyalar gerçekten sık sık okunuyorsa, dosya sistemi önbelleğinize otururlar. Çalışan dosya kümeniz serbest koçunuzdan daha büyükse, dosyalar bundan silinir - ancak çalışma kümeniz serbest koçunuzdan daha büyükse, bunları da bir ramdiske sığdırmanın hiçbir yolu yoktur.

Bir Kabuktaki "serbest" komutunun çıktısını kontrol edin - "Önbellek" altındaki son sütundaki değer, boş koçunuzun dosya sistemi önbelleği için ne kadar kullanıldığını gösterir.

0
Daniel Lawson

Tam olarak sorulan şey değil, ama kullanıyorum

bulmak BASE_DIRECTORY -tip f -exec cat {}>/dev/null \;

anlık görüntüden oluşturulan bir AWS birimindeki dosyaların başlatılmasını tetiklemek için. Sadece bazı dosyaları okumak istiyorsanız, dd'yi kullanmanın resmi önerisinden daha odaklıdır.

0
Federico

İkinci sorunuza gelince, işlemcinin verileri paralel olarak alabilmesi için RAM farklı bellek kanallarında oturduğundan emin olun.

0
sybreon

Bunun uygulama düzeyinde daha iyi çözülebileceğini düşünüyorum. Örneğin, bunun için muhtemelen özel web sunucuları vardır veya Apache ile mod_cache düşünebilirsiniz. Web içeriğinin daha hızlı sunulması gibi belirli bir hedefiniz varsa, bence bu tür şeylerden iyileştirmeler alabilirsiniz.

Ancak sorunuz genel olarak doğası gereği, Linux bellek alt sistemi en iyi genel RAM kullanımını sağlamak üzere tasarlanmıştır. Belirli performans türlerini hedeflemek istiyorsanız,/proc/sys/vm içindeki her şeye bakmayı düşünün.

Fcoretools paketi ilginç, uygulamasıyla ilgili herhangi bir makaleyle ilgileniyorum ... Bu bağlantı bir uygulamada kullanılan gerçek sistem çağrıları hakkında konuşuyor.

0
Kyle Brandt

ben sadece =/dev/=/dev/null\bs = 1Mcount = howmuchmemoryyouwanttofill =/dev/yourrootpartition eğer dd denedim

bana istediğin kontrolü vermiyor ama en azından boşa harcanan belleği kullanmaya çalışıyor

0
Bogus Name

Masaüstü bilgisayarlar (örn. Ubuntu), önyükleme sırasında belleğe önceden yüklenmiş dosyaları (en azından popüler paylaşılan kütüphaneler) zaten kullanır. FF, OO, KDE ve GNOME (evrim bloat mailler ile) gibi farklı bloarware önyükleme ve başlatma süresini hızlandırmak için kullanılır.

Araç readahead http://packages.ubuntu.com/dapper/admin/readahead olarak adlandırılır

Ayrıca ilgili sistem çağrısı da vardır: readahead (2)http://linux.die.net/man/2/readahead

Daemon önyükleme projesi de var: http://linux.die.net/man/8/preload

0
osgx

rastgele bir karakterin find/-name dizesini kullanıyorum.

0
user50472