На ПК аппаратных средствах диапазоны IO с отображенной памятью присвоены BIOS адресам физической памяти между 3 ГиБ и 4 гибибайтами. Когда драйвер запрашивает доступ к памяти, ядро отображает его где-нибудь в виртуальном адресном пространстве ядра.
Ни один из Ваших других двух вопросов, кажется, не имеет никакого отношения к общей памяти, но:
В обоих случаях, если адрес в пространстве ядра больше, чем PAGE_OFFSET, должен относиться к ioremap, отображающемуся (чтобы быть разрешенным посредством разбиения на страницы), если это ниже, чем PAGE_OFFSET, это могло бы быть разрешено с простым NEW_ADDRESS = OLD_ADDRESS - PAGE_OFFSET. Это корректно?
Мысленно, да. Аппаратные средства используют таблицы страниц в любом случае.
Можно использовать инструмент iostat
собирать информацию использования диска. Требуется несколько аргументов, включая переключатель, -d
:
-d Display the device utilization report.
Это также берет аргумент в секундах интервал того, как частый это должно повторно выполниться. Значение 3600
было бы число секунд через час.
$ iostat -d 3600
Linux 2.6.35.14-106.fc14.x86_64 (grinchy) 09/04/2013 _x86_64_ (4 CPU)
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 20.53 71.86 1259.61 20308334 356000380
dm-0 4.92 39.02 28.81 11027610 8143376
dm-1 0.54 0.93 3.38 261472 954912
dm-2 156.65 31.87 1227.42 9006394 346902056
Вывод от этой команды мог быть перенаправлен в файл:
$ iostat -d 3600 >> iostat_hrly.log
Если Вы консультируетесь со страницей справочника для iostat
это имеет довольно хорошие описания единиц.
выборка
Blk_read/s
Indicate the amount of data read from the device expressed in a
number of blocks per second. Blocks are equivalent to sectors with
kernels 2.4 and later and therefore have a size of 512 bytes. With
older kernels, a block is of indeterminate size.
Blk_wrtn/s
Indicate the amount of data written to the device expressed in a
number of blocks per second.
Blk_read
The total number of blocks read.
Blk_wrtn
The total number of blocks written.
Таким образом, блок составляет 512 байтов, таким образом, Blk_read/s с точки зрения МБ для устройства sda
был бы, 71.86 * 512 байтов = 36,79232 килобайтов/секунда.
Существуют дополнительные переключатели, которые изменят единицы автоматически в выводе.
выборка от iostat
страница справочника
-h Make the NFS report displayed by option -n easier to read by a human.
-k Display statistics in kilobytes per second instead of blocks per
second. Data displayed are valid only with kernels 2.4 and later.
-m Display statistics in megabytes per second instead of blocks or
kilobytes per second. Data displayed are valid only with kernels
2.4 and later.
Таким образом, это могло бы быть более полезно, показав пропускную способность в кБайт/с:
$ iostat -dk 3600
Linux 2.6.35.14-106.fc14.x86_64 (grinchy) 09/05/2013 _x86_64_ (4 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 20.85 47.25 663.81 15475096 217427086
dm-0 5.01 20.00 14.43 6549301 4725068
dm-1 0.54 0.58 1.60 189064 524872
dm-2 165.30 26.65 647.78 8730281 212177124