GNU/Linux >> Belajar Linux >  >> Linux

Linux – Penggunaan O_direct Di Linux?

Jika pertanyaan ini terlalu berorientasi pada programmer, beri tahu saya. Saya ingin tahu apakah ada orang yang akrab dengan flag O_DIRECT untuk panggilan sistem open() di Linux 2.6? Linus meremehkan penggunaannya, namun penulisan file berkinerja tinggi tampaknya menunjukkan penggunaannya. Saya ingin mengetahui pengalaman dan rekomendasi dunia nyata.

Info lebih lanjut:
Aplikasi yang saya gunakan bisa mempertahankan cache-nya sendiri, dan dengan demikian mencapai kecepatan rata-rata 5x atau lebih. Saat menulis ke file, konten cache harus ditulis ke cache sistem file, yang tampaknya berlebihan dan menjadi masalah kinerja.

Jawaban yang Diterima:

Oke, Anda meminta pengalaman, ini membuat pertanyaannya sedikit subjektif dan argumentatif, tetapi lumayan.

Linus mengatakan bahwa mengacu pada penggunaan yang biasanya dikaitkan dengan O_DIRECT, dan untuk penggunaan tersebut, IMO Linus sebagian besar benar. Bahkan jika Anda melakukan I/O langsung, Anda tidak dapat mentransfer data ke/dari perangkat secara langsung ke pernyataan program Anda, Anda memerlukan buffer yang diisi (oleh program atau perangkat) dan ditransfer melalui panggilan sistem ke ujung yang lain. Juga, untuk membuatnya efisien, Anda tidak akan ingin membaca ulang sesuatu yang baru saja Anda baca, jika Anda membutuhkannya lagi. Jadi, Anda memerlukan semacam cache… dan itulah yang disediakan kernel tanpa O_DIRECT, cache halaman! Mengapa tidak menggunakan itu? Ini juga memberikan manfaat jika lebih banyak proses ingin mengakses file yang sama secara bersamaan, itu akan menjadi bencana bagi O_DIRECT.

Karena itu, O_DIRECT memiliki kegunaannya:Jika karena alasan tertentu Anda perlu mendapatkan data langsung dari perangkat blok. Ini tidak ada hubungannya dengan kinerja.

Orang yang menggunakan O_DIRECT untuk kinerja biasanya berasal dari sistem dengan algoritme cache halaman yang buruk, atau tanpa mekanisme saran POSIX, atau bahkan orang tanpa berpikir mengulangi apa yang dikatakan orang lain. Untuk menghindari masalah ini, O_DIRECT adalah solusinya. Linux, OTOH, memiliki filosofi bahwa Anda harus memperbaiki masalah mendasar yang sebenarnya, dan masalah mendasarnya adalah OS yang melakukan pekerjaan yang buruk dengan cache halaman.

Saya menggunakan O_DIRECT untuk implementasi sederhana cat untuk menemukan kesalahan memori di mesin saya. Ini adalah salah satu penggunaan yang valid untuk O_DIRECT. Itu tidak ada hubungannya dengan kinerja.

Terkait:OpenVPN – Soket mengikat gagal pada alamat lokal [AF_INET] IP:1194:Tidak dapat menetapkan alamat yang diminta?
Linux
  1. Cara menggunakan BusyBox di Linux

  2. Kemungkinan untuk menggunakan .dll di Linux

  3. O_DIRECT vs. O_SYNC di Linux/FreeBSD

  1. 5 alasan untuk menggunakan Linux di tahun 2020

  2. Bagaimana saya menggunakan cron di Linux

  3. Gunakan perpustakaan C di Swift di Linux

  1. Cara menggunakan FIND di Linux

  2. Cara Menggunakan Unzip di Linux

  3. Cara menggunakan Perintah Su di Linux