Saya mengosongkan hard drive pada beberapa Linux 4.x OS menggunakan perintah ini:
sudo sh -c 'pv -pterb /dev/zero > /dev/sda'
Dan saya membuka tty lain dan mulai sudo htop
dan memperhatikan ini:
PID USER PRI NI CPU% RES SHR IO_RBYTES IO_WBYTES S TIME+ Command
4598 root 20 0 15.5 1820 1596 4096 17223823 D 1:14.11 pv -pterb /dev/zero
Nilai untuk IO_WBYTES
tampaknya cukup normal, tetapi IO_RBYTES
tetap pada 4 KiB dan tidak pernah berubah.
Saya menjalankan beberapa program lain, misalnya
dd if=/dev/zero of=/dev/zero
cat /dev/zero > /dev/zero
dan terkejut melihat tidak satupun dari mereka menghasilkan banyak IO_RBYTES
atau IO_WBYTES
.
Saya pikir ini tidak spesifik untuk program apa pun, tetapi mengapa tidak membaca dari /dev/zero
dan menulis untuk /dev/{zero,null}
dihitung sebagai I / O byte?
/dev/null
jangan sampai akhirnya menghubungkan perangkat keras seperti itu dan jangan menyumbat bus I / O. Diambil secara ekstrim; dibaca / ditulis ke / dari memori juga I / O? Tentu saja, tidak ada penggambaran yang sulit untuk hal-hal ini, dan itu semua tergantung pada perspektif mana yang Anda ambil dalam hal-hal ini, dan seberapa bermanfaat perspektif itu bagi Anda./dev/{null,zero}
(yang biasanya bukan hambatan). Itu hanya sudut pandang saya :)read(2)
danwrite(2)
dianggap sebagai I / O, yang sangat masuk akal dalam arti sendiri.Jawaban:
Mereka dihitung sebagai I / O, tetapi bukan tipe yang diukur oleh bidang yang Anda lihat.
Di
htop
,IO_RBYTES
danIO_WBYTES
tunjukkan bidangread_bytes
danwrite_bytes
dari/proc/<pid>/io
, dan bidang tersebut mengukur byte yang melewati lapisan blok./dev/zero
tidak melibatkan lapisan blok, jadi bacaan dari itu tidak muncul di sana.Untuk melihat I / O dari
/dev/zero
, Anda perlu melihatrchar
danwchar
bidang di/proc/<pid>/io
, yang munculhtop
sebagaiRCHAR
danWCHAR
:Lihat
man 5 proc
danman 1 htop
untuk detailnya.sumber
rchar
danwchar
menghitung byte dari panggilan keread(2)
danwrite(2)
, kan?read()
pasti bukan "membaca dari penyimpanan "!storage
maksudnya "setiap jalur bus yang dapat dibayangkan", terlepas dari apakah penyimpanan yang dimaksud adalah fisik atau virtual atau mmap'd atau soket virtual atau dalam cache L1 - itu hanya apa pun di luar memori yang dipetakan program itu termasuk bersama