Як перевірити працездатність жорсткого диска (або через термінал, або GUI). Швидкість запису. Швидкість читання. Розмір та швидкість кешу Випадкова швидкість.
Як перевірити працездатність жорсткого диска (або через термінал, або GUI). Швидкість запису. Швидкість читання. Розмір та швидкість кешу Випадкова швидкість.
Відповіді:
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
gnome-disks
Ви хочете щось більше?
/dev/urandom
, а також /dev/zero
введення даних dd
при тестуванні SSD, оскільки стисливість даних може мати величезний вплив на швидкість запису.
/tmp
файлова система часто використовує рамбдиск. Таким чином, написання на /tmp
, здавалося б, перевіряє вашу пам'ять, а не вашу підсистему диска.
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
Я б не рекомендував використовувати, /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 Мб / с нижче, ніж при кешуванні.
Щасливого тестування,
Якщо ви хочете контролювати швидкість читання та запису диска в режимі реального часу, ви можете скористатися інструментом iotop .
Це корисно для отримання точної інформації про те, як працює диск для певного додатка чи завдання. Вихідні дані покажуть швидкість читання / запису за процес, а також загальну швидкість читання / запису для сервера, майже подібну до top
.
Щоб встановити iotop:
sudo apt-get install iotop
Щоб запустити його:
sudo iotop
Якщо ви хочете точності, вам слід скористатися 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
щоб отримати номери специфікації , так як внутрішня затримка тих пристроїв вище, але загальна пропускна здатність божевільна.
max_sectors_kb
. Я змінив наведені вище приклади команд, щоб використовувати розмір блоку 1 Мб, оскільки це, здається, працює з апаратним забезпеченням реального світу. І я також перевірив, що fsync
для читання не має значення.
iodepth
на 1
випадковий доступ саме тому, що програми реального світу часто виконують алгоритми / логіку, яка не працює з глибиною не більше 1. В результаті, якщо така глибина "занадто низька", ваш пристрій вводу / виводу поганий. Це правда, що деякі пристрої SSD отримають користь від глибини, що перевищує 32. Однак чи можете ви вказати на будь-яку реальну робочу навантаження, яка потребує доступу для читання та здатна підтримувати iodepth вище 32? TL; ДР: якщо ви хочете відтворити якийсь шалено високий номер еталонного читання з пристроєм з високою затримкою, використовуйте, iodepth=256 --numjobs=4
але ніколи не сподівайтесь побачити такі цифри справжніми.
bonnie ++ - це найвища корисна утиліта, яку я знаю для Linux.
(Я зараз готую Livecd Linux на роботі з bonnie ++ на ньому для тестування нашої машини на базі Windows!)
Він піклується про кешування, синхронізацію, випадкові дані, випадкове розташування на диску, оновлення невеликого розміру, великі оновлення, читання, запис тощо. Порівняння usbkey, жорсткого диска (поворотного), твердотільного накопичувача та операційної системи файлова система може бути дуже інформативною для новачків.
Я поняття не маю, чи він включений в Ubuntu, але ви можете легко скласти його з джерела.
Швидкість запису
$ 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
деякі підказки щодо використання 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
Трохи більше за адресою: ПРОСТИЙ БОННІ ++ ПРИКЛАД .
Перевірте цілісність, виявіть фальшиві флеш-пам’ятники та перевіряйте продуктивність, усі три в одному знімку.
Детальніше про цю відповідь .