Hambatan dan sistem file penjurnalan

Semoga akhir pekanmu menyenangkan semuanya! Kami mengundang Anda ke pelajaran Demo gratis “Mengonfigurasi server web (Apache, Nginx, penyeimbangan Nginx)”, yang akan dilakukan oleh Andrey Buranov, spesialis sistem UNIX di Mail.Ru Group. Kami juga menerbitkan artikel oleh Jonathan Corbet - Editor Eksekutif di LWN.net.

Sistem file terjurnal berjanji untuk membebaskan administrator sistem dari kerumitan kerusakan disk ketika terjadi kegagalan sistem. Bahkan tanpa menjalankan pemeriksaan integritas sistem file. Meskipun pada kenyataannya, tentu saja, semuanya menjadi sedikit lebih rumit. Dan seperti yang disarankan oleh diskusi baru-baru ini, hal ini mungkin lebih membingungkan daripada yang kita pikirkan, karena memastikan integritas sistem file yang dijurnal mempunyai implikasi kinerja.

Sistem file seperti ext3 menggunakan area terpisah pada disk yang disebut jurnal. Ketika perubahan dilakukan pada metadata sistem file, perubahan tersebut pertama kali ditulis ke jurnal tanpa mengubah sistem file lainnya. Setelah semua perubahan ditulis ke log, “blok komit” ditambahkan ke log, yang menunjukkan penyelesaian transaksi. Dan hanya setelah blok komit ditulis, transaksi dikomit dan metadata yang diubah ditulis ke disk. Jika sistem mogok pada suatu saat, Anda dapat menggunakan informasi dalam log untuk mematikan dengan aman dan menghindari kerusakan pada sistem file karena hanya sebagian metadata yang diperbarui.

Namun, ada satu kendala: kode sistem file harus benar-benar yakin bahwa semua informasi tentang transaksi telah dicatat sebelum menulis blok komit. Hanya mencatat operasi dalam urutan yang benar saja tidak cukup—hard disk modern menyimpan cache internal yang besar dan menyusun ulang operasi untuk meningkatkan kinerja. Oleh karena itu, sebelum melakukan blok, Anda harus secara eksplisit menentukan bahwa semua data log ditransfer ke disk. Jika blok komit ditulis sebelumnya, log mungkin rusak. Untuk mengatasi masalah ini, hambatan digunakan. Pada dasarnya, sebuah penghalang mencegah blok apa pun yang ditulis setelah penghalang tersebut ditulis sampai semua blok yang ditulis sebelum penghalang tersebut telah dipindahkan ke disk. Dengan menggunakan penghalang, sistem file memastikan konsistensi struktur file.

Namun ada masalah lain: sistem file ext3 dan ext4 tidak menggunakan penghalang secara default. Ada opsi, tetapi kecuali administrator secara eksplisit mengaktifkannya, sistem file ini bekerja tanpa hambatan, meskipun beberapa distribusi (misalnya, SUSE) memiliki default yang berbeda. Eric Sandeen baru-baru ini memutuskan bahwa situasi ini perlu diubah dan membuat tambalan, yang mengubah pengaturan default untuk ext3 dan ext4. Dan kemudian diskusi hangat dimulai.

Andrew Morton (Andrew Morton) dengan sangat detail dijawabmengapa nilai defaultnya adalah ini:

Terakhir kali kami mencoba mengubahnya, performa menurun sebesar 30% pada banyak beban kerja, jadi saya membuang semua patch tersebut karena merasa ngeri. Saya rasa kita tidak bisa melakukan ini dan memperlambat semua mesin sebanyak itu...

Tidak ada solusi sempurna di sini, dan saya cenderung untuk tidak membangunkan anjing tidur ini dan menyerahkan opsi default pada kebijaksanaan pengembang distro.

Oleh karena itu, hambatan dinonaktifkan secara default karena mempunyai dampak serius terhadap kinerja. Selain itu, sistem file dapat digunakan dengan cukup sukses tanpa hambatan. Laporan kerusakan sistem file ext3 sangat sedikit dan jarang terjadi.

Tapi ini bukan hanya keberuntungan. Ted Ts'o menjelaskan ini karena log ext3/ext4 biasanya bersebelahan. Pertama, driver sistem file mencoba membuatnya berdekatan. Kedua, jurnal biasanya dibuat bersamaan dengan sistem file, sehingga ruang yang berdekatan mudah ditemukan. Kontinuitas dan keteraturan tidak hanya baik untuk produktivitas, tetapi juga untuk mencegah pemesanan ulang. Biasanya blok komit akan ditempatkan segera setelah sisa data di log, jadi tidak ada alasan bagi disk untuk menyusun ulang. Blok komit secara alami ditulis ke disk segera setelah entri log lainnya.

Namun, tidak ada yang mengklaim bahwa hal ini akan selalu terjadi. Disk drive dapat berperilaku berbeda. Selain itu, log adalah buffer cincin. Oleh karena itu, ketika suatu transaksi ditulis ke akhir log, blok komit mungkin berakhir di blok sebelumnya, sebelum entri log lainnya. Jadi selalu ada kemungkinan kerusakan. Faktanya, Chris Mason punya satu untuk ini tes. Tidak ada keraguan bahwa bekerja tanpa hambatan kurang aman dibandingkan dengan bekerja tanpa hambatan.

Jika Anda ingin melakukan peningkatan kinerja, Anda dapat mengaktifkan hambatan. Kecuali, tentu saja, sistem file Anda didasarkan pada LVM (seperti yang terjadi pada beberapa distribusi secara default). Ternyata pemeta perangkat tidak mendukung hambatan. Dalam kasus lain, merupakan ide bagus untuk mengurangi penurunan kinerja. Dan sepertinya hal itu bisa dilakukan.

Implementasi ext3 saat ini (ketika penghalang diaktifkan) melakukan urutan operasi berikut untuk setiap transaksi:

  1. Data dicatat

  2. Penghalang sedang berlangsung

  3. Blok komit ditulis

  4. Hambatan berikutnya telah dipenuhi

  5. Nanti metadatanya dimasukkan ke disk

Di ext4, penghalang pertama (langkah 2) dapat dihilangkan karena sistem file ext4 mendukung checksum log.

Jika data log dan blok komit disusun ulang dan operasi gagal, checksum log tidak akan cocok dengan yang disimpan di blok komit dan transaksi akan ditolak. 

Chris Mason percaya, bahwa akan “secara umum aman” untuk menghilangkan penghalang ini di ext3, dengan kemungkinan pengecualian ketika log mencapai akhir dan mulai ditulis dari awal. 

Gagasan lain untuk mempercepat pekerjaan adalah dengan menunda operasi penghalang bila memungkinkan. Jika tidak ada kebutuhan mendesak untuk segera membuang data ke disk, maka Anda dapat membuat beberapa transaksi di log dan membuangnya ke disk dengan satu penghalang.

Ada juga beberapa potensi perbaikan dengan mengurutkan operasi secara hati-hati sehingga hambatan (yang biasanya diterapkan sebagai permintaan "flush all pending Operations to disk") tidak memaksa penulisan ke blok yang tidak memerlukan pengurutan.

Sepertinya sudah waktunya memikirkan bagaimana membuat biaya hambatan terjangkau. Ted Tso, tampaknya berpikir serupa:

Saya pikir kita harus mengaktifkan penghalang di ext3/4 dan kemudian berupaya mengurangi overhead di ext4/jbd2. Kemungkinan besar sebagian besar sistem tidak beroperasi dalam kondisi seperti yang digunakan Chris untuk menunjukkan masalahnya, dan keamanan sistem file harus menjadi prioritas secara default.

Akal sehat memberi tahu saya bahwa anjing ini tidak lagi tidur dan mungkin akan menggonggong sebentar. Ini mungkin mengganggu beberapa tetangga, tapi itu lebih baik daripada membiarkannya menggigit.

Apakah Anda tertarik untuk mengembangkan ke arah ini? Mendaftar untuk pelajaran demo gratis “Mengonfigurasi server web (Apache, Nginx, penyeimbangan Nginx)” dan berpartisipasi dalam siaran Bekerja dengan log di Linux», yang akan dilakukan oleh Pavel Vikiryuk - operator telekomunikasi MVNO, insinyur DevOps.

Sumber: www.habr.com

Beli hosting yang andal untuk situs dengan perlindungan DDoS, server VPS VDS 🔥 Beli hosting website andal dengan perlindungan DDoS, server VPS VDS | ProHoster