Penggusuran cache Linux

8

Melihat bagaimana cache VFS pada mesin Linux saya berperilaku, saya dapat melihat bahwa bahkan ketika secara efektif idle (crond dan kebanyakan daemon lainnya berhenti, antarmuka turun) jumlah memori bebas secara bertahap meningkat menyiratkan bahwa item sedang diusir dari cache.

Saya melakukan banyak googling tetapi tidak dapat menemukan referensi tentang bagaimana ini dikontrol (kecuali itu adalah efek samping dari vm_swappiness). Adakah yang bisa menempatkan saya di jalur yang benar untuk memahami mengapa item diusir dari cache ketika tidak ada permintaan untuk alokasi memori baru?

symcbean
sumber
«Menyiratkan bahwa item diusir dari cache» - yah, dalam hal ini vmstatakan menunjukkan peningkatan ukuran cache, - benarkah itu?
poige
pasti menurun. Ya mereka (menurun)
symcbean
Jadi, Anda mengatakan peningkatan mem gratis dan ukuran cache / buf menurun pada saat yang sama, benarkan?
poige

Jawaban:

1

swappiness hanya memengaruhi apakah memori aplikasi yang dialokasikan ditukar untuk memberikan ruang bagi cache. vfs_cache_pressure adalah sysctl yang mengontrol apa yang Anda lihat.

Bratchley
sumber
1
Tidak - vfs_cache_pressure mengontrol rasio data meta vs retensi pagecache (setidaknya menurut dokumen yang saya baca dan percobaan yang saya jalankan)
symcbean
1
Cukup adil. Saya melakukan sedikit riset lebih lanjut dan dari apa yang saya bisa lihat semuanya diatur ke dalam daftar pesanan LRU dan hanya melihat ketika beberapa ambang batas (buatan atau fisik) terpenuhi atau dilampaui. Mengingat itu, saya berasumsi sesuatu masih terjadi (seperti utas kernel bangun atau sesuatu). Jika sangat penting bagi Anda untuk mencari tahu ini sepertinya ada skrip systemtap pra-tertulis yang disebut "mmreclaim.stp" yang melacak reklamasi manajer memori. Saya juga akan memastikan itu tidak benar-benar akan bertukar menggunakan "sar -A."
Bratchley
1

Linux mem-flush data dari cache halaman menggunakan proses yang disebut pdflush

pdflush dikendalikan oleh parameter dari / proc / sys / vm

#/proc/sys/vm/dirty_expire_centisecs
The hundredth of the second after which data will be considered to be expired from the page cache and will be written at the next opportunity.

#/proc/sys/vm/dirty_writeback_centisecs`    
The hundredth of a second after which the pdflush wakes up to write data to disk.

#/proc/sys/vm/vfs_cache_pressure`    
This will reclaim dentries and inodes which are also part of the cache.

Anda dapat memeriksa utas berikut untuk informasi lebih lanjut:

The daemon pdflush
Teori operasi dan penyetelan untuk banyak-beban
Linux Cache Memory

Joe
sumber
Terima kasih Joe, namun 2 opsi pertama secara khusus berhubungan dengan data yang perlu ditulis kembali ke sistem file (yaitu buffer tulis) bukan data yang telah dibaca dan belum diubah (buffer baca). Vfs_cache_pressure mengontrol preferensi untuk mengusir metadata file relatif terhadap konten file.
symcbean
@symcbean Anda benar. Jawabannya berbicara lebih banyak tentang menulis cache. Cache baca dihapus berdasarkan LRU. Namun, Linux menggunakan Strategi Dua-Daftar berdasarkan pada mana cache dibaca sedang dihapus. Anda dapat membaca lebih lanjut tentang Two-List Stragety dan bagaimana linux membersihkan cache baca di sini . Beri tahu saya jika ini masuk akal. Dalam kasus Anda, saya berasumsi bahwa setelah semua proses dihentikan, cache baca ini masuk ke daftar tidak aktif dan dihapus
Joe
terima kasih, artikel yang bagus. Tahu buku apa bab ini berasal? Namun, meskipun menjelaskan bagaimana halaman tertentu diprioritaskan untuk penggusuran, itu tidak benar-benar menjelaskan mengapa halaman digusur ketika tidak ada permintaan yang jelas untuk memori. Apa yang mengontrol proses "untuk mengecilkan cache agar menyediakan lebih banyak RAM untuk penggunaan lain"? Untuk apa ini diganti?
symcbean
@symcbean Penggusuran cache tidak langsung berfungsi saat ada permintaan memori. Namun, tidak masuk akal untuk menyimpannya di cache ketika tidak ada yang aktif menggunakannya. Di sana oleh halaman aktif menjadi halaman tidak aktif dan akhirnya diusir. Saya berasumsi pertanyaan Anda berasal dari titik bahwa penggusuran akan terjadi hanya ketika ada permintaan untuk memori. Linux akan menghapus setiap halaman yang tidak aktif saat dan ketika tersedia. Seperti [tercantum dalam artikel] [ jothirams.com/linux-cached-memory/] jika semuanya aktif, Anda akan kehabisan memori dan OOM akan dipanggil.
Joe