2009-02-11 28 views
27

Tôi đang làm việc trên một daemon giám sát các sự kiện tập tin thông qua inotify để kích hoạt các loại sự kiện khi các tập tin được truy cập. Tôi đã đọc rằng đồng hồ là một ít tốn kém, bởi vì hạt nhân được lưu trữ tên đường dẫn đầy đủ của mỗi tập tin được theo dõi.Số lượng đồng hồ inotify hợp lý với Linux là bao nhiêu?

Có bao nhiêu đồng hồ quá nhiều?

Chỉnh sửa: Chủ yếu là, tôi tự hỏi .. có bao giờ bạn nhìn thấy một hit hiệu suất đáng chú ý, nếu có, tại bao nhiêu đồng hồ đã làm nó xảy ra? Có, tôi phải theo dõi/đệ quy (tuy nhiên nó là một hệ thống bootstrapped tối thiểu).

Trả lời

17

AFAIK hạt nhân không lưu trữ tên đường dẫn, nhưng inode. Tuy nhiên, có 540 byte cho mỗi lần xem trên hệ thống 32 bit. Tăng gấp đôi trên 64bit.

Tôi biết từ Lsyncd (có thể bạn muốn kiểm tra điều đó?) Những người có một triệu đồng hồ. Nó chỉ ăn một Gigabyte bộ nhớ.

6

100 tỷ tỷ gazillions sẽ là quá nhiều, có thể. Kernel Korner - Intro to inotify đề cập đến “hàng ngàn đồng hồ” nên ít nhất con số đó không phải là vấn đề.

23

Bạn có thể tìm thấy giới hạn hệ thống bằng cách đọc /proc/sys/fs/inotify/max_user_instances (số lượng tối đa các đối tượng "inotify") và /proc/sys/fs/inotify/max_user_watches (số lượng tệp tối đa đã xem), vì vậy nếu bạn vượt quá các số đó, quá nhiều ;-) thường là vài chục nghìn hoặc cao hơn - trên hệ thống của tôi, 262143 - có lẽ nhiều hơn bạn cần trừ khi bạn đang cố gắng xem mọi tệp trong hệ thống tệp, nhưng bạn không nên làm điều đó. Tôi sẽ nói, chỉ cần cố gắng không sử dụng đồng hồ inotify nhiều hơn bạn cần, và đừng lo lắng về nó, trừ khi bạn nhận thấy một sự giảm đáng kể hiệu suất.

+1

tại sao tôi không nên sử dụng inotify để xem toàn bộ hệ thống tệp? bạn có thể cụ thể không? – Blub

+0

@Blub cũng tại sao bạn muốn làm điều đó? Trừ khi bạn đang gỡ lỗi triển khai hệ thống tập tin, tôi không thể nghĩ ra một trường hợp sử dụng tốt, và nếu đó là những gì bạn đang làm, có lẽ tốt hơn là nên móc vào chính mã hệ thống tệp. Chưa kể, inotify có lẽ sẽ không có đủ đồng hồ để thực sự xem _everything_ trên một hệ thống tập tin với một hệ điều hành hiện đại. Nhưng tôi đoán nếu điều đó xảy ra (tức là nếu bạn đang làm việc với một tập hợp các tập tin bị giảm), thì đó có lẽ không phải là điều tồi tệ nhất. Miễn là máy tính của bạn có thể xử lý nó, nó sẽ không làm hỏng bất cứ thứ gì AFAIK. –

+2

tôi muốn lập chỉ mục một ổ đĩa và do đó nếu một tệp thay đổi ở bất kỳ đâu, tôi cần cập nhật chỉ mục của mình. Tôi đã xem xét mã nguồn ext4, nó không chính xác được tạo ra cho người dùng addins .. chỉ có một tiện ích dumpe2fs có thể in "khối", nhưng không có ý tưởng nào được nêu ra làm thế nào để có được filepaths thực sự ra khỏi đó. Và vẫn còn .. Tôi sẽ cần phải chạy tiện ích đó liên tục, ít nhất một lần một giây để reupdate chỉ số. Không chính xác tuyệt vời, tôi muốn nhiều hơn để có được một số sự kiện trở lại - như inotify nào. – Blub

9

thông tin của tôi:

[[email protected] ~]# cat /var/log/lsyncd.status | grep Inotify 
Inotify watching 293208 directories 

[[email protected] ~]# cat /proc/sys/fs/inotify/max_user_watches 
1048576 

lsyncd sử dụng khoảng 130M bộ nhớ.

Tôi sử dụng lsyncd để giữ một số thư mục đồng bộ với máy chủ khôi phục thảm họa.

Không đạt hiệu suất/hình phạt trên máy chủ chính.

+4

Tôi nghĩ rằng bạn đang nhìn thấy việc sử dụng bộ nhớ lsyncd và không inotify ...inotify sử dụng bộ nhớ không gian hạt nhân ... – confiq

Các vấn đề liên quan