Nhìn vào cá heo với Baloo một cách cụ thể, nó dường như tìm kiếm siêu dữ liệu của mọi tệp trong miền tìm kiếm của nó, ngay cả khi bạn đang thực hiện tìm kiếm tên tệp đơn giản. Khi tôi theo dõi các file.so
quá trình, tôi thấy cuộc gọi đến lstat
, getxattr
và getxattr
một lần nữa cho mỗi tập tin, và ngay cả đối với ..
các mục. Những cuộc gọi hệ thống lấy siêu dữ liệu về các tập tin được lưu trữ trong một vị trí khác nhau từ tên tập tin (tên tập tin được lưu trữ trong nội dung thư mục, nhưng các siêu dữ liệu đang trong inode ). Truy vấn siêu dữ liệu của một tệp nhiều lần là rẻ vì dữ liệu sẽ nằm trong bộ đệm của đĩa, nhưng có thể có một sự khác biệt đáng kể giữa truy vấn siêu dữ liệu và không truy vấn siêu dữ liệu.
find
thông minh hơn nhiều. Nó cố gắng tránh các cuộc gọi hệ thống không cần thiết. Nó sẽ không gọi getxattr
vì nó không tìm kiếm dựa trên các thuộc tính mở rộng. Khi đi ngang qua một thư mục, nó có thể cần phải gọi lstat
các tên tệp không khớp bởi vì đó có thể là thư mục con để tìm kiếm đệ quy ( lstat
là cuộc gọi hệ thống trả về siêu dữ liệu tệp bao gồm loại tệp như thông thường / thư mục / symlink / Nott). Tuy nhiên find
có một tối ưu hóa: nó biết có bao nhiêu thư mục con mà thư mục có từ số lượng liên kết của nó và nó dừng cuộc gọi lstat
một khi nó biết rằng nó đi qua tất cả các thư mục con. Cụ thể, trong một thư mục lá (một thư mục không có thư mục con),find
chỉ kiểm tra tên, không phải siêu dữ liệu. Hơn nữa, một số hệ thống tệp giữ một bản sao của loại tệp trong mục nhập thư mục để find
thậm chí không cần gọi lstat
nếu đó là thông tin duy nhất mà nó cần.
Nếu bạn chạy find
với các tùy chọn yêu cầu kiểm tra siêu dữ liệu, nó sẽ thực hiện nhiều lstat
cuộc gọi hơn , nhưng nó vẫn không thực hiện lstat
cuộc gọi trên một tệp nếu không cần thông tin (ví dụ: vì tệp bị loại trừ bởi một điều kiện trước đó khớp với tên).
Tôi nghi ngờ rằng các công cụ tìm kiếm GUI khác phát minh lại find
bánh xe cũng kém thông minh hơn tiện ích dòng lệnh đã trải qua nhiều thập kỷ tối ưu hóa. Ít nhất, cá heo đủ thông minh để sử dụng cơ sở dữ liệu định vị nếu bạn tìm kiếm trên khắp mọi nơi, (với giới hạn không rõ ràng trong giao diện người dùng rằng kết quả có thể bị lỗi thời).