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 htopi 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_WBYTESwydaje się całkiem normalna, ale IO_RBYTESpozostaje 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_RBYTESlub IO_WBYTES.
Myślę, że nie jest to specyficzne dla żadnego programu, ale dlaczego nie czyta /dev/zeroi pisze, aby /dev/{zero,null}liczyć się jako bajty we / wy?
/dev/nullnie 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.