GNU/Linux >> Belajar Linux >  >> Cent OS

Apa Itu Halaman Kotor di Linux

Pertanyaan :Apa itu halaman kotor dan apa tujuannya?

Kapan pun proses aplikasi/database perlu menambahkan halaman virtual ke dalam memori fisik tetapi tidak ada halaman fisik gratis yang tersisa OS harus menghapus halaman lama yang tersisa.

Sekarang jika halaman lama belum ditulis sama sekali maka yang ini tidak perlu disimpan, cukup dipulihkan dari file data. Tetapi jika halaman lama sudah diubah maka harus disimpan di suatu tempat agar aplikasi/database dapat digunakan kembali nanti – ini disebut halaman kotor.

OS menyimpan halaman kotor tersebut dalam file swap (sehingga dapat dihapus dari memori fisik sehingga halaman 'baru' lainnya dapat disimpan dalam memori fisik) Jika banyak data akan dihapus dari cache halaman ke area halaman kotor – ini dapat menyebabkan IO yang signifikan bottleneck jika perangkat swap sebenarnya terletak di disk lokal ( sda ) dan lebih dari itu menyebabkan masalah lebih lanjut jika disk lokal digunakan juga oleh disk root ( OS ) lokal.

Cache halaman di Linux hanyalah cache disk yang membawa kinerja tambahan ke OS yang membantu dengan pembacaan/penulisan tinggi yang intensif pada file.

Karena 'sub' produk cache halaman adalah halaman kotor - yang dijelaskan dalam contoh kasus di atas. Halaman kotor juga dapat diamati setiap kali aplikasi akan menulis ke file atau membuat file – penulisan pertama akan terjadi di area cache halaman – sehingga membuat file dengan file 10MB bisa sangat cepat:

# dd if=/dev/zero of=testfile.txt bs=1M count=100
10+0 records in
10+0 records out
10485760 bytes (100 MB) copied, 0,1121043 s, 866 MB/s

Itu karena file itu dibuat di wilayah memori bukan disk yang sebenarnya - maka waktu responsnya sangat cepat. Di bawah OS hal seperti itu akan dicatat di /proc/meminfo dan lebih banyak lagi di 'Kotor:

Sebelum perintah di atas dijalankan – catat baris /proc/meminfo dan 'Dirty':

# more /proc/meminfo | grep -i dirty
Dirty: 96 kB

Setelah perintah dijalankan:

# more /proc/meminfo | grep -i dirty
Dirty: 102516 kB

Secara berkala OS atau aplikasi/database akan memulai sinkronisasi yang akan menulis testfile.txt yang sebenarnya ke disk:

# more /proc/meminfo | grep -i dirty
Dirty: 76 kB

Sekarang Oracle Database misalnya tidak mengizinkan untuk melakukan penulisan seperti itu ke wilayah memori seolah-olah OS akan macet atau jika SAN LUn akan gagal – data akan dikompromikan. Itu sebabnya Oracle Database membutuhkan data untuk 'in-sync' sehingga semua penulisan perlu dikonfirmasi oleh backend seperti disk/lun sebelum database akan mengajukan lebih banyak permintaan tulis.

Biasanya Basis Data/Aplikasi secara berkala menjatuhkan cache sehingga halaman kotor ditulis ke disk dalam potongan kecil. Dalam beberapa kasus, halaman kotor dapat bertambah besar karena mungkin aplikasi/database tidak mengonfigurasi mekanisme cache halaman dengan benar.

Jadi halaman kotor dapat menulis ke file swap ( Swap area ) tetapi juga ke wilayah khusus di disk ( LUN/file-system ). Jika misalnya kami membuat lebih dari 100MB file swap yang akan digunakan kembali nanti dari file swap, kami dapat menyebabkan masalah IO yang tidak perlu pada perangkat swap. Sistem perusahaan menyimpan file swap dan area swap pada OS di bawah solid state drive ( SSD ) atau LUN khusus sehingga kinerja disk lokal tidak akan terpengaruh ( karena biasanya wilayah swap dibuat pada disk lokal )

Dalam beberapa kasus, aplikasi/basis data mungkin memiliki masalah secara internal dan halaman kotor akan ditulis sebagai file swap tetapi tidak akan pernah digunakan kembali. Ini akan menyebabkan area swap tumbuh dan menyebabkan IO yang tidak perlu pada disk lokal dan menyebabkan penggunaan swap yang besar di bawah OS.

Untuk mengetahui pada tahap apa OS akan mencoba membuang halaman kotor kembali ke lapisan disk, silakan periksa dokumentasi kernel resmi di sekitar Memori Virtual di sini dan cari pengaturan seperti:

vm.dirty_background_ratio
vm.dirty_ratio
vm.swappiness

dan

dirty_background_ratio
dirty_ratio
dirty_background_bytes
dirty_expire_centisecs

Pengaturan di atas perlu disetel per persyaratan Basis Data/Aplikasi karena OS tidak memiliki pengaturan 'praktik terbaik' untuknya – pengaturan tersebut disetel per beban/konfigurasi DB/APP.

Setiap kali aplikasi/database akan meminta halaman memori untuk bebas pada memori fisik – OS cenderung menyimpan semuanya dalam cache halaman – maka OS perlu mengalokasikan kembali beberapa halaman dan menandainya sebagai kotor. Proses ini berfungsi dengan baik jika ujung aplikasi/basis data disetel dan diskalakan dengan benar – jika tidak maka akan menyebabkan terjadinya swappiness yang sangat agresif – karena OS perlu menulis semua halaman kotor kembali ke disk swap – ini dapat dikontrol melalui pengaturan vm.swappiness.

Jika aplikasi/basis data akan melakukan swappiness yang sesuai, hal itu dapat menyebabkan penulisan IO yang serius pada perangkat swap dan menyebabkan sistem terhenti secara serius – selalu pastikan bahwa aplikasi/basis data dikonfigurasi dengan benar dalam hal manajemen memori.

Seperti yang dijelaskan tidak semua halaman akan ditandai sebagai kotor – kebanyakan halaman yang tidak digunakan akan dibuang daripada ditandai sebagai kotor ( semuanya tergantung apakah halaman yang sudah dialokasikan diubah atau tidak )

Untuk memverifikasi PID mana yang menggunakan area swap – perintah di bawah ini dapat digunakan:

for file in /proc/*/status
do 
    awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file
done | sort -k 2 -n -r

Melepaskan ruang swap yang 'dikonsumsi' sangat terbatas, biasanya jika PID keluar dengan benar atau hanya dimatikan, ruang swap akan diklaim kembali tetapi membunuh PID atau jika berakhir secara tidak normal seperti segfault mungkin masih menyisakan ruang swap yang dikonsumsi. Opsi lainnya adalah melakukan boot ulang karena melakukan perintah swapoff dan swapon dapat menyebabkan masalah serius atau bahkan menyebabkan keadaan panik sistem.


Cent OS
  1. Periksa Apa Jenis Slot Perangkat Keras yang Tersedia Linux?

  2. Apa itu Kode Keluar Bash di Linux

  3. Apa itu file jarang di Linux

  1. Apa itu JingOS Linux?

  2. Apa kerugian dari antrian pesan Linux?

  3. Apa proses Windows ini di Linux?

  1. Apa itu pengguna Linux?

  2. Apa itu memori tinggi dan memori rendah di Linux?

  3. Apa sebenarnya header kernel Linux itu?