Як перевірити працездатність жорсткого диска


336

Як перевірити працездатність жорсткого диска (або через термінал, або GUI). Швидкість запису. Швидкість читання. Розмір та швидкість кешу Випадкова швидкість.


1
Подібне питання було поставлене більш на unix.stackexchange.com/questions/108838 / ... , stackoverflow.com/questions/1198691 / ... і serverfault.com/questions/219739 / ... .
Анон

Відповіді:


425

Термінальний метод

hdparm це гарне місце для початку.

sudo hdparm -Tt /dev/sda

/dev/sda:
Timing cached reads:   12540 MB in  2.00 seconds = 6277.67 MB/sec
Timing buffered disk reads: 234 MB in  3.00 seconds =  77.98 MB/sec

sudo hdparm -v /dev/sda також дасть інформацію.

dd дасть вам інформацію про швидкість запису.

Якщо на диску немає файлової системи (і тільки тоді ), використовуйте of=/dev/sda.

В іншому випадку встановіть його на / tmp і запишіть, а потім видаліть тестовий вихідний файл.

dd if=/dev/zero of=/tmp/output bs=8k count=10k; rm -f /tmp/output

10240+0 records in
10240+0 records out
83886080 bytes (84 MB) copied, 1.08009 s, 77.7 MB/s

Графічний метод

  1. Перейдіть до системи -> Адміністрація -> Утиліта диска.
    • Крім того, запустіть утиліту диска Gnome з командного рядка запуском gnome-disks
  2. Виберіть жорсткий диск на лівій панелі.
  3. Тепер натисніть кнопку «Бенчмарк - Виміряйте продуктивність диска» на правій панелі.
  4. Відкриється нове вікно з діаграмами. Ви знайдете і дві кнопки. Один призначений для "Почати лише тестування для читання", а інший - "Почати тест читання / запис". При натисканні на будь-яку кнопку вона починає тестування жорсткого диска.

тест

Як орієнтувати дискові введення / виведення

Стаття

Ви хочете щось більше?


10
Я рекомендую тестування /dev/urandom, а також /dev/zeroвведення даних ddпри тестуванні SSD, оскільки стисливість даних може мати величезний вплив на швидкість запису.
Іван Макіннон

3
У моїй Ubuntu 12.04 Unity такої "Системи ->" немає. Або принаймні я цього не знайшов. І я не бачу цього дискового інструменту ні в Налаштуваннях системи ... O_o Але мені остаточно вдалося запустити його: / usr / bin / palimpsest
Fran Marzoa

6
Зауважте, що з 12.10 його називають просто дисками, і його можна знайти через Unity.
Пол Ламмерцма

1
У Gnome це переміщено до Програми -> Системні інструменти -> Налаштування -> Утиліта диска. Для тих, хто корисний, хто ненавидить Єдність.
Кен Шарп

2
Ця /tmpфайлова система часто використовує рамбдиск. Таким чином, написання на /tmp, здавалося б, перевіряє вашу пам'ять, а не вашу підсистему диска.
Зоредаче

99

Suominen має рацію, ми повинні використовувати якусь синхронізацію; але є більш простий метод, conv = fdatasync зробить роботу:

dd if=/dev/zero of=/tmp/output conv=fdatasync bs=384k count=1k; rm -f /tmp/output
1024+0records in
1024+0 records out
402653184 bytes (403 MB) copied, 3.19232 s, 126 MB/s

28
Це відповідь, використовуючи іншу команду / варіант, ніж інші. Я бачу, що це відповідь, гідна посади.
Алаа Алі

2
Чому ви використовували 384k як розмір блоку?
Дієго Ф. Дуран

1
@Diego Причин немає. Це був лише приклад. Ви можете використовувати будь-що інше. (приблизно від 4 к ... 1 млн.) Звичайно більший розмір дасть кращі показники. І, звичайно, зменшіть кількість підрахунків, коли ви використовуєте великі Bs, або на це піде рік.
Tele

це не є надійним за допомогою інструментів для позначення на стенді, таких як іозон та sysbench, цифри набагато нижчі
MSS

1
Будьте обережні, використовуючи нулі для своїх даних запису - деякі файлові системи та диски матимуть спеціальний шлях до неї (та інші стисливі дані), що спричинить штучно високі показники ...
Anon,

50

Я б не рекомендував використовувати, /dev/urandomоскільки це програмне забезпечення та повільне, як свиня. Краще взяти шматок випадкових даних на ramdisk. Для тестування на жорсткому диску випадкове значення не має, оскільки кожен байт записаний так, як є (також на ssd з dd). Але якщо ми перевіримо вичерпаний пул zfs з чистими нулями або випадковими даними, існує величезна різниця в продуктивності.

Іншою точкою зору має бути включення часу синхронізації; всі сучасні файлові системи використовують кешування файлових операцій.

Щоб дійсно виміряти швидкість диска, а не пам'ять, ми повинні синхронізувати файлову систему, щоб позбутися ефекту кешування. Це легко зробити:

time sh -c "dd if=/dev/zero of=testfile bs=100k count=1k && sync"

за допомогою цього методу ви отримуєте вихід:

sync ; time sh -c "dd if=/dev/zero of=testfile bs=100k count=1k  && sync" ; rm testfile 
1024+0 records in
1024+0 records out
104857600 bytes (105 MB) copied, 0.270684 s, 387 MB/s

real    0m0.441s
user    0m0.004s
sys 0m0.124s

тож дискретний обсяг диска складає всього 104857600 / 0,441 = 237772335 Б / с -> 237 МБ / с

Це на 100 Мб / с нижче, ніж при кешуванні.

Щасливого тестування,


3
Будьте обережні, використовуючи нулі для запису даних - деякі диски (наприклад, SSD) та деякі файлові системи матимуть спеціальний шлях для цього. Це призводить до штучно високих контрольних цифр при використанні нульових буферів. Інші дуже стислі схеми даних також можуть спотворювати результати ...
Anon,

36

Якщо ви хочете контролювати швидкість читання та запису диска в режимі реального часу, ви можете скористатися інструментом iotop .

Це корисно для отримання точної інформації про те, як працює диск для певного додатка чи завдання. Вихідні дані покажуть швидкість читання / запису за процес, а також загальну швидкість читання / запису для сервера, майже подібну до top.

Щоб встановити iotop:

sudo apt-get install iotop  

Щоб запустити його:

sudo iotop

28

Якщо ви хочете точності, вам слід скористатися fio. Для цього потрібно прочитати посібник ( man fio), але він дасть точні результати. Зауважте, що для будь-якої точності вам потрібно точно вказати, що ви хочете виміряти. Деякі приклади:

Послідовна швидкість читання з великими блоками (це має бути поряд із числом, яке ви бачите в специфікаціях для вашого приводу):

fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=read --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting

Послідовна WRITE швидкість з великими блоками (це має бути поряд із числом, яке ви бачите в специфікаціях для вашого приводу):

fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=write --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting

Випадкове 4K зчитування QD1 (це число, яке дійсно має значення для роботи в реальному світі, якщо ви точно не знаєте краще):

fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting

Змішаний випадковий 4K режим читання та запису QD1 із синхронізацією (це найгірший випадок, який ви коли-небудь повинні очікувати від свого накопичувача, як правило, менше 1% номерів, наведених у специфікації):

fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randrw --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting

Збільшити --sizeаргумент для збільшення розміру файлу. Використання великих файлів може зменшити кількість отриманих номерів залежно від технології накопичувача та прошивки. Невеликі файли даватимуть "надто хороші" результати для обертових носіїв, оскільки прочитана головка не повинна так сильно рухатись. Якщо ваш пристрій майже порожній, використання файлу, достатнього для майже заповнення накопичувача, призведе до найгіршої поведінки для кожного тесту. У випадку SSD розмір файлу не має великого значення.

Однак зауважте, що для деяких носіїв пам’яті розмір файлу не такий важливий, як загальний байт, записаний за короткий проміжок часу. Наприклад, деякі SSD-диски можуть мати значно більшу продуктивність із попередньо стертими блоками або може мати невелику область спалаху SLC, яка використовується як кеш запису, а продуктивність змінюється, коли кеш SLC заповнений. Як інший приклад, жорсткі диски Seagate SMR мають близько 20 ГБ кеш-пам’яті PMR, які мають досить високу продуктивність, але як тільки він буде повноцінним, запис безпосередньо в область SMR може знизити продуктивність до 10% від оригіналу. І єдиний спосіб побачити цю деградацію продуктивності - спочатку записати 20+ ГБ якомога швидше. Звичайно, все це залежить від вашої завантаженості: якщо ваш запис записується із тривалими затримками, які дозволяють пристрою очистити внутрішній кеш, короткі тестові послідовності краще відображатимуть ваші реальні показники. Якщо вам потрібно зробити багато IO, вам потрібно збільшити обидва--io_sizeта --runtimeпараметри. Зауважте, що деякі носії (наприклад, більшість флеш-пристроїв) отримають додатковий знос від таких тестів. На мою думку, якщо будь-який пристрій недостатньо поганий, щоб не обробляти подібні випробування, він не повинен використовуватися для зберігання цінних даних у будь-якому випадку.

Крім того, деякі високоякісні пристрої SSD можуть мати ще більш інтелектуальні алгоритми вирівнювання зносу, коли внутрішній кеш SLC має достатньо розумних місць для заміни даних на місці, які переписуються під час тесту, якщо вони потрапляють у той же адресний простір (тобто тестовий файл менше, ніж загальний кеш SLC). Для таких пристроїв розмір файлу знову починає мати значення. Якщо вам потрібна ваша фактична завантаженість, краще протестувати розміри файлів, які ви дійсно побачите в реальному житті. Інакше ваші номери можуть виглядати занадто добре.

Зверніть увагу, що fioстворити необхідний тимчасовий файл під час першого запуску. Він буде заповнений випадковими даними, щоб уникнути отримання надто хороших номерів із пристроїв, які обманюють, стискаючи дані перед тим, як записати їх у постійне зберігання. Тимчасовий файл буде викликаний fio-tempfile.datу вищенаведених прикладах та зберігається у поточній робочій директорії. Тому спочатку слід змінити каталог, який встановлений на пристрої, який ви хочете протестувати.

Якщо у вас хороший SSD і хочете побачити ще більші числа, збільште --numjobsвище. Це визначає паралельність читання і запису. Наведені вище приклади numjobsналаштовані 1так, що тест стосується читання та запису однопотокового процесу (можливо, із встановленою чергою iodepth). Високий кінець твердотільних накопичувачів (наприклад , Intel Optane) повинні отримати велике число навіть без збільшення numjobsбагато (наприклад , 4має бути достатньо , щоб отримати найбільшу кількість специфікації) , а деякі «Enterprise» SSD - накопичувачі вимагають збирається 32- 128щоб отримати номери специфікації , так як внутрішня затримка тих пристроїв вище, але загальна пропускна здатність божевільна.


1
Я просто повторно перевірив деякі пристрої. Використовуючи вище тест послідовного читання (розмір блоку 2 Мб), я отримав 280 Мб / с від Samsung SSD 850 EVO та 1070 МБ / с від Intel 910 SSD. З розміром блоку 64k та ідентичним командним рядком я отримав 268 Мб / с від 850 EVO та 1055 Мб / с від 910 SSD. Принаймні, для подібних пристроїв використання розміру блоку 2 Мб, схоже, покращує результати на 1-5%, хоча це призводить до того, що ядро ​​розділяє запити на обладнання. Я думаю, що навіть при оптимізації ядра, накладні витрати для подання більше системних викликів гірші, ніж розщеплення всередині ядра.
Мікко Ранталайнен

1
Після подальшого тестування здається, що я отримую найвищу послідовну пропускну здатність, використовуючи потужність 2 значення, меншу max_sectors_kb. Я змінив наведені вище приклади команд, щоб використовувати розмір блоку 1 Мб, оскільки це, здається, працює з апаратним забезпеченням реального світу. І я також перевірив, що fsyncдля читання не має значення.
Мікко Ранталайнен

1
Залежно від способу підключення накопичувача, ви можете виявити, що ваш йодепт був занадто низьким. Вам слід було б спостерігати, що насправді Linux надсилає на пристрій і на яку глибину він це робить ...
Anon,

1
Я налаштований iodepthна 1випадковий доступ саме тому, що програми реального світу часто виконують алгоритми / логіку, яка не працює з глибиною не більше 1. В результаті, якщо така глибина "занадто низька", ваш пристрій вводу / виводу поганий. Це правда, що деякі пристрої SSD отримають користь від глибини, що перевищує 32. Однак чи можете ви вказати на будь-яку реальну робочу навантаження, яка потребує доступу для читання та здатна підтримувати iodepth вище 32? TL; ДР: якщо ви хочете відтворити якийсь шалено високий номер еталонного читання з пристроєм з високою затримкою, використовуйте, iodepth=256 --numjobs=4але ніколи не сподівайтесь побачити такі цифри справжніми.
Мікко Ранталайнен

1
Більшість програм "реального світу" насправді не подають введення-виведення (o_) безпосередньо, а не асинхронно, тому всі наші приклади знаходяться в незвичних робочих навантаженнях, щоб підняти територію граничного орієнтиру (як то кажуть, найкращим орієнтиром є ваша реальна завантаженість). Сказавши, що виконуючи такі дії, як запуск декількох зайнятих віртуальних машин, можна легко генерувати навантаження з божевільною глибиною, але там, де введення / виведення часто виглядає випадковим з точки зору диска, і це простий приклад, де можна побачити величезну швидкість роботи з таких речей NVMe. PS: якщо занадто високе встановлення чисел зменшить пропускну здатність, щоб з’явилося солодке місце ...
Anon

25

bonnie ++ - це найвища корисна утиліта, яку я знаю для Linux.

(Я зараз готую Livecd Linux на роботі з bonnie ++ на ньому для тестування нашої машини на базі Windows!)

Він піклується про кешування, синхронізацію, випадкові дані, випадкове розташування на диску, оновлення невеликого розміру, великі оновлення, читання, запис тощо. Порівняння usbkey, жорсткого диска (поворотного), твердотільного накопичувача та операційної системи файлова система може бути дуже інформативною для новачків.

Я поняття не маю, чи він включений в Ubuntu, але ви можете легко скласти його з джерела.

http://www.coker.com.au/bonnie++/


Бонні недосконала в порівнянні з дисками і може легко генерувати цифри, які насправді відображають недискові аспекти вашої системи, тому потрібен високий ступінь уважності, якщо ви вирішили використовувати її. Докладні відомості див. У розділі «Активний бенчмаркінг» Брендана Грегга: Бонні ++ .
Анон

22

Швидкість запису

$ dd if=/dev/zero of=./largefile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 4.82364 s, 223 MB/s

Розмір блоку насправді досить великий. Ви можете спробувати з меншими розмірами, такими як 64k або навіть 4k.


Швидкість читання

Виконайте наступну команду, щоб очистити кеш пам'яті

$ sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"

Тепер прочитайте файл, створений у тесті на запис:

$ dd if=./largefile of=/dev/null bs=4k
165118+0 records in
165118+0 records out
676323328 bytes (676 MB) copied, 3.0114 s, 225 MB/s

Будьте обережні, використовуючи нулі для запису даних - деякі файлові системи та диски матимуть спеціальний шлях до неї (та інші дані, що стискаються), що спричинить штучно високі показники ...
Anon,

14

деякі підказки щодо використання bonnie ++

bonnie++ -d [TEST_LOCATION] -s [TEST_SIZE] -n 0 -m [TEST_NAME] -f -b -u [TEST_USER] 
bonnie++ -d /tmp -s 4G -n 0 -m TEST -f -b -u james

Трохи більше за адресою: ПРОСТИЙ БОННІ ++ ПРИКЛАД .


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.