GNU/Linux >> Belajar Linux >  >> Linux

Efisiensi Banyak Jam Tangan Inotify Atau Panggilan Stat?

Saya mengembangkan perangkat lunak yang akan menggunakan inotify untuk melacak perubahan pada sejumlah besar file (puluhan hingga ratusan ribu file). Saya telah menemukan ide-ide ini:

  • satu jam tangan per file
  • satu jam tangan per direktori induk
  • hindari pemberitahuan dan pindai fs secara berkala untuk mengetahui perubahan (tidak disukai)

Saya akan memiliki database semua file yang saya tonton dan beberapa informasi stat dasar (seperti mtime dan ukuran), namun, saya harus membuat stat setiap file di direktori itu sampai saya menemukan file yang berubah.

Mana yang lebih cepat, berton-ton (100.000+) jam tangan tanpa pemberitahuan atau berton-ton panggilan statistik?

Menurut saya, mengurangi jumlah panggilan stat akan lebih baik, tetapi saya tidak cukup tahu tentang inotify.

Catatan:

Ini akan berjalan di workstation, bukan server. Tujuan utamanya adalah untuk menyinkronkan perubahan (berpotensi ke seluruh sistem file) antara klien dan server jauh.

Jawaban yang Diterima:

Saat Anda read() fd inotify, name field dari struct yang dikembalikan memberi tahu Anda file mana yang dimodifikasi relatif terhadap direktori yang sedang ditonton, jadi Anda tidak perlu membuat stat setiap file dalam direktori setelah kejadian.

Lihat http://linux.die.net/man/7/inotify

Khususnya:

struct inotify_event {
    int      wd;       /* Watch descriptor */
    uint32_t mask;     /* Mask of events */
    uint32_t cookie;   /* Unique cookie associating related
                          events (for rename(2)) */
    uint32_t len;      /* Size of 'name' field */
    char     name[];   /* Optional null-terminated name */
};

Bidang nama hanya ada saat kejadian dikembalikan untuk file
di dalam direktori yang diawasi; itu mengidentifikasi nama path file relatif
ke direktori yang ditonton. Nama path ini diakhiri dengan null, dan dapat
menyertakan byte null lebih lanjut untuk menyelaraskan pembacaan berikutnya ke batas alamat
yang sesuai.


Linux
  1. Lembar contekan Izin File/Direktori Linux

  2. Dapatkan file terbaru di direktori di Linux

  3. Mengecualikan direktori saat membuat file .tar.gz

  1. mkdir -p gagal saat direktori ada

  2. Volume file tunggal dipasang sebagai direktori di Docker

  3. Bash:Tidak ada file atau direktori seperti itu?

  1. Perbedaan Perhitungan Ukuran Direktori?

  2. sys/types.h:Tidak ada file atau direktori tersebut

  3. Apa itu `S_ISREG()`, dan apa fungsinya?