다수의 inotify 모니터링 또는 통계 호출의 효율성

다수의 inotify 모니터링 또는 통계 호출의 효율성

저는 inotify를 활용하여 수많은 파일(수만에서 수십만 개의 파일)에 대한 변경 사항을 추적하는 소프트웨어를 개발 중입니다. 나는 다음과 같은 아이디어를 생각해 냈습니다.

  • 파일당 하나의 시계
  • 상위 디렉터리당 하나의 시계
  • 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 바이트를 포함할 수 있습니다.

관련 정보