Apa arti dari flag mount 'barrier' di Linux?

20

Manual untuk opsi mount 'penghalang' adalah:

penghalang = 0 / penghalang = 1

Ini menonaktifkan / mengaktifkan penggunaan hambatan tulis dalam kode jbd.barrier = 0 dinonaktifkan, penghalang = 1 memungkinkan (default). Ini juga membutuhkan tumpukan IO yang dapat mendukung penghalang, dan jika jbd mendapat kesalahan pada penghalang tulis, itu akan menonaktifkan penghalang lagi dengan peringatan. Penghalang tulis memberlakukan pemesanan jurnal yang dilakukan di disk, membuat cache tulisan volatile disk aman digunakan, pada beberapa penalti kinerja. Jika disk Anda didukung baterai dengan satu atau lain cara, penonaktifan penghalang dapat dengan aman meningkatkan kinerja.

Tapi saya tidak tahu apa arti kalimat " pemesanan jurnal yang dilakukan dengan benar di dalam jurnal ".

Misalkan urutan normal - jurnal 1, data 1; jurnal 2, data 2.
Manakah dari hasil pemesanan berikut ini yang akan terjadi jika saya menetapkan barrier=0?

  1. jurnal 2, data 2; jurnal 1, data 1;
  2. data 1, jurnal 1; data 2, jurnal 2.
kata daun
sumber
git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/… mungkin merupakan bacaan yang bermanfaat.
Håkan Lindqvist
1
Jika Anda membaca tentang journaling filesystems, maka Anda akan menyadari bahwa penting untuk menulis jurnal terlebih dahulu, kemudian jalankan jurnal sehingga menulis data nyata ke disk. Penghalang memastikan bahwa jurnal ditulis sebelum dieksekusi. Kalau tidak, jurnal kita tidak berguna.
ctrl-alt-delor
@richard Saat menggunakan bendera "nobarrier" dalam serangan BBWC, maka disk tidak dapat memastikan jurnal ditulis sebelum datanya dieksekusi, apakah kondisi ini tidak masalah?
leafonsword
Saya tidak cukup tahu untuk mengetahui apakah itu penting. Saya akan berpikir bahwa yang lebih buruk adalah sama buruknya dengan tidak ada jurnal, tetapi apa yang saya baca tampaknya tidak terlalu buruk, namun saya tidak dapat melihat perbedaannya. Saya sudah barrier=1, dan itu berjalan cukup cepat untuk saya. Kecuali jika Anda melakukan tugas yang sangat berat saya akan meninggalkannya. Anda memiliki buffer ram sehingga hal-hal akan ditulis ketika itu bisa, tanpa memperlambat aplikasi. Dan sangat sedikit keterlambatan dalam menulis ke disk. Jika Anda dengan melihat seberapa banyak ram ram mempercepat, tambahkan sync = 1 ke direktori home Anda, dan coba gunakan sistem Anda selama satu atau dua hari.
ctrl-alt-delor

Jawaban:

15

Sebagian besar sistem file modern adalah sistem file penjurnalan, yang berarti bahwa mereka melacak perubahan yang belum ditulis ke disk dalam struktur data internal yang disebut jurnal. Jika terjadi kerusakan, jurnal ini akan diputar ulang, untuk memastikan bahwa semua penulisan berhasil dilakukan, mencegah korupsi file.

Ketika benar-benar menulis data ke disk, cache tulis akan memesan ulang penulisan untuk mencoba memaksimalkan throughput, tetapi harus memastikan bahwa data file aktual ditulis ke disk sebelum metadata, untuk memastikan bahwa jika terjadi kerusakan terjadi metadata tidak akan ketinggalan zaman dengan data.

Masalahnya adalah bahwa banyak disk memiliki cache sendiri yang mungkin memesan ulang penulisan juga. Beberapa sistem file akan berasumsi bahwa itu akan terjadi dan akan memaksa disk untuk menyiram cache pada titik-titik tertentu untuk mencegah hal ini, dan disebut write barriersdalam contoh ext4, dan Linux pada umumnya.

Untuk disk modern, pengorbanan kinerja untuk melakukan hal ini dapat diabaikan, dan Anda tidak harus menonaktifkan hambatan tulis kecuali benar-benar diperlukan.

Kyrias
sumber
1

Dari artikel LWN ini :

Kode sistem file harus, sebelum menulis catatan komit [penjurnalan], harus benar-benar yakin bahwa semua informasi transaksi telah sampai ke jurnal. Melakukan tulisan dengan urutan yang tepat tidak cukup; Drive kontemporer mempertahankan cache internal yang besar dan akan menyusun ulang operasi untuk kinerja yang lebih baik. Jadi sistem file harus secara eksplisit memerintahkan disk untuk mendapatkan semua data jurnal ke media sebelum menulis catatan komit; jika catatan komit ditulis terlebih dahulu, jurnal mungkin rusak. Subsistem I / O blok kernel membuat kemampuan ini tersedia melalui penggunaan hambatan; pada dasarnya, penghalang melarang penulisan blok apa pun setelah penghalang sampai semua blok yang ditulis sebelum penghalang berkomitmen untuk media. Dengan menggunakan penghalang,

qinganfan
sumber