Apakah ada cara untuk memberitahu kernel Linux untuk hanya menggunakan persentase memori tertentu untuk cache buffer? Saya tahu /proc/sys/vm/drop_caches
dapat digunakan untuk menghapus cache sementara, tetapi apakah ada pengaturan permanen yang mencegahnya tumbuh lebih dari misalnya 50% dari memori utama?
Alasan saya ingin melakukan ini, adalah bahwa saya memiliki server yang menjalankan OSD Ceph yang terus-menerus menyajikan data dari disk dan mengelola untuk menggunakan seluruh memori fisik sebagai buffer cache dalam beberapa jam. Pada saat yang sama, saya perlu menjalankan aplikasi yang akan mengalokasikan sejumlah besar (beberapa 10 GB) memori fisik. Bertentangan dengan kepercayaan populer (lihat saran yang diberikan pada hampir semua pertanyaan mengenai cache buffer), otomatis membebaskan memori dengan membuang entri cache bersih tidak instan: memulai aplikasi saya bisa memakan waktu hingga satu menit ketika cache buffer penuh ( *), sementara setelah membersihkan cache (menggunakan echo 3 > /proc/sys/vm/drop_caches
) aplikasi yang sama dimulai hampir secara instan.
(*) Selama menit waktu startup ini, aplikasi salah dalam memori baru tetapi menghabiskan 100% waktunya di kernel, menurut Vtune dalam fungsi yang disebut pageblock_pfn_to_page
. Fungsi ini tampaknya terkait dengan pemadatan memori yang diperlukan untuk menemukan halaman besar, yang membuat saya percaya bahwa sebenarnya fragmentasi adalah masalahnya.