多数のinotify監視または統計呼び出しの効率性

多数のinotify監視または統計呼び出しの効率性

私はinotifyを活用して多数のファイル(数万から数十万のファイル)への変更を追跡するソフトウェアを開発しています。私は次のアイデアを思いついた。

  • ファイルごとに1つの時計
  • 親ディレクトリごとに1つの時計
  • inotifyを避け、ファイルシステムの変更を定期的に確認してください(推奨されません)。

私が見ているすべてのファイルと、ランタイムとサイズなど、いくつかの基本的な統計を含むデータベースがありますが、変更されたファイルが見つかるまで、そのディレクトリ内のすべてのファイルを計算する必要があります。

多数(100,000以上)のinotifyモニタと多数のstat呼び出しのどちらが高速ですか?

stat呼び出しの回数を減らすのは良いことですが、Inotifyについて知っていることが不足しています。

メモ:

これはサーバーではなくワークステーションで実行されます。主な目的は、クライアントとリモートサーバー間の変更(おそらくファイルシステム全体)を同期することです。

ベストアンサー1

read()inotify fdを使用すると、name返された構造体のフィールドは、監視中のディレクトリに関してどのファイルが変更されたかを知らせるため、イベント後にディレクトリ内のすべてのファイルを計算する必要はありません。

バラよりhttp://linux.die.net/man/7/inotify

具体的には:

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 */
};

名前フィールドは、監視ディレクトリのファイルに対してイベントが返された場合にのみ表示されます。これは、監視ディレクトリに相対的なファイルパス名を識別します。パス名はnullで終わり、その後の読み取りを適切なアドレス境界に合わせるために追加のnullバイトを含めることができます。

おすすめ記事