Mengapa tidak membaca dari / dev / zero count sebagai IO_RBYTES?


25

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 htopdan 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_WBYTEStampaknya cukup normal, tetapi IO_RBYTEStetap 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_RBYTESatau IO_WBYTES.

Saya pikir ini tidak spesifik untuk program apa pun, tetapi mengapa tidak membaca dari /dev/zerodan menulis untuk /dev/{zero,null}dihitung sebagai I / O byte?


5
Saya ingin tahu, mengapa menurut Anda mereka harus dihitung sebagai I / O?
marcelm

1
@marcelm Saya pikir setiap input / output harus dihitung sebagai I / O, termasuk file R / W, I / O jaringan dan banyak lagi.
iBug

tetapi operasi tersebut menjalankan I / O ke perangkat keras (disk, dan kartu jaringan, masing-masing), dan harus melakukan perjalanan melalui beberapa bus I / O (seperti PCI-express), yang semuanya dapat menjadi hambatan yang signifikan. Menulis ke, katakanlah, /dev/nulljangan 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.
marcelm

1
Catatan, komentar pertama saya dimaksudkan untuk memprovokasi Anda (dan orang lain) untuk memikirkan perspektif tersebut, dan mencari tahu mengapa Anda mengambil perspektif Anda. Saya tidak bermaksud menyindir Anda salah; Saya bahkan tidak berpikir situasinya hitam dan putih. Tetapi secara pribadi, saya akan jauh lebih tertarik pada statistik I / O untuk perangkat keras yang sebenarnya (yang mungkin sangat menjadi hambatan) daripada /dev/{null,zero}(yang biasanya bukan hambatan). Itu hanya sudut pandang saya :)
marcelm

1
@marcelm Tapi saya awalnya berpikir bahwa apa saja read(2)dan write(2)dianggap sebagai I / O, yang sangat masuk akal dalam arti sendiri.
iBug

Jawaban:


54

Mereka dihitung sebagai I / O, tetapi bukan tipe yang diukur oleh bidang yang Anda lihat.

Di htop, IO_RBYTESdan IO_WBYTEStunjukkan bidang read_bytesdan write_bytesdari /proc/<pid>/io, dan bidang tersebut mengukur byte yang melewati lapisan blok. /dev/zerotidak melibatkan lapisan blok, jadi bacaan dari itu tidak muncul di sana.

Untuk melihat I / O dari /dev/zero, Anda perlu melihat rchardan wcharbidang di /proc/<pid>/io, yang muncul htopsebagai RCHARdan WCHAR:

rchar : membaca karakter

Jumlah byte yang menyebabkan tugas ini harus dibaca dari penyimpanan. Ini hanyalah jumlah byte yang dilewati proses ini read(2)dan panggilan sistem yang serupa. Ini mencakup hal-hal seperti terminal I / O dan tidak terpengaruh oleh apakah I / O disk fisik yang sebenarnya diperlukan (bacaan mungkin telah dipenuhi dari pagecache).

wchar : karakter yang ditulis

Jumlah byte yang disebabkan oleh tugas ini, atau akan menyebabkan ditulis ke disk. Peringatan serupa berlaku di sini seperti dengan rchar.

Lihat man 5 procdan man 1 htopuntuk detailnya.


Jadi rchardan wcharmenghitung byte dari panggilan ke read(2)dan write(2), kan?
iBug

Ya itu betul.
Stephen Kitt

9
Bicara tentang ungkapan yang menyesatkan pada deskripsi rchar . Semuanya melewati read()pasti bukan "membaca dari penyimpanan "!
ilkkachu

2
@ilkkachu storagemaksudnya "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
cat
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.