Время от времени хочется оценить производительность дисковой подсистемы, ну или диска или флешки… В Linux это можно сделать встроенными средствами имеющимися практически в каждой системе.
И эту заметку делаю для того чтобы самому же запомнить страшные заклинания 🙂
Пишу из Debian Stretch — 4х летней давности… Думаю большинство свежих систем будет себя так же вести.
Втыкиваем QUMO MisroSD 16Gb через переходник на USB в USB3 разъем…
#df -h
/dev/sdh1 15G 32K 15G 1% /media/n0mad/QUMO 16GB
#cd /media/n0mad/QUMO\ 16GB/
Это заклинание нужно в то время — когда надо сбросить кэш диска для произведения более точных измерений
#blockdev —flushbufs /dev/sdh
Записываем гигабайт нулей, предварительно с помощью команды #sync сбросив буфера на диски… И после записи сбросив буфера…
#sync;dd if=/dev/zero of=1Gb.dat bs=1M count=1024;sync
1073741824 байт (1,1 GB, 1,0 GiB) скопирован, 102,494 s, 10,5 MB/s
Теперь прочитаем только что записанное:
#dd if=1Gb.dat of=/dev/null bs=1M
1024+0 записей получено
1024+0 записей отправлено
1073741824 байт (1,1 GB, 1,0 GiB) скопирован, 50,5288 s, 21,3 MB/s
Чистим кэш (работало на соседнем ноутбуке с Debian Buster)
#blockdev —flushbufs /dev/sdh
Повторяем:
#dd if=1Gb.dat of=/dev/null bs=1M
1024+0 записей получено
1024+0 записей отправлено
1073741824 байт (1,1 GB, 1,0 GiB) скопирован, 0,823453 s, 1,3 GB/s
Не прокатила чистка кэша… Пробуем по другому (так как не заработало на Debian Buster)
#echo 3 > /proc/sys/vm/drop_caches
#dd if=1Gb.dat of=/dev/null bs=1M
1024+0 записей получено
1024+0 записей отправлено
1073741824 байт (1,1 GB, 1,0 GiB) скопирован, 51,0394 s, 21,0 MB/s
Вот так уже заработало на этой версии Линукс. Так что вам надо будет проверить оба способа и найти рабочий на вашей системе.
В общем подсистема на USB 1.1 даёт (грубо) 10Gb/s записи и 20Gb/s чтения
Достаём флешку подревнее… 32Gb USB Transcend
#echo 3 > /proc/sys/vm/drop_cachesroot
# sync;dd if=/dev/zero of=1Gb.dat bs=1M count=100;sync
100+0 записей получено
100+0 записей отправлено
104857600 байт (105 MB, 100 MiB) скопирован, 23,5415 s, 4,5 MB/s
В 2 раза медленнее… Читаем:
#echo 3 > /proc/sys/vm/drop_caches
#sync;dd if=/dev/zero of=1Gb.dat bs=1M count=100;sync
100+0 записей получено
100+0 записей отправлено
104857600 байт (105 MB, 100 MiB) скопирован, 9,31012 s, 11,3 MB/s
Конечно в 1Gb.dat всего 100Mb, но результат похож на правду.
Момент ИСТИНЫ! Вставляю USB3 Флешку в USB3 разъём!!!
«Факир был пьян, и фокус не удался». Все 3 моих USB3 флешки — совсем никак не видятся USB3 адаптером… Хотя USB1 флешки там работают…
При этом Seagate Barracuda подключенный к соседнему разъёму на этом адаптере на xfs разделе даёт:
#echo 3 > /proc/sys/vm/drop_caches
#sync;dd if=/dev/zero of=1Gb.dat bs=1M count=100;sync
100+0 записей получено
100+0 записей отправлено
104857600 байт (105 MB, 100 MiB) скопирован, 0,468817 s, 224 MB/s
Теперь читаем:
#echo 3 > /proc/sys/vm/drop_caches
#dd if=1Gb.dat of=/dev/null bs=1M
100+0 записей получено
100+0 записей отправлено
104857600 байт (105 MB, 100 MiB) скопирован, 0,202801 s, 517 MB/s
Прочитали так же 100Mb потому что на 3Т Барракуде для бэкапа — закончилось место… Но видно производительность Барракуды подключенной по USB3
Тогда как локальная Тошиба 3Т даёт:
#echo 3 > /proc/sys/vm/drop_caches
#sync;dd if=/dev/zero of=1Gb.dat bs=M count=100;sync
100+0 записей получено
100+0 записей отправлено
104857600 байт (105 MB, 100 MiB) скопирован, 0,58603 s, 179 MB/s
Всего 179Mb/s и:
# echo 3 > /proc/sys/vm/drop_caches
#dd if=1Gb.dat of=/dev/null bs=1M
100+0 записей получено
100+0 записей отправлено
104857600 байт (105 MB, 100 MiB) скопирован, 0,184384 s, 569 MB/s
На чтение.
Для коллекции ещё и Seagate NAS3T:
#echo 3 > /proc/sys/vm/drop_caches
#sync;dd if=/dev/zero of=1Gb.dat bs=1M count=100;sync
100+0 записей получено
100+0 записей отправлено
104857600 байт (105 MB, 100 MiB) скопирован, 0,868901 s, 121 MB/s
Чуда не произошло — то-же самое…
# echo 3 > /proc/sys/vm/drop_caches
#dd if=1Gb.dat of=/dev/null bs=1M
100+0 записей получено
100+0 записей отправлено
104857600 байт (105 MB, 100 MiB) скопирован, 0,168027 s, 624 MB/s
Как и на Барракуде.
Но почему на USB3 такие цифры? Проверим? На тех же 100Mb
#echo 3 > /proc/sys/vm/drop_caches
#sync;dd if=/dev/zero of=1Gb.dat bs=1M count=100;sync
100+0 записей получено
100+0 записей отправлено
104857600 байт (105 MB, 100 MiB) скопирован, 0,402762 s, 260 MB/s
Результат повторяется, и так же в 2 раза выше локальных SATA HDD.
#echo 3 > /proc/sys/vm/drop_caches
#dd if=1Gb.dat of=/dev/null bs=1M
100+0 записей получено
100+0 записей отправлено
104857600 байт (105 MB, 100 MiB) скопирован, 0,195932 s, 535 MB/s
И в финале — USB1 HDD:
#echo 3 > /proc/sys/vm/drop_caches
#sync;dd if=/dev/zero of=1Gb.dat bs=1M count=100;sync
100+0 записей получено
100+0 записей отправлено
104857600 байт (105 MB, 100 MiB) скопирован, 0,327769 s, 320 MB/s
#echo 3 > /proc/sys/vm/drop_caches
#dd if=1Gb.dat of=/dev/null bs=1M
100+0 записей получено
100+0 записей отправлено
104857600 байт (105 MB, 100 MiB) скопирован, 0,226039 s, 464 MB/s
Странные результаты…
Пробуем почистить через: #blockdev —flushbufs /dev/sdg
Результат неизменный:
#dd if=1Gb.dat of=/dev/null bs=1M
100+0 записей получено
100+0 записей отправлено
104857600 байт (105 MB, 100 MiB) скопирован, 0,128242 s, 818 MB/s
Но это 100Mb, на этом диске есть гиг, проверим…
#blockdev —flushbufs /dev/sdg
#echo 3 > /proc/sys/vm/drop_caches
#sync;dd if=/dev/zero of=1Gb.dat bs=1M count=1024;sync
1024+0 записей получено
1024+0 записей отправлено
1073741824 байт (1,1 GB, 1,0 GiB) скопирован, 2,65259 s, 405 MB/s
Результат неизменный… USB диски работают гораздо быстрее штатных SATA дисков…
Ладно, тронем то что ещё не трогали… На USB1 диске есть системный ext4 раздел…
#dd if=/media/n0mad/I2T-Stretch64-ro/swap2G.dat of=/dev/null bs=1M
2048+0 записей получено
2048+0 записей отправлено
2147483648 байт (2,1 GB, 2,0 GiB) скопирован, 70,1365 s, 30,6 MB/s
Это уже более похоже на правду….
Вот как то так…

