Pergunta

Eu estou trabalhando em um daemon que os eventos de arquivo monitores via inotify para desencadear vários tipos de eventos quando os arquivos são acessados. Eu li que os relógios são um pouco caro, porque o Kernel é armazenar o nome de caminho completo de cada arquivo a ser vigiados.

Como muitos relógios seria demais?

Edit: Principalmente, eu estou querendo saber .. você já viu um hit de desempenho notável, em caso afirmativo, em quantos relógios que isso aconteceu? Sim, eu tenho que monitorar / recursivamente (no entanto um sistema bootstrap mínima).

Foi útil?

Solução

AFAIK o kernel é não armazenar o caminho, mas o inode. No entanto, existem 540 bytes por relógio em um sistema de 32 bits. Duplo tanto em 64 bits.

Eu sei da Lsyncd (talvez você queira verificar isso?) Pessoas que têm um milhão de relógios. Ele só come um Gigabyte de memória.

Outras dicas

Você pode encontrar os limites do sistema de leitura /proc/sys/fs/inotify/max_user_instances (número máximo de inotify "objetos") e /proc/sys/fs/inotify/max_user_watches (número máximo de arquivos assistidos), por isso, se você exceder esses números, é demais ;-) O número máximo de relógios é normalmente várias dezenas de milhares ou superior - no meu sistema, 262143 - que é provavelmente mais do que você jamais iria precisar menos que você está tentando assistir a todos os arquivos em um sistema de arquivos, mas você não deveria estar fazendo isso. Eu diria, apenas tente não usar relógios mais inotify do que você precisa, e não se preocupe com isso a menos que você notar uma diminuição significativa no desempenho.

A minha informação:

[foo@caffeine ~]# cat /var/log/lsyncd.status | grep Inotify
Inotify watching 293208 directories

[foo@caffeine ~]# cat /proc/sys/fs/inotify/max_user_watches
1048576

lsyncd usa cerca de 130M de memória.

Eu uso lsyncd para manter alguns diretórios em sincronia com o servidor de recuperação de desastres.

No acerto de desempenho / penalidade no servidor principal.

100 bilhões de trilhões gazillions seria demais, provavelmente. Kernel Korner - Intro para iNotify menciona “milhares de relógios” para pelo menos esse número não deve ser um problema.

Depende de quanta memória RAM você tem

Enquanto 524288 é o número máximo de arquivos que podem ser assistidos, se você estiver em um ambiente que é particularmente limitada por memória, você pode querer diminuir o número. Cada relógio arquivo ocupa 540 bytes (32 bits) ou ~ 1kb (64 bits), assumindo assim que todos os 524288 relógios são consumidos que resulta em um limite superior de cerca de 256 (de 32 bits) ou 512 (64 bits) .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top