Чи включає Iowait час очікування мережевих дзвінків?


19

Сторінка proc(5)описує iowait як "час очікування завершення IO". Здебільшого це було пояснено в попередньому питанні. Моє запитання: під час очікування блокування IO, чи включає це очікування на блокування IO мережі або лише локальний IO?

Відповіді:


20

Це означає очікування "Файлового вводу / виводу", тобто будь-який дзвінок читання / запису у файлі, який знаходиться у змонтованій файловій системі, але також, ймовірно, рахує час очікування для заміни або завантаження сторінок у пам'ять, наприклад, бібліотеки не ще в пам'яті або на сторінках файлів mmap () ', які не є в операційній пам’яті.

НЕ враховує час, витрачений на очікування об'єктів IPC, таких як розетки, труби, ttys, select (), anketa (), сон (), пауза () тощо.

В основному настав час, що потік витрачає на очікування синхронного дискового вводу-виводу - за цей час він теоретично здатний запускатись, але не може, оскільки деякі потрібні йому дані ще відсутні. Такі процеси, як правило, відображаються в стані "D" і сприяють середньому навантаженню коробки.

Я заплутано вважаю, що це, ймовірно, включає в себе IO файлів у мережевих файлових системах.


Оскільки nfs IO теж File I / O, я думаю, ви маєте рацію ;-)
wzzrd

А як щодо інтерфейсів петлі? Як linux ставиться до такого роду інтерфейсів?
Джалал Мостафа

3

Час iowait - це кількість часу, який процес проводить у планувальнику вводу-виводу ядра. Наскільки я знаю, це не має нічого спільного з мережевим введенням-виведенням, наскільки йде звичайне з'єднання сокетів. Однак він буде включати час, витрачений на очікування мережевих файлових систем, таких як NFS.


2

Це робить.

Між іншим, один із серверів, якими я керую, відчуває високу іоваїт, яку спричиняє неправильне кріплення NFS.

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

І подивіться на процеси в Dдержаві.

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

Iowait включає мережеві дзвінки. Я кажу це, тому що NFS обробляє стільки локальних файлових систем Linux з точки зору ядра:

$ 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,
};

Коли процеси викликають дескриптор 5 запису файлів, щось подібне станеться:

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

Отже, процеси не знають, яку саме файлову систему використовують (vfs magic), а iowait збігається з локальною файловою системою.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.