Jak sprawdzić wydajność dysku twardego (albo przez terminal, albo GUI). Szybkość zapisu. Szybkość odczytu Rozmiar i szybkość pamięci podręcznej. Losowa prędkość.
Jak sprawdzić wydajność dysku twardego (albo przez terminal, albo GUI). Szybkość zapisu. Szybkość odczytu Rozmiar i szybkość pamięci podręcznej. Losowa prędkość.
Odpowiedzi:
hdparm
jest dobrym miejscem do rozpoczęcia.
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
poda również informacje.
dd
poda informacje o prędkości zapisu.
Jeśli dysk nie ma systemu plików (i tylko wtedy ), użyj of=/dev/sda
.
W przeciwnym razie zamontuj go na / tmp i napisz, a następnie usuń testowy plik wyjściowy.
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
Czy chcesz czegoś więcej?
/dev/urandom
a także /dev/zero
dane wejściowe do dd
testowania dysku SSD, ponieważ kompresja danych może mieć ogromny wpływ na szybkość zapisu.
/tmp
plików często używa ramdysku. Więc pisanie do /tmp
wydaje się testować pamięć, a nie podsystem dyskowy.
Suominen ma rację, powinniśmy użyć pewnego rodzaju synchronizacji; ale istnieje prostsza metoda, conv = fdatasync wykona zadanie:
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
Nie zalecałbym używania, /dev/urandom
ponieważ jest oparty na oprogramowaniu i powolny jak świnia. Lepiej wziąć część losowych danych na ramdysku. Na dysku twardym testowanie losowe nie ma znaczenia, ponieważ każdy bajt jest zapisywany tak, jak jest (również na ssd z dd). Ale jeśli przetestujemy deduplikowaną pulę ZFS przy użyciu czystego zera lub danych losowych, istnieje ogromna różnica wydajności.
Innym punktem widzenia musi być uwzględnienie czasu synchronizacji; wszystkie nowoczesne systemy plików używają buforowania podczas operacji na plikach.
Aby naprawdę zmierzyć szybkość dysku, a nie pamięć, musimy zsynchronizować system plików, aby pozbyć się efektu buforowania. Można to łatwo zrobić:
time sh -c "dd if=/dev/zero of=testfile bs=100k count=1k && sync"
tą metodą otrzymujesz dane wyjściowe:
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
więc dane na dysku wynoszą tylko 104857600 / 0,441 = 237772335 B / s -> 237 MB / s
To ponad 100 MB / s mniej niż w przypadku buforowania.
Szczęśliwego testu porównawczego,
Jeśli chcesz monitorować prędkość odczytu i zapisu dysku w czasie rzeczywistym, możesz użyć narzędzia iotop .
Jest to przydatne, aby uzyskać dokładne informacje o wydajności dysku dla określonej aplikacji lub zadania. Dane wyjściowe pokażą Ci szybkość odczytu / zapisu na proces oraz całkowitą prędkość odczytu / zapisu dla serwera, bardzo podobną do top
.
Aby zainstalować iotop:
sudo apt-get install iotop
Aby uruchomić:
sudo iotop
Jeśli chcesz dokładności, powinieneś użyć fio
. Wymaga przeczytania instrukcji ( man fio
), ale da dokładne wyniki. Pamiętaj, że dla dowolnej dokładności musisz dokładnie określić, co chcesz zmierzyć. Kilka przykładów:
Sekwencyjna prędkość odczytu z dużymi blokami (powinna być zbliżona do liczby podanej w specyfikacjach napędu):
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
Sekwencyjna prędkość zapisu z dużymi blokami (powinna być zbliżona do liczby podanej w specyfikacjach napędu):
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
Losowy odczyt 4K QD1 (jest to liczba, która naprawdę ma znaczenie dla rzeczywistej wydajności, chyba że wiesz na pewno):
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
Mieszane losowe odczytywanie i zapisywanie QD1 4K z synchronizacją (jest to najgorszy numer, jakiego można się spodziewać po dysku, zwykle mniej niż 1% liczb wymienionych w specyfikacji):
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
Zwiększ --size
argument, aby zwiększyć rozmiar pliku. Korzystanie z większych plików może zmniejszyć liczbę otrzymywanych danych w zależności od technologii napędu i oprogramowania układowego. Małe pliki dadzą „zbyt dobre” wyniki dla nośników rotacyjnych, ponieważ głowica odczytu nie musi się tak bardzo ruszać. Jeśli Twoje urządzenie jest prawie puste, użycie pliku wystarczająco dużego, aby prawie zapełnić dysk, zapewni najgorsze zachowanie przy każdym teście. W przypadku dysku SSD rozmiar pliku nie ma tak dużego znaczenia.
Należy jednak pamiętać, że w przypadku niektórych nośników pamięci rozmiar pliku nie jest tak ważny, jak całkowita liczba bajtów zapisanych w krótkim okresie czasu. Na przykład niektóre dyski SSD mogą mieć znacznie wyższą wydajność z wstępnie usuniętymi blokami lub mogą mieć mały obszar pamięci flash SLC, który jest używany jako pamięć podręczna zapisu, a wydajność zmienia się po zapełnieniu pamięci podręcznej SLC. Jako kolejny przykład dyski twarde SMR Seagate mają około 20 GB pamięci podręcznej PMR, która ma dość wysoką wydajność, ale gdy się zapełni, pisanie bezpośrednio do obszaru SMR może obniżyć wydajność do 10% w stosunku do oryginału. A jedynym sposobem na zobaczenie tego spadku wydajności jest jak najszybsze zapisanie ponad 20 GB. Oczywiście wszystko to zależy od obciążenia: jeśli dostęp do zapisu jest obciążony dużymi opóźnieniami, które pozwalają urządzeniu wyczyścić pamięć podręczną, krótsze sekwencje testowe lepiej odzwierciedlą Twoją rzeczywistą wydajność. Jeśli musisz zrobić dużo IO, musisz zwiększyć oba--io_size
i --runtime
parametry. Należy pamiętać, że niektóre media (np. Większość urządzeń flash) ulegną dodatkowemu zużyciu podczas takich testów. Moim zdaniem, jeśli jakieś urządzenie jest wystarczająco słabe, aby nie poradzić sobie z tego rodzaju testowaniem, w żadnym wypadku nie powinno być używane do przechowywania cennych danych.
Ponadto niektóre wysokiej jakości urządzenia SSD mogą mieć jeszcze bardziej inteligentne algorytmy wyrównywania zużycia, w których wewnętrzna pamięć podręczna SLC ma wystarczającą liczbę inteligentnych danych, aby zastąpić dane, które są ponownie zapisywane podczas testu, jeśli trafią w tę samą przestrzeń adresową (to znaczy plik testowy jest mniejsza niż całkowita pamięć podręczna SLC). W przypadku takich urządzeń rozmiar pliku zaczyna znów mieć znaczenie. Jeśli potrzebujesz rzeczywistego obciążenia, najlepiej przetestować z rozmiarami plików, które zobaczysz w rzeczywistości. W przeciwnym razie Twoje liczby mogą wyglądać zbyt dobrze.
Uwaga: fio
przy pierwszym uruchomieniu utworzy wymagany plik tymczasowy. Zostaną wypełnione losowymi danymi, aby uniknąć uzyskiwania zbyt dobrych liczb z urządzeń, które oszukują, kompresując dane przed zapisaniem ich w pamięci trwałej. Plik tymczasowy zostanie wywołany fio-tempfile.dat
w powyższych przykładach i zapisany w bieżącym katalogu roboczym. Dlatego najpierw należy przejść do katalogu zamontowanego na urządzeniu, które chcesz przetestować.
Jeśli masz dobry dysk SSD i chcesz zobaczyć jeszcze wyższe liczby, zwiększ --numjobs
powyżej. To określa współbieżność odczytów i zapisów. Wszystkie powyższe przykłady zostały numjobs
ustawione na, 1
więc test dotyczy odczytu i zapisu procesu jednowątkowego (być może z zestawem kolejek z iodepth
). Dyski SSD klasy wyższej (np. Intel Optane) powinny uzyskiwać wysokie liczby, nawet bez numjobs
znacznego wzrostu (np. 4
Powinny wystarczyć, aby uzyskać najwyższe liczby specyfikacji), ale niektóre dyski SSD „Enterprise” wymagają 32
- 128
aby uzyskać numery specyfikacji, ponieważ ich wewnętrzne opóźnienie urządzenia są wyższe, ale ogólna przepustowość jest szalona.
max_sectors_kb
. Zmieniłem powyższe przykładowe polecenia, aby użyć rozmiaru bloku 1 MB, ponieważ wydaje się, że działa to na sprzęcie ze świata rzeczywistego. Testowałem też, że fsync
nie ma to znaczenia przy czytaniu.
iodepth
się 1
na swobodnym dostępie dokładnie ponieważ programy prawdziwym świecie często uruchamiać algorytmy / logiki, który nie działa z głębi każdy wyższy niż 1. W rezultacie, jeśli taka głębokość jest „zbyt niskie” urządzenie I / O jest źle. Prawdą jest, że niektóre urządzenia SSD skorzystają z głębokości większej niż 32. Czy możesz jednak wskazać na obciążenie pracą w świecie rzeczywistym, które wymaga dostępu do odczytu i jest w stanie utrzymać jododth większy niż 32? TL; DR: jeśli chcesz odtworzyć niesamowicie wysoką liczbę odczytów testu porównawczego z urządzeniem o dużym opóźnieniu, użyj, iodepth=256 --numjobs=4
ale nigdy nie oczekuj, że zobaczysz takie liczby w rzeczywistości.
bonnie ++ to najlepsze narzędzie testowe, jakie znam dla systemu Linux.
(Obecnie przygotowuję plik Linux na żywo w pracy z bonnie ++ na nim, aby przetestować na nim naszą maszynę z systemem Windows!)
Zajmuje się buforowaniem, synchronizacją, losowymi danymi, losową lokalizacją na dysku, małymi rozmiarami aktualizacji, dużymi aktualizacjami, odczytami, zapisami itp. Porównywanie klucza usb, dysku twardego (obrotowego), dysku SSD i napędu RAM system plików może być bardzo pouczający dla początkującego.
Nie mam pojęcia, czy jest zawarty w Ubuntu, ale możesz go łatwo skompilować ze źródła.
Szybkość pisania
$ 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
Rozmiar bloku jest w rzeczywistości dość duży. Możesz spróbować z mniejszymi rozmiarami, takimi jak 64k, a nawet 4k.
Czytaj prędkość
Uruchom następujące polecenie, aby wyczyścić pamięć podręczną
$ sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"
Teraz przeczytaj plik, który został utworzony w teście zapisu:
$ 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
kilka wskazówek, jak korzystać z 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
Trochę więcej na: SIMPLE BONNIE ++ PRZYKŁAD .
Sprawdzaj integralność, wykrywaj fałszywe dyski flash i testuj wydajność - wszystkie trzy za jednym razem.
Więcej na temat tej odpowiedzi .