Ini adalah pertanyaan lama yang pernah saya lihat dari waktu ke waktu. Pemahaman saya tentang itu agak terbatas (setelah membaca tentang perbedaannya sejak lama, tetapi fakto yang terlibat tidak pernah benar-benar macet).
Seperti yang saya pahami,
Buffer
Digunakan oleh program dengan operasi I / O aktif, yaitu data yang menunggu untuk ditulis ke disk
Cache
Apakah hasil dari operasi I / O selesai, yaitu buffer yang telah memerah atau data membaca dari disk untuk memenuhi permintaan.
Bisakah saya mendapatkan penjelasan yang jelas untuk anak cucu?
linux
memory
virtual-memory
Avery Payne
sumber
sumber
Jawaban:
Total "cache" juga akan mencakup beberapa alokasi memori lain, seperti semua file tmpfs. Untuk melihat ini berlaku cobalah:
dan Anda akan melihat penurunan nilai "cache" oleh 100Mb yang Anda salin ke sistem file berbasis ram (dengan asumsi ada cukup RAM gratis, Anda mungkin menemukan beberapa berakhir dengan swap jika mesin sudah terlalu berkomitmen dalam hal penggunaan memori). The "sync; echo 3> / proc / sys / vm / drop_caches" sebelum setiap panggilan untuk bebas harus menulis apa pun yang tertunda di semua buffer tulis (sinkronisasi) dan menghapus semua blok disk yang di-cache / buffered dari memori jadi gratis hanya akan membaca yang lain alokasi dalam nilai "cache".
RAM yang digunakan oleh mesin virtual (seperti yang berjalan di bawah VMWare) juga dapat dihitung dalam nilai "cache" gratis, seperti RAM yang akan digunakan oleh file yang dipetakan memori saat ini terbuka (ini akan bervariasi tergantung pada hypervisor / versi yang Anda gunakan dan mungkin antar versi kernel juga).
Jadi itu tidak sesederhana "buffer menghitung file / jaringan yang tertunda menulis dan menghitung cache baru-baru ini membaca / menulis blok yang disimpan dalam RAM untuk menyimpan pembacaan fisik masa depan", meskipun untuk sebagian besar tujuan deskripsi yang lebih sederhana ini akan dilakukan.
sumber
Pertanyaan rumit. Ketika Anda menghitung ruang kosong Anda sebenarnya perlu menambahkan buffer dan cache keduanya. Ini yang bisa saya temukan
Buffer adalah sesuatu yang belum "ditulis" ke disk. Cache adalah sesuatu yang telah "dibaca" dari disk dan disimpan untuk digunakan nanti.
http://visualbasic.ittoolbox.com/documents/difference-between-buffer-and-cache-12135
sumber
Saya sedang mencari deskripsi yang lebih jelas tentang buffer dan saya temukan di
"Professional Linux® Kernel Architecture 2008"
sumber
Dijelaskan oleh RedHat :
Halaman Cache:
Cache adalah bagian dari memori yang secara transparan menyimpan data sehingga permintaan di masa mendatang untuk data tersebut dapat dilayani lebih cepat. Memori ini digunakan oleh kernel untuk menyimpan data disk dan meningkatkan kinerja i / o.
Kernel Linux dibangun sedemikian rupa sehingga akan menggunakan sebanyak mungkin RAM untuk menyimpan informasi dari sistem file dan disk lokal dan jarak jauh Anda. Seiring berjalannya waktu berbagai pembacaan dan penulisan dilakukan pada sistem, kernel mencoba untuk menyimpan data yang tersimpan dalam memori untuk berbagai proses yang berjalan pada sistem atau data dari proses yang relevan yang akan digunakan dalam waktu dekat. Cache tidak direklamasi pada saat proses berhenti / keluar, namun ketika proses lain membutuhkan lebih banyak memori daripada memori yang tersedia, kernel akan menjalankan heuristik untuk mendapatkan kembali memori dengan menyimpan data cache dan mengalokasikan memori itu ke proses baru.
Ketika segala jenis file / data diminta maka kernel akan mencari salinan bagian dari file yang digunakan oleh pengguna, dan, jika tidak ada salinan seperti itu, itu akan mengalokasikan satu halaman baru dari memori cache dan mengisinya dengan isi yang sesuai dibacakan dari disk.
Data yang disimpan dalam cache mungkin nilai yang telah dihitung sebelumnya atau duplikat dari nilai asli yang disimpan di tempat lain dalam disk. Ketika beberapa data diminta, cache pertama kali diperiksa untuk melihat apakah itu berisi data itu. Data dapat diambil lebih cepat dari cache daripada dari sumbernya.
Segmen memori bersama SysV juga dicatat sebagai cache, meskipun mereka tidak mewakili data apa pun pada disk. Satu dapat memeriksa ukuran segmen memori bersama menggunakan perintah ipcs -m dan memeriksa kolom byte.
Buffer:
Buffer adalah representasi blok disk dari data yang disimpan di bawah cache halaman. Buffer berisi metadata dari file / data yang berada di bawah cache halaman. Contoh: Ketika ada permintaan data apa pun yang ada di halaman cache, pertama kernel memeriksa data dalam buffer yang berisi metadata yang menunjuk ke file / data aktual yang terkandung dalam cache halaman. Setelah dari metadata alamat blok sebenarnya dari file diketahui, itu diambil oleh kernel untuk diproses.
sumber
Membebaskan buffer / cache
Peringatan Ini menjelaskan metode kuat yang tidak direkomendasikan di server produksi! Jadi Anda diperingatkan, jangan salahkan saya jika terjadi kesalahan.
Untuk memahami, masalahnya, Anda bisa memaksa sistem Anda untuk mendelegasikan sebanyak mungkin memori
Pembukaancache
daripada menjatuhkan file yang di-cache:Sebelum melakukan tes, Anda dapat membuka jendela lain klik:
untuk mengikuti evolusi swap secara real time.
Catatan: Anda harus membuang sebanyak mungkin disk bebas pada direktori saat ini, Anda harus mem + swap
DemoNota, tuan rumah di mana saya sudah melakukan ini sangat digunakan. Ini akan lebih signifikan pada mesin yang sangat sunyi.
sumber