Opróżniam dysk twardy w niektórych systemach operacyjnych Linux 4.x za pomocą tego polecenia:
sudo sh -c 'pv -pterb /dev/zero > /dev/sda'
I otworzyłem kolejny tty i zacząłem sudo htop
i zauważyłem to:
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
Wartość parametru IO_WBYTES
wydaje się całkiem normalna, ale IO_RBYTES
pozostaje na poziomie 4 KiB i nigdy się nie zmienia.
Na przykład uruchomiłem kilka innych programów
dd if=/dev/zero of=/dev/zero
cat /dev/zero > /dev/zero
i był zaskoczony, widząc, że żaden z nich nie generuje dużo IO_RBYTES
lub IO_WBYTES
.
Myślę, że nie jest to specyficzne dla żadnego programu, ale dlaczego nie czyta /dev/zero
i pisze, aby /dev/{zero,null}
liczyć się jako bajty we / wy?
/dev/null
nie kończą interfejsów z takim sprzętem i nie zatykają magistrali we / wy. Podjęte do ekstremum; czy odczytuje / zapisuje do / z pamięci również we / wy? Oczywiście dla tych rzeczy nie ma twardego wytyczenia, a wszystko zależy od tego, jaką perspektywę przyjmujesz i jak użyteczna jest ta perspektywa.
/dev/{null,zero}
(który zwykle nie jest wąskim gardłem). To tylko moja perspektywa :)
read(2)
i write(2)
liczy się jako I / O, co jest bardzo rozsądne w swoim znaczeniu.