Stat
許多 inotify 監視或統計呼叫的效率
我正在開發將利用 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 欄位僅在為監視目錄中的文件返回事件時出現;它標識相對於監視目錄的文件路徑名。此路徑名以空值結尾,並且可能包含更多空字節以將後續讀取對齊到合適的地址邊界。