iotop hiển thị 1,5 MB / s ghi đĩa, nhưng tất cả các chương trình có 0,00 B / s


18

Tôi không hiểu iotopđầu ra: nó hiển thị ~ 1,5 MB / s đĩa ghi (phía trên bên phải), nhưng tất cả các chương trình có 0,00 B / s. Tại sao?

nhập mô tả hình ảnh ở đây

Video được quay khi tôi đang xóa nội dung của một thư mục có vài triệu tệp đang sử dụng perl -e 'for(<*>){((stat)[9]<(unlink))}' , trên Kubfox 14.04.3 LTS x64.

iotopđã được đưa ra bằng cách sử dụng sudo iotop.

Câu trả lời:


22

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/iorcharwcharreadwritereadvwritevrecvsend
  • Toàn cầu giá trị “thực tế” được đọc từ /proc/vmstat, đặc biệt là pgpginpgpgoutgiá 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.


1
Câu trả lời khá hay, cảm ơn bạn. Bạn có thể tư vấn một cách đáng tin cậy hơn để theo dõi sự phát triển của đầu ra?
Rui F Ribeiro

1
@RuiFRibeiro Bạn có thể xem tập tin nào rm -rđang xử lý bằng cách nhập stracenó, nhưng điều đó sẽ không cung cấp cho bạn một ước tính rất hữu ích về tỷ lệ phần trăm hoàn thành do thứ tự truyền tải trong mỗi thư mục có phần khó đoán. Nếu chỉ có một hoạt động lớn đang diễn ra trong hệ thống tệp đó và không có quá nhiều liên kết cứng liên quan, việc xem df -icho bạn biết có bao nhiêu tệp đã được xử lý.
Gilles 'SO- ngừng trở nên xấu xa'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.