Bagikan melalui


Praktik Terbaik untuk Cache Sistem File Linux pada Azure NetApp Files

Artikel ini membantu Anda memahami praktik terbaik cache filesystem untuk Azure NetApp Files.

Filesystem cache yang dapat disesuaikan

Anda perlu memahami faktor-faktor berikut tentang penyetelan cache sistem file:

  • Mengosongkan buffer kotor membuat data tetap bersih dan dapat dibaca kembali sampai tekanan memori menyebabkan penghapusan.
  • Ada tiga pemicu untuk operasi flush asinkron:
    • Berbasis waktu: Ketika buffer mencapai usia yang ditentukan oleh penyesuaian ini, buffer harus dibersihkan (yaitu, ditulis ke penyimpanan).
    • Tekanan memori: Lihat vm.dirty_ratio | vm.dirty_bytes untuk detailnya.
    • Tutup: Ketika handel file ditutup, semua buffer kotor secara asinkron disiram ke penyimpanan.

Faktor-faktor ini dikendalikan oleh empat parameter. Setiap pengaturan dapat disesuaikan secara dinamis dan berkelanjutan menggunakan tuned atau sysctl dalam file /etc/sysctl.conf. Menyetel variabel ini meningkatkan performa untuk aplikasi.

Nota

Informasi yang dibahas dalam artikel ini terungkap selama latihan validasi SAS GRID dan SAS Viya. Dengan demikian, penyetelan didasarkan pada pelajaran yang dipelajari dari latihan validasi. Banyak aplikasi yang sama-sama mendapat manfaat dari penyetelan parameter ini.

vm.dirty_ratio | vm.dirty_bytes

Kedua penyetelan ini menentukan jumlah RAM yang dibuat dapat digunakan untuk data yang dimodifikasi tetapi belum ditulis ke penyimpanan yang stabil. Apapun penyetelan yang disetel secara otomatis akan mengatur penyetelan lainnya ke nol; RedHat menyarankan untuk tidak mengatur salah satu dari kedua penyetelan tersebut secara manual ke nol. Opsi vm.dirty_ratio (default dari keduanya) diatur oleh Red Hat ke 20% atau 30% memori fisik, tergantung pada OS, yang merupakan jumlah yang signifikan mengingat penggunaan memori sistem modern. Pertimbangan harus diberikan untuk mengatur vm.dirty_bytes alih-alih vm.dirty_ratio untuk pengalaman yang lebih konsisten terlepas dari ukuran memori. Misalnya, pekerjaan yang sedang berlangsung dengan SAS GRID menentukan 30 MiB pengaturan yang sesuai untuk performa beban kerja campuran terbaik secara keseluruhan.

vm.dirty_background_ratio | vm.dirty_background_bytes

Penyetelan ini menentukan titik awal di mana mekanisme write-back Linux mulai membersihkan blok kotor ke penyimpanan yang stabil. Red Hat default ke 10% memori fisik, yang, pada sistem memori besar, adalah sejumlah besar data untuk mulai pembilasan. Dengan SAS GRID sebagai contoh, secara historis rekomendasinya adalah mengatur vm.dirty_background ke ukuran vm.dirty_ratio 1/5 atau vm.dirty_bytes. Mempertimbangkan seberapa agresif vm.dirty_bytes pengaturan diatur untuk SAS GRID, tidak ada nilai spesifik yang ditetapkan di sini.

vm.dirty_expire_centisecs

Penyetelan ini mendefinisikan berapa lama buffer kotor dapat ada sebelum harus ditandai untuk ditulis secara asinkron. Ambil beban kerja CAS SAS Viya, misalnya. Beban kerja sementara yang dominan penulisan menemukan bahwa mengatur nilai ini menjadi 300 sentidetik (3 detik) adalah optimal, dengan 3000 sentidetik (30 detik) sebagai pengaturan default.

SAS Viya berbagi data CAS ke dalam beberapa gugus kecil dari masing-masing beberapa megabyte. Daripada menutup handle file ini setelah menulis data ke setiap shard, handle dibiarkan terbuka dan buffer di dalamnya dipetakan ke memori oleh aplikasi. Tanpa penyelesaian, tidak ada pengosongan cache hingga terjadi tekanan memori atau setelah 30 detik. Menunggu tekanan memori terbukti tidak optimal, begitu juga dengan menunggu kedaluwarsa timer yang lama. Tidak seperti SAS GRID, yang melihat throughput terbaik secara keseluruhan, SAS Viya berusaha untuk mengoptimalkan bandwidth tulis.

vm.dirty_writeback_centisecs

Rangkaian flusher kernel bertanggung jawab untuk menyiram buffer kotor secara asinkron di antara setiap utas flush tidur. Penyetelan ini mendefinisikan jumlah waktu yang dihabiskan untuk tidur di antara pengosongan. Mempertimbangkan nilai 3 detik vm.dirty_expire_centisecs yang digunakan oleh SAS Viya, SAS mengatur parameter ini dapat disetel ke 100 sentisekon (1 detik) dibandingkan dengan nilai default 500 sentisekon (5 detik) untuk menemukan performa keseluruhan terbaik.

Dampak cache sistem file yang tidak diatur

Ketika Anda mempertimbangkan memori virtual default yang dapat disetel dan jumlah RAM dalam sistem modern, write-back berpotensi memperlambat operasi terikat penyimpanan lainnya dari perspektif klien tertentu yang mendorong beban kerja campuran ini. Gejala berikut mungkin terjadi dari komputer Linux yang belum dioptimalkan, dengan beban tulis tinggi, dan sarat cache.

  • Daftar direktori ls membutuhkan waktu yang cukup lama sehingga tampak tidak responsif.
  • Throughput baca terhadap sistem file menurun secara signifikan dibandingkan dengan throughput tulis.
  • nfsiostat melaporkan latensi tulis dalam detik atau lebih tinggi.

Anda mungkin hanya mengalami perilaku ini ketika komputer Linux yang melakukan beberapa aktivitas kerja tulis-berat campuran. Selain itu, pengalaman berkurang pada semua volume NFS yang terpasang di satu titik akhir penyimpanan. Jika pemasangan berasal dari dua titik akhir atau lebih, hanya volume yang berbagi titik akhir yang menunjukkan perilaku ini.

Mengatur parameter cache sistem file seperti yang dijelaskan di bagian ini telah ditunjukkan untuk mengatasi masalah.

Memantau memori virtual

Untuk memahami apa yang terjadi dengan memori virtual dan write-back, pertimbangkan cuplikan dan output kode berikut. Kotor mewakili jumlah memori kotor dalam sistem, dan tulis balik mewakili jumlah memori yang aktif ditulis ke penyimpanan.

# while true; do echo "###" ;date ; egrep "^Cached:|^Dirty:|^Writeback:|file" /proc/meminfo; sleep 5; done`

Output berikut berasal dari eksperimen di mana rasio vm.dirty_ratio dan vm.dirty_background diatur menjadi 2% dan 1% dari memori fisik masing-masing. Dalam hal ini, pembilasan dimulai pada 3,8 GiB, 1% dari sistem memori 384-GiB. Writeback sangat mirip dengan kecepatan tulis ke NFS.

Cons
Dirty:                                    1174836 kB
Writeback:                         4 kB
###
Dirty:                                    3319540 kB
Writeback:                         4 kB
###
Dirty:                                    3902916 kB        <-- Writes to stable storage begins here
Writeback:                         72232 kB   
###
Dirty:                                    3131480 kB
Writeback:                         1298772 kB   

Langkah selanjutnya