Stat

許多 inotify 監視或統計呼叫的效率

  • August 10, 2011

我正在開發將利用 inotify 跟踪大量文件(數万到數十萬個文件)的更改的軟體。我想出了這些想法:

  • 每個文件一隻手錶
  • 每個父目錄一個手錶
  • 避免 inotify 並定期掃描 fs 以進行更改(不是首選)

我將擁有一個包含我正在觀看的所有文件和一些基本統計資訊(如 mtime 和大小)的數據庫,但是,我必須統計該目錄中的每個文件,直到找到更改的文件。

噸(100,000+)的 inotify 手錶或噸的統計呼叫哪個會更快?

我認為減少統計呼叫的數量會更好,但我對 inotify 了解不夠。

筆記:

這將在工作站上執行,而不是在伺服器上。它的主要目的是在客戶端和遠端伺服器之間同步更改(可能是整個文件系統)。

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

name 欄位僅在為監視目錄中的文件返回事件時出現;它標識相對於監視目錄的文件路徑名。此路徑名以空值結尾,並且可能包含更多空字節以將後續讀取對齊到合適的地址邊界。

引用自:https://unix.stackexchange.com/questions/18369