Apa arti bidang "buff / cache" dan "faedah mem" di atas?


28

Di dalam output atas, ada dua bidang, ditandai "buff / cache" dan "faedah Mem" di memori dan swap baris penggunaan:

masukkan deskripsi gambar di sini

Apa arti kedua bidang ini?

Saya sudah mencoba mencarinya di Google, tetapi hasilnya hanya memunculkan artikel umum di atas, dan mereka tidak menjelaskan apa yang ditandai oleh bidang ini.

Jawaban:


31

top's manualnya tidak menggambarkan bidang, tetapi free' s tidak:

buffer

Memori yang digunakan oleh buffer kernel ( Buffersdalam /proc/meminfo)

cache

Memori yang digunakan oleh halaman cache dan slab ( Cacheddan SReclaimabledalam /proc/meminfo)

buff / cache

Jumlah buffer dan cache

tersedia

Estimasi berapa banyak memori yang tersedia untuk memulai aplikasi baru, tanpa bertukar. Tidak seperti data yang disediakan oleh cache atau bidang gratis, bidang ini memperhitungkan cache halaman akun dan juga bahwa tidak semua pelat memori yang dapat direklamasi akan direklamasi karena item yang digunakan ( MemAvailabledalam /proc/meminfo, tersedia pada kernel 3.14, ditiru pada kernel 2.6.27+ , jika tidak sama dengan gratis)

Pada dasarnya, "buff / cache" menghitung memori yang digunakan untuk data yang ada di disk atau harus segera berakhir di sana, dan sebagai hasilnya berpotensi dapat digunakan (memori yang sesuai dapat segera tersedia, dalam kasus cache, atau diberikan waktu yang cukup, dalam hal buffer - yang terakhir seharusnya tetap kecil); "Available" mengukur jumlah memori yang dapat dialokasikan dan digunakan tanpa menyebabkan lebih banyak pertukaran (lihat Bagaimana saya bisa mendapatkan jumlah memori yang tersedia secara portabel di seluruh distribusi? Untuk lebih banyak detail tentang itu).


1
Buffer / cache tidak tersedia dengan waktu yang cukup ; mereka adalah segmen memori yang segera tersedia jika ada program yang membutuhkan memori untuk dialokasikan. Lihat juga linuxatemyram.com
DopeGhoti

4

Hanya untuk memperjelas sedikit, buffer merujuk ke data yang sedang ditulis - bahwa memori tidak dapat direklamasi sampai penulisan selesai.

Cache mengacu pada data yang telah dibaca - disimpan jika seandainya perlu dibaca lagi, tetapi dapat segera direklamasi karena selalu dapat dibaca kembali dari disk.


Bukan itu yang dimaksud di sini. /proc/meminfomemiliki bidang Writebackkhusus. Ada bidang yang terpisah Buffers, dan itulah yang ditampilkan seperti bufferspada free -w. Alasan umum untuk Bufferspenggunaan memori ditunjukkan di sini: " 30% RAM adalah" buffer ". Apa itu? "
sourcejedi

Dari ini ( access.redhat.com/solutions/406773 ) saya menganggap bahwa Writeback adalah bagian dari Buffer yang belum ditulis ke disk. Atau Anda mengatakan sesuatu yang lain?
WallStProg

Deskripsi itu akan menyesatkan. Buffersadalah (sekarang) bagian dari cache halaman; tidak dihitung Cached, tetapi dihitung sebagai bagian dari Active(file) + Inactive(file). Lihat komentar tentang jawaban Stephen Kitt. Dirtyadalah bagian dari cache halaman yang telah ditulis, dan akhirnya perlu ditulis kembali ke disk. Writebacktidak termasukDirty . Oleh karena itu, Writebackbukan merupakan bagian dari nilai Buffers.
sourcejedi

Yang Bufferssebenarnya berarti adalah cache halaman yang terkait dengan perangkat blok. Beberapa filesystem menggunakan ini secara internal; yang lain tidak menggunakannya sama sekali. Saya pergi untuk memperbaiki jawaban saya pada pertanyaan "30% RAM saya adalah buffer".
sourcejedi

2

Sumber kanonik dari informasi ini adalah /usr/src/linux/Documentation/filesystems/proc.txt

Buffer : Penyimpanan relatif sementara untuk blok disk mentah seharusnya tidak menjadi sangat besar (20MB atau lebih) Tembolok : cache di-memori untuk file yang dibaca dari disk (cache halaman). Tidak termasuk SwapCached.

Anda juga dapat menemukan detail lebih lanjut di sini .

Linux Page Cache (" Cached :" dari meminfo) adalah konsumen tunggal RAM terbesar di sebagian besar sistem. Setiap kali Anda melakukan read () dari file pada disk, data tersebut dibaca ke dalam memori, dan masuk ke cache halaman (1.).
Cache penyangga (" Buffer :" dalam meminfo) relatif dekat dengan cache dentry / inode.

Atau analisis kode sumber seperti ini .

Jumlah buffersadalah nilai pengembalian fungsinr_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;
}

Jumlah cached:

global_page_state(NR_FILE_PAGES) – total_swapcache_pages – i.bufferram
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.