En üstteki “buff / cache” ve “avail mem” alanları ne anlama geliyor?


28

Üst çıktının içinde, bellekte ve takas kullanım satırlarında "buff / cache" ve "avail Mem" olarak işaretlenmiş iki alan vardır:

görüntü tanımını buraya girin

Bu iki alan ne anlama geliyor?

Onları Googling'i denedim, ancak sonuçlar yalnızca genel makaleleri en üste çıkardı ve bu alanların ne anlama geldiğini açıklamıyorlar.

Yanıtlar:


31

topbireyin manpage alanlarını tanımlamak değil, frees ' yapar:

tamponlar

Çekirdek arabellekleri tarafından kullanılan bellek ( Buffersin /proc/meminfo)

önbellek

Sayfa önbelleği ve plakalar tarafından kullanılan bellek ( Cachedve SReclaimableiçinde /proc/meminfo)

devetüyü / önbellek

Tampon ve önbellek toplamı

mevcut

Yeni uygulamalara başlamak için, takas yapmadan ne kadar hafızanın mevcut olduğuna dair tahmin. Önbellek veya boş alanların sağladığı verilerden farklı olarak, bu alan sayfa önbelleğini dikkate alır ve ayrıca kullanımda olan öğeler nedeniyle yeniden doldurulabilir bellek plakalarının tümü geri alınmayacaktır ( MemAvailableiçinde /proc/meminfo, çekirdekler 3.14, 2.6.17+ çekirdeklerinde öykünülmüş) aksi halde serbest bırakılanla aynı)

Temel olarak, “buff / cache”, diskte bulunan veya yakında bitmesi gereken veriler için kullanılan belleği sayar ve sonuç olarak potansiyel olarak kullanılabilir (karşılık gelen bellek, önbellek durumunda hemen kullanılabilir, veya yeterli zaman verilebilir, tamponlarda - ikincisinin yine de küçük kalması gerekiyordu); “Available”, daha fazla takılmaya neden olmadan tahsis edilebilecek ve kullanılabilecek bellek miktarını ölçer (bu konuda daha fazla ayrıntı için bkz. Dağıtımlarda kullanılabilir bellek miktarını nasıl alabilirim? ).


1
Tamponlar / önbellek yeterli zaman verilemez ; Herhangi bir programın tahsis edilmesi için bir hafıza gerektirmesi durumunda , bunlar derhal mevcut olan hafıza bölümleridir . Ayrıca bakınız linuxatemyram.com
DopeGhoti 5:17

4

Sadece biraz netleştirmek için tamponlar yazılan verilere atıfta bulunur - bu bellek yazma işlemi tamamlanıncaya kadar geri kazanılamaz.

Önbellek okunan verilere atıfta bulunur - tekrar okunması gerektiğine dair tutulur, ancak her zaman diskten yeniden okunabildiği için derhal geri alınabilir.


Burada ne anlama geldiği gerçekten değil. Özellikle /proc/meminfoiçin bir alana sahiptir Writeback. Orada ayrı bir alandır Buffersve bu olarak gösterilen şeydir buffersiçinde free -w. BuffersBellek kullanımının ortak bir nedeni burada gösterilmiştir: " RAM'in% 30'u" arabellek "dir. Bu nedir? "
sourcejedi

Bundan ( access.redhat.com/solutions/406773 ) Writeback'in Tamponun henüz diske yazılmayan kısmı olduğunu kabul ediyorum. Yoksa başka bir şey mi söylüyorsun?
WallStProg

Bu açıklama yanıltıcı olacaktır. Buffers(şimdi) sayfa önbelleğinin bir parçasıdır; sayılmaz Cached, ancak bir parçası olarak sayılır Active(file) + Inactive(file). Stephen Kitt'in cevabı hakkındaki yorumları görün. Dirtysayfa önbelleğinin yazıldığı bölümdür ve bu nedenle sonunda diske geri yazma ihtiyacı duyar. WritebackiçermezDirty . Bu nedenle, Writebackdeğerinin bir kısmı değildir Buffers.
kaynakjedi

Ne Buffersaslında anlamı blok cihazla ilişkili sayfa önbelleğidir. Bazı dosya sistemleri bunu dahili olarak kullanır; diğerleri onu hiç kullanmaz. / "RAM'imin% 30’u arabellektir" sorusundaki cevabımı düzeltmeye gidiyor.
sourcejedi

2

Bu bilgilerin kanonik kaynağı /usr/src/linux/Documentation/filesystems/proc.txt'dir.

Tamponlar : Ham disk blokları için nispeten geçici depolama, çok büyük olmamalıdır (20 MB veya daha fazla) Önbellek : diskten okunan dosyalar için hafıza içi önbellek (sayfa önbelleği). SwapCached içermez.

Ayrıca burada daha fazla ayrıntı bulabilirsiniz .

Linux Sayfa Önbelleği ( meminfo'dan " Cached :") çoğu sistemde en büyük RAM tüketicisidir. Ne zaman diskte bir dosyadan bir okuma () yaparsanız, bu veriler belleğe okunur ve sayfa önbelleğine gider (1.).
Tampon önbellek ( meminfo'da " Tamponlar :"), dentry / inode önbelleklerine yakındır.

Veya kaynak kodunu bu şekilde analiz edin .

Miktarı buffersfonksiyonunun dönüş değerinr_blockdev_pages(void)

long nr_blockdev_pages(void)
{
        struct block_device *bdev;
        long ret = 0;
        spin_lock(&bdev_lock);
        list_for_each_entry(bdev, &all_bdevs, bd_list) {
                ret += bdev->bd_inode->i_mapping->nrpages;
        }
        spin_unlock(&bdev_lock);
        return ret;
}

Miktarı cached:

global_page_state(NR_FILE_PAGES) – total_swapcache_pages – i.bufferram
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.