Iowait có bao gồm thời gian chờ đợi các cuộc gọi mạng không?


19

Trang này proc(5)mô tả iowait là "thời gian chờ IO hoàn thành". Điều này chủ yếu được giải thích trong một câu hỏi trước đó. Câu hỏi của tôi là: trong khi chờ đợi chặn IO, điều này có bao gồm chờ đợi khi chặn IO mạng hay chỉ IO cục bộ?

Câu trả lời:


20

Điều này có nghĩa là chờ đợi "Tệp I / O", nghĩa là, bất kỳ cuộc gọi đọc / ghi nào trên một tệp trong hệ thống tệp được gắn kết, nhưng cũng có thể tính thời gian chờ để hoán đổi hoặc tải trang theo yêu cầu vào bộ nhớ, ví dụ như các thư viện không trong bộ nhớ, hoặc các trang của tập tin mmap () 'không có trong ram.

Nó không tính thời gian chờ đợi cho các đối tượng IPC như ổ cắm, đường ống, ttys, select (), poll (), ngủ (), pause (), v.v.

Về cơ bản, đã đến lúc một luồng dành cho việc chờ đợi đĩa IO đồng bộ - trong thời gian này về mặt lý thuyết nó có thể chạy nhưng không thể vì một số dữ liệu mà nó cần chưa có. Các quy trình như vậy thường hiển thị ở trạng thái "D" và đóng góp vào mức trung bình tải của hộp.

Thật khó hiểu tôi nghĩ rằng điều này có thể bao gồm tệp IO trên các hệ thống tệp mạng.


Vì nfs IO cũng là Tệp I / O, tôi đoán bạn đúng ;-)
wzzrd

Còn giao diện loopback thì sao? Linux xử lý loại giao diện này như thế nào?
Jalal Mostafa

3

thời gian iowait là lượng thời gian mà một quá trình dành cho bộ lập lịch I / O kernel. Theo như tôi biết, điều này không liên quan gì đến I / O mạng khi các kết nối ổ cắm thông thường đi. Tuy nhiên, nó sẽ bao gồm thời gian chờ đợi cho các hệ thống tệp mạng như NFS.


2

Nó làm.

Ngẫu nhiên, một trong những máy chủ mà tôi quản lý đang gặp phải iowait cao, nguyên nhân là do gắn kết NFS xấu.

top - 06:19:03 up 14 days, 10:15,  3 users,  load average: 9.67, 11.83, 12.31
Tasks: 135 total,   1 running, 134 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.2%us,  0.2%sy,  0.0%ni,  0.0%id, 99.7%wa,  0.0%hi,  0.0%si,  0.0%st

top - 06:22:55 up 14 days, 10:19,  3 users,  load average: 10.58, 11.13, 11.89
Tasks: 137 total,   1 running, 136 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.2%sy,  0.0%ni,  0.0%id, 99.8%wa,  0.0%hi,  0.0%si,  0.0%st

Và nhìn vào các quá trình trong Dtiểu bang.

root     27011  0.0  0.0      0     0 ?        S    03:12   0:00 [nfsd4]
root     27012  0.0  0.0      0     0 ?        S    03:12   0:00 [nfsd4_callbacks]
root     27013  0.0  0.0      0     0 ?        D    03:12   0:01 [nfsd]
root     27014  0.0  0.0      0     0 ?        D    03:12   0:01 [nfsd]
root     27015  0.0  0.0      0     0 ?        D    03:12   0:01 [nfsd]
root     27016  0.0  0.0      0     0 ?        D    03:12   0:01 [nfsd]

2

Các iowait bao gồm các cuộc gọi mạng. Tôi nói điều này, bởi vì NFS được xử lý như nhiều hệ thống tệp cục bộ linux theo quan điểm của kernel:

$ vim linux-2.6.38.2/fs/nfs/file.c 

const struct file_operations nfs_file_operations = {
        .llseek         = nfs_file_llseek,
        .read           = do_sync_read,
        .write          = do_sync_write,
        .aio_read       = nfs_file_read,
        .aio_write      = nfs_file_write,
        .mmap           = nfs_file_mmap,
        .open           = nfs_file_open,
        .flush          = nfs_file_flush,
        .release        = nfs_file_release,
        .fsync          = nfs_file_fsync,
        .lock           = nfs_lock,
        .flock          = nfs_flock,
        .splice_read    = nfs_file_splice_read,
        .splice_write   = nfs_file_splice_write,
        .check_flags    = nfs_check_flags,
        .setlease       = nfs_setlease,
};

Khi các quy trình gọi một ghi trên mô tả tập tin 5, một cái gì đó như thế này sẽ xảy ra:

files->fd_array[5]->f_op->write(argv.......)

Vì vậy, các quy trình không biết loại hệ thống tệp nào đang sử dụng (ma thuật vfs) và iowait giống với hệ thống tệp cục bộ.

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.