Як протестувати швидкість читання

Команда dd дозволяє заміряти швидкість послідовного читання / запису.

Для читання більш достовірний результат дає пряме читання без участі системного кеша в режимі iflag = direct:

Для точності вимірювань при записі важливо дочекатися її закінчення а не приміщення виведення в кеш. Кращий результат дає режим conv = fdatasync. Режим oflag = direct зазвичай дає результат гірше і він далі від можливого реального використання. УВАГА! Наведені нижче команда приведе до втрати даних на пристрої / dev / sdb

Деякі диски можуть працювати повільніше з випадковими даними ніж з нулями. Використовувати / dev / urandom і тим більше / dev / random безпосередньо замість / dev / zero не можна, так як вони вимагають багато обчислень і гальмують процес. Тому потрібно спочатку підготувати файл з даними (краще на tmpfs).

Як бачите, якби ми безпосередньо копіювали / dev / urandom в / dev / sdb, ми б отримали швидкість обчислень псевдовипадкових чисел, а не швидкість запису. Тепер перевіряємо із заготовленими даними. УВАГА! Наведені нижче команда приведе до втрати даних на пристрої / dev / sdb

Отримав той же результат. Значить швидкість мого пристрою не залежить від даних.

Команда fio робить багато різних варіантів тестів, але результати виводяться в не дуже зручному форматі, хоча там дуже багато різних подробиць. Для отримання залежності швидкості від розміру блоку написав наступний скрипт (diskspeed.sh), сподіваюся він буде корисний:

Приклади запуску скрипта з sd-картою

Лінійне читання з пропусками по 4Мб:

Дані зберігаються в каталозі ім'я_пристрою-метод_чтенія, і їх можна профільтрувати як-небудь ще.

PS. Із записом щось мені результати не дуже подобаються: сильно змінюються при повторному запуску і набагато менше, ніж dd conv = fdatasync навіть з великими блоками.

Схожі статті