İowait şebeke çağrıları için bekleme süresini içeriyor mu?


19

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:


20

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.


Nfs IO da Dosya I / O olduğu için haklısın ;-)
wzzrd

Geridöngü arabirimleri ne olacak? Linux bu tür arayüzlere nasıl davranır?
Jalal Mostafa

3

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.


2

Ö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 Ddevletteki 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]

2

İ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ı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.