Bu proc(5)
kılavuz iowait'i "IO'nun tamamlanmasını bekleme süresi" olarak tanımlar. Bu çoğunlukla daha önceki bir soruda açıklanmıştır . Sorum şu: IO'yu engellemeyi beklerken, bu ağ IO'sunu veya yalnızca yerel IO'yu engellemeyi de içeriyor mu?
Bu proc(5)
kılavuz iowait'i "IO'nun tamamlanmasını bekleme süresi" olarak tanımlar. Bu çoğunlukla daha önceki bir soruda açıklanmıştır . Sorum şu: IO'yu engellemeyi beklerken, bu ağ IO'sunu veya yalnızca yerel IO'yu engellemeyi de içeriyor mu?
Yanıtlar:
Bu, "Dosya G / Ç" için beklemek anlamına gelir, yani, bağlı dosya sistemindeki bir dosyadaki herhangi bir okuma / yazma çağrısı, ancak muhtemelen sayfaları belleğe takas etmek veya talep yüklemek için bekleyen zamanı sayar, örn. henüz bellekte değil veya ram'da olmayan mmap () 'nin dosya sayfaları.
Soketler, borular, ttyler, select (), anket (), uyku (), duraklatma () vb. Gibi IPC nesnelerini beklerken harcanan süreyi DEĞİLDİR.
Temel olarak, bir iş parçacığının senkron disk IO'yu beklemeye harcadığı zamandır - bu süre zarfında teorik olarak çalışabilir, ancak ihtiyaç duyduğu bazı veriler henüz orada olmadığından edemez. Bu tür işlemler genellikle "D" durumunda görünür ve bir kutunun yük ortalamasına katkıda bulunur.
Kafa karıştırıcı bir şekilde, bu muhtemelen ağ dosya sistemlerinde dosya GÇ içerir.
iowait süresi, bir işlemin çekirdek G / Ç zamanlayıcısında geçirdiği süredir. Bildiğim kadarıyla, bunun normal soket bağlantıları gittikçe ağ I / O ile bir ilgisi yok. Ancak, NFS gibi ağ dosya sistemlerini beklemek için harcanan zamanı da içerecektir.
Öyle.
Bu arada, yönettiğim sunuculardan biri kötü bir NFS montajının neden olduğu yüksek iowait yaşıyor.
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
Ve D
devletteki süreçlere bakın .
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]
İowait, şebeke çağrılarını içerir. Bunu söylüyorum, çünkü NFS çekirdeğin bakış açısına göre birçok linux yerel dosya sistemini kullanıyor:
$ 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,
};
İşlemler dosya tanımlayıcı 5'e bir yazma çağrısı yaptığında böyle bir şey olur:
files->fd_array[5]->f_op->write(argv.......)
Yani, süreçler ne tür bir dosya sisteminin (vfs magic) kullandığını bilmiyor ve iowait yerel bir dosya sistemi ile aynı.