Ramfs ve TFMP'ler arasındaki performans farkı


23

Çok sayıda 100 kb tek dosyadan (görüntü) oluşan yaklaşık 10 GB veri için bir bellek depolama sistemi kurmam gerekiyor. Çok fazla okuma ve oldukça periyodik yazma olacak (yeni dosyalar ekleyerek, eskilerini silerek).
Şimdi, tmpfs’in normal bir dosya sistemi gibi davrandığını biliyorum; örneğin, boş / kullanılmış alanı df ile kontrol edebilirsiniz , ki bu da güzel bir özellik. Ancak ramfs , IO işlemlerinin hızı konusunda bazı avantajlar sunarsa ilgilenirim . RAMS kullanırken tüketilen belleğin boyutunu kontrol edemediğimi ve serbest RAM'i tamamen tüketirse sistemimin askıda kalacağını biliyorum, ancak bu senaryoda bu bir sorun olmayacak.

Özetlemek gerekirse, ilgileniyorum:
- Performansı akıllı, hangisi daha hızlı: ramfs veya tmpfs (ve muhtemelen neden)?
- Ne zaman tmpfs takas alanı kullanıyor? Önceden kaydedilmiş verileri takas etmek (şu anda çalışan diğer programlar için RAM'i boşaltmak için) veya yalnızca o anda boş RAM kalmamışsa yeni verileri mi taşıyor?


Sunucuda ne kadar RAM var?
ewwhite

1
Sunucu toplam 16 GB RAM'e sahiptir. Ayrıca şunu da belirtmek isterim ki bir SSD depolama birimim değil, tek 7200 rpm HDD. Bu yüzden bir çeşit RAM saklama alanı kullanmayı düşünüyorum.
Ivan Kovacevic

Yanıtlar:


21

Benim önerim:

Normal koşullar altında gerçek yaşam aktivitesini ölçün ve izleyin.

Bu dosyaların her zaman TÜM ihtiyaç duyulması ve önbellekten sunulması pek mümkün değildir. Ama adında güzel bir araç var. vmtouch , belirli bir anda önbellekte ne olduğunu söyleyebilecek var. Bazı dizinleri veya dosyaları önbelleğe kilitlemek için de kullanabilirsiniz. Öyleyse düzenli kullanımdan sonra nasıl göründüğüne bakın. Bu durum için tmpfs ve ramfs kullanmak gerekli değildir.

Bkz .: http://hoytech.com/vmtouch/

En aktif dosyaların muhtemelen önbellekte saklanacağını görünce şaşıracaksınız.


TFMP'lere karşı rampalara kıyasla, kayda değer bir performans farkı yoktur. Operasyonel farklılıklar var. Gerçek hayattaki bir kullanım durumu, Oracle'ın RAM'deki verileri değiştirilmeden RAM'deki verileri yönetmesine izin vermek için kullanıldığı, Oracle'dır. tmpfs verileri hafıza baskısı altında değiştirilebilir. Anında ayarları yeniden boyutlandırma ve değiştirme konusunda da farklılıklar var.


1
Müthiş küçük yardımcı! +1
Janne Pikkarainen

1
@wwhite Mükemmel cevap. Davamızın birinde, birkaç yıl önce, en çok kullanılan dosyaların zaten önbellekte bulunduğunu gerçekten keşfettik. İpucu: Günümüzde dosya sistemleri düşündüğümden çok daha akıllı.
giannisapi

13

Bunu fazla düşünme. Sisteminize yeterince RAM koyun ve çekirdeğin disk önbelleğini sizin için halletmesine izin verin. Bu yolla, doğrudan bellekten gelen okumaların avantajlarından yararlanırken, diskteki verileri sürdürmeye devam edebilirsiniz.


1
Sistemimde şu anda 16 GB RAM var. Bu görüntüleri sunmak için Nginx çalıştıran düz bir Debian kurulumudur. Her zaman% 100 yük altında olacak ve bu görüntüleri belirli bir düzende sunmayacak 1 Gbit ağ bağlantım var. Çekirdeğin, bu senaryoda önbellekte bu 10 gig görüntüsünün tümünü yükleyeceğini düşünüyor musunuz?
Ivan Kovacevic

3
Evet, sistemde yeterli RAM varsa ve sunucudaki diğer uygulamalar RAM kaynakları için rekabet etmiyorsa, bu dosyalar önbellekte kalır.
EEAA

2
~ 15 yıldır unix yönetimindeyim ve hiçbir zaman tmpfs / ramfs’in yerel çekirdek fs önbelleği üzerinde herhangi bir fayda sağlayacağı bir durumla karşılaşmadım . Bu, garanti altına alınacakları durumlarda orada olmadıklarını söylemek değildir, ancak oldukça nadirdir. Genelde, şeyler için RAM önbelleğine ihtiyacınız varsa, biri amaç oluşturma önbelleğe alma katmanı kullanır (Redis / Memcache / etc.).
EEAA

4
Disk önbelleğe alma, görüntülerin okunması gereken durumlarda kesinlikle işe yarar, ancak çok sayıda rastgele / küçük yazma hızlandırmak istiyorsanız, ancak rasgele I / ile yavaş olan bir diske bağlıysanız, tmpfs veya ramfs hala yararlı olabilir O. Makine çökerse veya bir elektrik kesintisi olursa, tmpfs içeriğinin bellekte bulundukları yerden (sadece) beri gitmiş olacağını unutmayın.
Martijn

1
@Martijn haklı. tmpfs ve ramfs gerçekten faydalıdır. Örneğin, git deposunun yoğun bir yeniden yazmasını (filtre dalı) yapıyorum. Bellekte yapmak, SSD cihazımda yapmaktan daha hızlı oluyor. Önbellekleme, yazma işlemlerinin okunmamasına yardımcı olur, çünkü (normalde) Linux, disk işlemlerinin kalıcılığıyla ilgili bazı garantiler vermek zorundadır.
Paul Draper

7

1) Performans kıyaslaması.

Bu sayfayı referans olarak kullanarak , tmpfs ve ramfs arasında G / Ç karşılaştırması yaptım ve sonuçlar performans açısından hemen hemen aynıydı:

# !mount
mount | grep -E "tmp|ram"
tmpfs on /dev/shm type tmpfs (rw)
ramfs on /mnt/ram type ramfs (rw,size=1G)

# dd bs=1M count=1024 if=/dev/zero of=/dev/shm/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.634054 s, 1.7 GB/s

# dd bs=1M count=1024 if=/dev/zero of=/mnt/ram/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.559557 s, 1.9 GB/s

# dd bs=1M count=4096 if=/dev/zero of=/dev/shm/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.5104 s, 1.7 GB/s

# dd bs=1M count=4096 if=/dev/zero of=/mnt/ram/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.36923 s, 1.8 GB/s

2) Bu sayfaya göre , tmpfs takas kullanır ve ramfs takas kullanmaz.


2
Cevabınız doğru yolda. Bununla birlikte, performans konusundaki sonucunuzla aynı fikirde değilim, testleriniz ramfs lehine 0,2 GB / sn ve 0,1 GB / sn ARE olduğunu gösteriyor. Geçerli bir istatistiksel örnek sağlamak için bunun daha da test edilmesi gerektiğine inanıyorum. 2 ile ilgili olarak) Evet, biliniyor, ancak takas kullanımının tam olarak ne zaman kullanıldığını daha iyi anlayabilmeyi diledim.
Ivan Kovacevic

bu ölçütü farklı boyutlarda dosyalar ile bir kaç kez yaparsak, bir fark göreceğimizi sanmıyorum. Dört katı büyütdüğümde farkın aslında genişlemek yerine gerilediğini fark edeceksiniz.
Michael Martinez

1
Bir sürü küçük dosyanızın olduğu durum ne olacak? Örneğin milyon 100-200 kb dosya yazmak için. Ayrıca aynı dosya boyutu için art arda 0,2 GB / s fark alıyor musunuz? Bu kesinlikle performans farkına işaret edecektir. Muhtemelen programı programımdayken kendim test edeceğim. Ancak bu yüzden burada sordum, bu yüzden başkası yapsaydı, yapılacaklar listesinden geçebilirdim.
Ivan Kovacevic

evet, kesin olarak bilmenin tek yolu testleri yapmaktır.
Michael Martinez

1

Çeşitli çekirdek arabelleklerini barındırmak için yeterli miktarda RAM yüklüyse, uygulamalar yığını ve yığınları, normal dosya sistemi önbelleği ve içine koymak istediğiniz tüm dosyalar, ramfshiçbir zaman tmpfsriski olmayacak kadar yavaş olmamalıdır . tasarım gereği fiziksel I / O. Fiziksel giriş / çıkışlar hiç şüphesiz bu alanda performansın düşmesinin ana nedenidir.

Bununla birlikte, eğer yüklü miktarda RAM yüklü değilse , disk kullanmakta daha iyi ne olacağına karar vermek için sanal bellek kullanmaya ramfsnazaran muhtemelen daha yavaştır ve muhtemelen daha yavaş tmpfsolacaktır. Bununla birlikte tmpfs, dosya sistemi verileriniz RAM'de sıkışmış ve bu da kaynak israfı olabilir.

Size ikinci soruyu cevaplamak için, evet, tmpfseski verileri önce son "sıcak" olana değil, takas alanına götürür.

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.