Сторінка proc(5)
описує iowait як "час очікування завершення IO". Здебільшого це було пояснено в попередньому питанні. Моє запитання: під час очікування блокування IO, чи включає це очікування на блокування IO мережі або лише локальний IO?
Сторінка proc(5)
описує iowait як "час очікування завершення IO". Здебільшого це було пояснено в попередньому питанні. Моє запитання: під час очікування блокування IO, чи включає це очікування на блокування IO мережі або лише локальний IO?
Відповіді:
Це означає очікування "Файлового вводу / виводу", тобто будь-який дзвінок читання / запису у файлі, який знаходиться у змонтованій файловій системі, але також, ймовірно, рахує час очікування для заміни або завантаження сторінок у пам'ять, наприклад, бібліотеки не ще в пам'яті або на сторінках файлів mmap () ', які не є в операційній пам’яті.
НЕ враховує час, витрачений на очікування об'єктів IPC, таких як розетки, труби, ttys, select (), anketa (), сон (), пауза () тощо.
В основному настав час, що потік витрачає на очікування синхронного дискового вводу-виводу - за цей час він теоретично здатний запускатись, але не може, оскільки деякі потрібні йому дані ще відсутні. Такі процеси, як правило, відображаються в стані "D" і сприяють середньому навантаженню коробки.
Я заплутано вважаю, що це, ймовірно, включає в себе IO файлів у мережевих файлових системах.
Час iowait - це кількість часу, який процес проводить у планувальнику вводу-виводу ядра. Наскільки я знаю, це не має нічого спільного з мережевим введенням-виведенням, наскільки йде звичайне з'єднання сокетів. Однак він буде включати час, витрачений на очікування мережевих файлових систем, таких як NFS.
Це робить.
Між іншим, один із серверів, якими я керую, відчуває високу іоваїт, яку спричиняє неправильне кріплення 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]
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 збігається з локальною файловою системою.