1

Все, я вижу дисковый ввод-вывод при чистом вызове записи, и мне было интересно, почему. Это во встроенной системе без каких-либо других фоновых процессов, которые могут мешать работе. Файловая система находится на SSD, параметры fstab:

/dev/sda /mnt/storage0 ext4 rw,noatime,barrier=1,data=ordered,discard 0 0

Фактические данные ввода / вывода:

# time dd if=/dev/zero of=/mnt/storage0/test bs=16k count=2048k & vmstat 3 10000
0
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 2  0      0   4384   1008 501088    0    0  3900 11969 2826  833  0 42 54  3
 2  2      0   3232   1488 501312    0    0  8608 120048 1056 2188  1 96  0  3
 1  2      0   4912   1440 499312    0    0 13040 78411 1225 2971  2 64  0 34
 2  2      0   3184   1408 501456    0    0 13179 107317 1252 3032  2 71  0 27
 2  2      0   3168   1456 501456    0    0 10037 82240 1027 2409  1 59  0 40
 3  0      0   4544   1440 500224    0    0  6901 62811  755 1708  1 45  0 54
 1  3      0   2928   1424 501824    0    0  8608 91200  909 2156  1 58  0 41
 0  2      0   4944   1456 499008    0    0  9173 75200  901 2155  1 50  0 49
 1  1      0   4944   1456 499760    0    0  8795 70880  907 2061  1 50  0 49
 1  1      0   5184   1472 499328    0    0 11237 106267 1141 2682  1 69  0 30
 3  2      0   3216   1456 501296    0    0 10373 96485 1055 2499  2 63  0 35
 0  2      0   4368   1488 499632    0    0  7488 72459  809 1857  1 48  0 51
 0  2      0   4480   1504 499536    0    0 11717 71445 1082 2653  1 57  0 42

2 ответа2

2

Операционная система будет читать диск, чтобы сделать запись. Потребуется прочитать такие вещи, как заголовок файла, чтобы обновить его, например, размером файла. Нужно будет читать таблицы распределения блоков, чтобы знать, куда безопасно записывать данные на диск и т.д.

Запись на диск - это больше, чем просто копирование данных на него.

1

У меня был похожий опыт при использовании dd с netcat

nc -l 1234 | dd of=/dev/sda bs=4M

К моему удивлению, dd читал (много) из sda , о котором нужно только писать.

Оказалось, использование obs (размер выходного блока) вместо bs (устанавливает и выводит размер блока) заставило чтения исчезнуть.

nc -l 1234 | dd of=/dev/sda obs=4M 

… Работал так, как я ожидал, без чтения (и намного быстрее).

Я точно не знаю, почему dd читает с диска, но файловая система не задействована, поэтому я предполагаю, что это связано с различными размерами блоков.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .