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.
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:
Herhangi bir fikir?
Düzenle:
vmtouch iş için iyi bir araç gibi görünüyor.
Özellikleri:
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.
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
Zavallı bir adamın dosya sistemi önbelleğine bir şeyler alma hilesi basitçe onu kedi ve/dev/null'a yönlendirmektir.
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.
2.6 çekirdek değiştirme ve sayfa önbellekleme özellikleri üzerine kapsamlı bir okumadan sonra 'fcoretools' buldum. Hangi iki araçtan oluşur;
(Başka birinin bunu ilginç bulması durumunda, bunu buraya gönderiyorum)
Diğer araçları kullanmadan bile önemli ölçüde yardımcı olabilecek iki çekirdek ayarı vardır:
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).
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.)
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.
Yalnızca mmap
s dosyalarınızın çalışmasını sağlayan bir programınız olabilir.
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.
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.
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.
İkinci sorunuza gelince, işlemcinin verileri paralel olarak alabilmesi için RAM farklı bellek kanallarında oturduğundan emin olun.
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.
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
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
rastgele bir karakterin find/-name dizesini kullanıyorum.