Thông tin được hiển thị bởi iotop không được thu thập theo cùng một cách cho toàn bộ các quy trình và cho toàn bộ hệ thống. Các số liệu toàn cầu của thực tế trên thế giới không phải là tổng của các số liệu trên mỗi quy trình (đó là số liệu của tổng cộng.
Tất cả thông tin được thu thập từ hệ thống tập tin Proc .
- Đối với mỗi quy trình, iotop đọc dữ liệu từ , cụ thể là và các giá trị. Đây là số byte thông qua năm và các cuộc gọi hệ thống (bao gồm cả các biến thể như , , , , vv).
/proc/PID/io
rchar
wchar
read
write
readv
writev
recv
send
- Toàn cầu giá trị “thực tế” được đọc từ
/proc/vmstat
, đặc biệt là pgpgin
và pgpgout
giá trị. Chúng đo dữ liệu được trao đổi giữa kernel và phần cứng (chính xác hơn, đây là dữ liệu được xáo trộn xung quanh bởi lớp thiết bị khối trong kernel).
Có nhiều lý do tại sao dữ liệu trên mỗi quá trình và dữ liệu lớp thiết bị khối khác nhau. Đặc biệt:
- Bộ nhớ đệm và bộ đệm có nghĩa là I / O xảy ra ở một lớp có thể không xảy ra cùng một lúc, hoặc cùng một số lần, ở lớp kia. Ví dụ, dữ liệu đọc từ bộ đệm được tính là đọc từ quá trình truy cập nó, nhưng không có dữ liệu đọc tương ứng từ phần cứng (điều này đã xảy ra trước đó, có thể thay mặt cho quá trình khác).
- Dữ liệu cấp quy trình bao gồm dữ liệu được trao đổi trên đường ống, ổ cắm và đầu vào / đầu ra khác không liên quan đến đĩa bên dưới hoặc thiết bị khối khác.
- Dữ liệu cấp quy trình chỉ chiếm tài khoản cho nội dung tệp, không phải siêu dữ liệu.
Sự khác biệt cuối cùng đó giải thích những gì bạn đang thấy ở đây. Xóa tệp chỉ ảnh hưởng đến siêu dữ liệu, không phải dữ liệu, vì vậy quá trình này không ghi gì cả. Nó có thể đang đọc nội dung thư mục để liệt kê các tệp cần xóa, nhưng nó đủ nhỏ để nó có thể cuộn mà không được chú ý.
Tôi không nghĩ Linux cung cấp bất kỳ cách nào để theo dõi cập nhật siêu dữ liệu tệp. Bạn có thể theo dõi I / O trên mỗi tệp hệ thống thông qua các mục bên dưới /sys/fs
đối với một số hệ thống tệp. Tôi không nghĩ rằng bạn có thể tính toán I / O siêu dữ liệu theo các quy trình cụ thể, sẽ rất phức tạp khi thực hiện trong trường hợp chung vì nhiều quy trình có thể khiến cùng một siêu dữ liệu được đọc hoặc thay đổi.