Я освобождаю жесткий диск на некоторых ОС Linux 4.x с помощью этой команды:
sudo sh -c 'pv -pterb /dev/zero > /dev/sda'
И я открыл другой tty и начал sudo htop
и заметил это:
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
Значение для IO_WBYTES
кажется вполне нормальным, но IO_RBYTES
остается на уровне 4 КиБ и никогда не меняется.
Я запустил несколько других программ, например
dd if=/dev/zero of=/dev/zero
cat /dev/zero > /dev/zero
и был удивлен, увидев, что ни один из них не генерирует много IO_RBYTES
или IO_WBYTES
.
Я думаю, что это не относится к какой-либо программе, но почему бы не считывать /dev/zero
и записывать, чтобы /dev/{zero,null}
считаться байтами ввода / вывода?
/dev/null
не в конечном итоге интерфейс с таким оборудованием и не забивает шины ввода-вывода. Взятый до крайности; чтение / запись в / из памяти также ввод / вывод? Конечно, нет четкого разграничения для этих вещей, и все зависит от того, какую перспективу вы принимаете в этих вещах, и насколько полезной эта перспектива оказывается для вас./dev/{null,zero}
(которое обычно не является узким местом). Это только моя точка зрения, хотя :)read(2)
иwrite(2)
считается I / O, что очень разумно в своем собственном смысле.Ответы:
Они считаются вводом / выводом, но не того типа, который измеряется полями, на которые вы смотрите.
В
htop
,IO_RBYTES
иIO_WBYTES
показатьread_bytes
иwrite_bytes
поля из/proc/<pid>/io
, и эти поля измерения байтов , которые проходят через блок слоя./dev/zero
не включает в себя блочный слой, поэтому чтение из него там не отображается.Чтобы увидеть ввод / вывод из
/dev/zero
, вам нужно взглянуть на поляrchar
и , которые отображаются в виде и :wchar
/proc/<pid>/io
htop
RCHAR
WCHAR
Смотрите
man 5 proc
иman 1 htop
для деталей.источник
rchar
иwchar
что подсчет байтов от звонковread(2)
иwrite(2)
, не так ли?read()
определенно не «прочитано из хранилища »!storage
они означают «любая мыслимая линия шины», независимо от того, является ли рассматриваемое хранилище физическим или виртуальным, или mmap'd, или виртуальным сокетом, или в кеше L1 - это просто что-то вне отображаемой памяти этой программы, включая shared