Linux'u içerik yerine meta verileri önbelleğe almak için nasıl yapılandırılır?


14

Sistemi, dosya sistemi meta verilerinin önbelleğe alınması için en fazla RAM kullanacak şekilde ayarlamak istiyorum, ancak okuma / yazma önbelleğe alma ve dosyaları önceden getirme için oldukça makul bir miktar. İdeal olarak ben gerçekten bir dosya açana kadar diskleri döndürmeden (RAM RAM sığar) dosya sistemine göz atmak istiyorum.

İşte detaylar:

Ev yapımı bir dosya sunucum var. 9 TB civarında bir LVM biriminde beş disk var, ancak sadece 4GB RAM. Sunucu dosya sunmadan başka bir şey yapmadığından, RAM'in çoğu önbellekleme için kullanılır. (“Ücretsiz”, önbellek için kullanılan 3,9G'den 3,4G olduğunu bildirir.)

Sunucu yatak odamda yaşıyor ve tüm diskler dönüyorsa sessiz olduğunda can sıkıcı olmak için yeterli gürültü yapar. (Gürültü aramak demek değil, sadece gürültüyü döndürmek. Diskler çeşitli marka ve modellerde ve sanırım dönüş hızlarındaki küçük farklılıklar parazite neden oluyor. Disk tek başına gürültülü değil, ancak bazıları birlikte dönüyorsa alt Hertz dönemi ile hafif bir gürültü.) Bu yüzden sunucuyu çoğu zaman diskleri aşağı çevirecek şekilde yapılandırdım.

Tabii ki, dosya yöneticimde bir klasör açtığımda diskler bükülürse, disklerden hangisinde bu klasör açılırsa bir gecikme olur. Sadece bu önemli değil. Ancak, nerede göründüğüme bağlı olarak, LVM farklı disklerdeki her alt klasör için meta verileri yaydıysa, arka arkaya birkaç kez olabilir.

Linux'un önbelleğini çoğunlukla dosya içeriği ve muhtemelen önceden getirilmiş verilerle doldurduğundan şüpheleniyorum. Önbelleğe alma, düzgün oynatmayı sağlamak için birkaç MB'nin ötesinde çok kullanışlı değildir; Eğer bir film izleseydim, muhtemelen yakın zamanda tekrar bakmayacağım. Önbellekleme, gerçekleşirse, birkaç MB'den sonra benim durumumda tamamen işe yaramaz .

Ancak, çoğu dosya sistemi meta verisini, en azından daha önce ziyaret edilmiş olan parçaları önbelleğe alabilmek için 4GB'nin bol olması gerektiğini düşünürüm, böylece, eğer çıkarsa diskleri döndürmeye gerek kalmadan dosyalara göz atabilirim uyuyor.

Dosya açılırken hala bir gecikme olur, ancak sorun değil. Karşılaştır “tıklayın; bekleyin ; Tıklayın; bekleyin ; Tıklayın; bekleyin ; Oyna; watch ”ile“ click; Tıklayın; Tıklayın; Oyna; bekleyin ; izlemek". Birincisi inanılmaz derecede sinir bozucu; ikincisi neredeyse bekleniyor.

Notlar:

  1. Önemli olursa, çekirdek 3.2, işletim sistemi Debian, hacim lvm2 ve FS ext4'tür.

  2. Aşağı inmenin tek nedeni gece boyunca gürültüdür; aksi halde sunucu sürekli çalışıyor demektir. (Makul olduğu kadar düşük güçte yaptım.) Devrilme gecikmesi günün saatine göre değişir.

  3. Sabit diskler yalnızca ortam içindir. İşletim sistemi ayrı (küçük) bir flash sürücüde. (Bu, herhangi bir spin-up gecikmesi, sadece bir şey /usrveya herhangi bir şeye ihtiyaç duyduğu için verilerden gelmediği anlamına gelir . Sorunumla bir şekilde yardımcı olursa, birkaç GB'yi yedekleyebilirim .

  4. Performans üzerinde makul bir etki önemli değildir. Diskler zaten ağımdan daha hızlı.

Yanıtlar:


10

Linux'un şeyleri nasıl önbelleğe aldığını kontrol etmek için https://www.kernel.org/doc/Documentation/sysctl/vm.txt

Özellikle vfs_cache_pressure'a bakın, muhtemelen gerçekten düşük bir değer veya belki de sıfır istersiniz (1 bana biraz daha güvenli geliyor):

vfs_cache_pressure
------------------

Controls the tendency of the kernel to reclaim the memory which is used for
caching of directory and inode objects.

At the default value of vfs_cache_pressure=100 the kernel will attempt to
reclaim dentries and inodes at a "fair" rate with respect to pagecache and
swapcache reclaim.  Decreasing vfs_cache_pressure causes the kernel to prefer
to retain dentry and inode caches. When vfs_cache_pressure=0, the kernel will
never reclaim dentries and inodes due to memory pressure and this can easily
lead to out-of-memory conditions. Increasing vfs_cache_pressure beyond 100
causes the kernel to prefer to reclaim dentries and inodes.

Ayrıca, swappinessverileri asla değiştirmeyecek veya yalnızca aşırı durumlarda gerçekleşecek şekilde değiştirmek isteyebilirsiniz .

drop_cachesSeçenek açıkça artık önbelleğe istemediğiniz verileri bırakarak için kullanışlı olabilir.

Eminim muhtemelen yardımcı olabilecek başka seçenekler de vardır, bu yüzden çekirdek belgelerini gözden geçirin.

Bunları uygulamak için değiştirmek istediğiniz ayarları /etc/sysctl.confveya işletim sisteminizin önyükleme sırasında geri yüklemek için ne gerekiyorsa koyarım.


3
İyi gönderi, ama OP'nin hedefi göz önüne alındığında mümkün olduğu kadar takas etmek istersiniz. Değiştirmek yalnızca kullanıcı belleğini vurur, böylece diske takılma eğilimini artırmak önbellekleri almak için daha fazla fiziksel bellek bırakır. Artan swappiness belleği boşaltır, ancak çok fazla artırılırsa uygulamaları yavaşlatabilir (tatlı noktayı belirlemek temelde yinelemeli
konuklaşmadır

Merhaba Kyle, fikir için teşekkürler. vfs_cache_pressure tür işler, ama yeterli değil. İşte yaptığım şey:
bogdanb

Vcp'yi 0 olarak ayarladığımda, bir şey yaparsam find / -ls > /dev/null, sonra diskleri aşağı çevirin, sonra findtüm dosyaları tekrar açın, diskler dönmez. freeBunu yaparken tamponların yaklaşık 202 MB'a yükseldiğini gösterir. Ancak, eğer yaparsam find, o cat /file/bigger/than/ram > /dev/nullzaman boş alanı doldurmak için yükselen freegösterir cachedve bir nedenden dolayı buffersyaklaşık 195 MB'ye düşer. Sonra diskleri aşağı döndürürsem ve findyine diskleri döndürürsem :-(
bogdanb

Hakkında swappiness: Varsayılan olarak ayarlanmıştır 60, ancak makinenin herhangi bir takas bölümü yoktur, bu yüzden çok şey yapıp yapmadığından emin değilim. Sanırım flash sürücüye bir takas dosyası koyabilirim, ancak nasıl yardımcı olacağı veya nasıl boyutlandırılacağı hakkında hiçbir fikrim yok.
bogdanb

1
Linux önbellekleme konusunda akıllı olmaya çalışıyor. Vfs = 0 ayarının beklediğiniz gibi çalışacağından emin değilim. Ben uygulamalar (yani malloc ()) basınç daha fazla bellek talep zaman bu diğer girişleri geri almaya çalışacağını düşünüyorum. Linux'a önbellekler için 2GB'den fazla kullanmamasını söylemenin bir yolu olarak, böyle bir şeyin farkında değilim. Çoğu durumda RAM israfı olur. Bakmak isteyebileceğiniz diğer bir şey ise, dizüstü bilgisayarlarda diskleri bükmek için farklı şeyler yapmaya çalışan "dizüstü bilgisayar modu" dur. Yine de kullanmadım, bu yüzden fazla bir şey bilmiyorum.
Kyle
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.