Hogyan mérjük számítógépünk vagy szerverünk merevlemezeinek adatátviteli sebességét

botond küldte be 2019. 11. 14., cs - 13:04 időpontban

Tartalom

 

Bevezető

Otthoni számítógép vagy szerver építésénél lényeges szempont a gép merevlemezeinek az adatátviteli sebessége. Ha a gépben lévő meghajtók sebessége lassú, az erősen rontja az összteljesítményt, még ha a processzor és/vagy a RAM erősebb kategóriát is képvisel. Minden operációs rendszer használata esetén van lehetőség ennek mérésére, nincs ez másképp a Linux rendszerekben sem. Többféle módon is teszteljük HDD-nk sebességét, hogy átfogóbb képet kaphassunk eszközeink állapotáról.

 

 

Tesztalanyok

Ebben a leírásban az asztali gépemben lévő SSD, valamint ugyanebben a gépben lévő 1 TB-os hagyományos SATA2-es és a régi laptopomban lévő szintén SATA2-es winchesterek sebességeinek mérését fogom bemutatni.

Nálam ez a téma most úgy is aktuális a laptoppal kapcsolatban, mivel már régi, és a benne lévő egyetlen SATA2-es HDD-vel a gép eléggé lassú. A processzora még tűrhető, egy 2 GHz-s Intel Core2 Duo (T5870) van benne:

Processzor infó: Intel Core2 Duo cpu (t5870), 2 GHz

valamint 4 GB RAM. Az évek alatt rátelepített operációs rendszerek mindegyikénél azt tapasztaltam, hogy a CPU nincs teljesen kihasználva, a rendszer folyamatosan a merevlemezre vár. Bootoláskor vagy programok indításakor a HDD LED folyamatosan világít, miközben a CPU messze jár a csúcstól. Ebből következtethető, hogy a gépben a winchester a leggyengébb láncszem, ezért megérett a cserére. Viszont előtte még kíváncsiságból elvégzem a sebességtesztjét, hogy majd össze tudjam hasonlítani az újjal. A laptopon jelenleg egy Debian 10 (Buster) rendszer van, LXQT asztallal, amit nemrég telepítettem fel.

Mivel ebben még csak SATA2-es interfész van, ezért egy SSD meghajtó sebességét nem tudná teljesen kihasználni. Így egyelőre beszereztem egy kb. 1 éves 512GB-os Toshiba HDD-t, aminek a sebességhatára még bőven belefér a SATA2 szabványba. Bár ha belegondolunk, lehet hogy mégis jobb lenne inkább egy nem a max sebességén működő SSD, mint egy hagyományos háttértár, de ez majd még alakul...

A SATA (1-3) szabványok sebességei egyébként az alábbiak:

  • SATA 1.0 => 1.5 Gbit/s, kb. 150 MB/s
  • SATA 2.0 => 3 Gbit/s, kb. 300 MB/s
  • SATA 3.0 => 6 Gbit/s, kb. 600 MB/s

 

Hasznos hardveradatok kiolvasása

SATA interfész felderítése

Első körben nem árt, ha ki tudjuk deríteni, hogy a számítógépünkben melyik verziójú SATA interfész áll rendelkezésre, hogy tudjuk mire számíthatunk a maximális sebességeket illetően. Persze egy mai, korszerű számítógép esetében ez már nem olyan lényeges, ahol már a SATA Express-eknél járunk, de egy régebbi gépnél fontos tényező, mint például a laptopom esetében is.

Ennek lekérdezéséhez rootként futtassuk a dmesg parancsot a megfelelő szűréssel:

dmesg | grep -i sata | grep 'link up'

A parancs nálam az asztali gépen a következő kimenetet adja:

SATA ellenőrzés 1.

Itt látható, hogy rendelkezésre áll a 6 Gbps SATA3 csatlakozás, valamint a régebbi szabványokkal is kompatibilis, tehát ebben a gépben egy mai merevlemez maximális adatátvitele körülbelül 600 Mb/s lehet.

A laptopban ugyanez a parancs a következőt adja:

SATA ellenőrzés 2.

Itt pedig csak a SATA 2-es szabványát lehet használni, amitől nem várhatunk többet, mint kb 300 Mb/s-es maximális átvitel.

Merevlemez adatok kiolvasása

Még érdemes kiolvasni a mérni kívánt merevlemez egyéb adatait is, hátha találunk közöttük hasznos információkat. Ehhez root-ként telepítsük a smartmontools csomagot:

apt-get install smartmontools

A csomag tartalmazza a számunkra szükséges smartctl parancsot is, amivel kiolvashatjuk a háttértáraink pontos adatait.

Ha a gépben több tárolóeszköz is található, akkor az lsblk paranccsal kérdezhetjük le azoknak az eléréseit.

lsblk

Majd a megfelelő blokk eszköz adatainak lekéréséhez futtassuk a smartctl parancsot, például:

smartctl -i /dev/sda

Ez a laptopom egyetlen merevlemeze, a fenti parancsok ezt a kimenetet adja rá:

HDD adatok lekérdezése

És így lekérdezhetjük az összes meghajtónkat, amivel még több információhoz juthatunk a SATA eszközeinket illetően.

Most, hogy már tisztában vagyunk a gépünkben lévő SATA portok verziójával és a merevlemezeink részletes adataival, neki is állhatunk a méréseknek.

 

 

HDD sebességtesztek többféle módon

A Linux rendszerben számos mód létezik arra, hogy megmérjük a gépünkben vagy szerverünkben lévő merevlemezek sebességét. Ebben a részben átnézünk néhányat ezek közül.

Mérés a dd parancs segítségével

Első, és talán a legkézenfekvőbb megoldás a dd linux parancs használata, ami erre a célra is kiválóan alkalmas. A parancs az alaprendszer része, így nem kell telepítenünk hozzá semmit, egyből használhatjuk.

Írási tesztek

Először az írási sebességet mérjük úgy, hogy a cél helyen létrehozunk egy fájlt, és feltöltjük null karakterekkel. Ha a gépben több merevlemez is van, akkor az lsblk paranccsal keressük meg a mérni kívánt eszköz csatolási pontját, hogy a megfelelő helyen történjen a fájl írása:

lsblk

Példa kimenet nálam az asztalin:

lsblk parancs példa kimenete

Itt az sda eszköz az SSD meghajtó, ami a gyökér fájlrendszerbe van csatlakoztatva, így tehát a /tmp könyvtár nálam megfelelő hely az SSD írási sebességének tesztelésére.

Lépjünk be a számunkra megfelelő hasonló könyvtárba,

cd /tmp

majd futtassuk a dd parancsot:

sync; dd if=/dev/zero of=./tesztfile bs=4k count=256k conv=fdatasync

Itt először lefuttatunk egy sync parancsot, ami a mérés előtt még kiírja az írási pufferben maradt korábbi tartalmat, hogy pl. késleltetett írási adatok ne zavarhassák be a mérést. Így tehát "tiszta lappal" indulhat a fájl írása és annak mérése.

A dd parancsnak pedig a következő kapcsolókat adjuk:

  • if=/dev/zero: Bemenet: A /dev/zero fájlból olvasva annyi null karaktert kapunk, amennyit az olvasási művelet kér (Wikipédia).
  • of=./tesztfile: Kimeneti fájl. Ebbe a fájlba tölti fel a parancs a null karaktereket. Jelen esetben az aktuális könyvtárban hoz létre egy tesztfile nevű fájlt.
  • bs=4k: Blokkméret: 4 Kbyte. Ekkora blokkokban történik az írás.
  • count=256k: Ismétlések száma: 256 ezerszer hajtja végre az írást az említett blokkmérettel.
  • conv=fdatasync: Ez pedig gondoskodik róla, hogy a parancs végrehajtásáig fizikailag is ki legyenek írva az adatok a lemezre. Így pontos lesz a mérés, nincs késleltetett írás, stb.

Ez a konkrét parancs létrehoz egy kerek 1 GB méretű fájlt a megadott helyen, valamint ilyen kimenetet ad:

262144+0 beolvasott rekord
262144+0 kiírt rekord
1073741824 bájt (1,1 GB, 1,0 GiB) másolva, 2,48485 s, 432 MB/s

A kimenetben megjelenik az átviteli sebesség is. Jelen esetben ez 432 MB/másodperc. Egy SSD meghajtónál ez normális érték.

Persze egy darab mérés nem sokat ér, többször meg kell ismételnünk, majd az eredmények átlagát kell nézni.

Továbbá a blokkméretet is növelni kell – ahogyan a HDD teszteknél szokás –, hogy átfogóbb képet kaphassunk merevlemezünk sebességéről. A nagyobb blokkméretek mérésénél viszont csökkentenünk kell az ismétlések számát, hogy az írási teszt ne tartson túl sokáig, illetve a teszt fájlunk se hízzon túl nagyra.

Ennek megfelelően tehát a növekvő blokkméretekkel és csökkenő ismétlési számokkal elvégzett tesztsorozat eredménye nálam az SSD meghajtón:

SSD sebességteszt a dd paranccsal

Ez pedig a hagyományos SATA2-es HDD tesztsorozata:

Hagyományos HDD írási sebességteszt a dd paranccsal

És végül a laptopban lévő HDD sebességtesztjei:

Hagyományos HDD irasi sebességteszt a dd paranccsal 2.

A dd paranccsal történő sebességteszteknél mindig figyeljünk arra, hogy a megfelelő könyvtárban történjen az írás/olvasás, ami fizikailag a cél meghajtón van.

Olvasási tesztek

A következő lépésben a létrejött tesztfájlok olvasásával fogjuk végezni a merevlemezek olvasási tesztjeit.

Ehhez ugyanúgy be kell lépni a megfelelő merevlemezhez tartozó alkönyvtárba, és az ott létrehozott tesztfájlt kell olvasnunk szintén a dd paranccsal.

Itt annyi a különbség, hogy a bemenetünk lesz a korábban kiírt tesztfájl, a kimenet pedig a /dev/null, azaz a "semmibe" írjuk ki a fájlt, ami nem jár további lemezre írási művelettel. Ebből adódik, hogy a korábban alkalmazott írási puffer kiürítésére használt sync parancs és a késleltetett írást letiltó conv=fdatasync kapcsoló érvényüket veszítik ezért elhagyjuk őket. Helyettük a sysctl paranccsal töröljük az olvasási puffert a mérés előtt. Ennek megfelelően a minta parancsunk a következőképpen alakul, amit így már csak root-ként futtathatunk:

sysctl -w vm.drop_caches=3; dd if=./tesztfile of=/dev/null bs=4k count=256k

Ha kihagynánk a sysctl parancsot, akkor a dd parancs a memóriapufferből történő olvasás idejét mérné, ami több Gb/s sebességet eredményezne. Tehát a pontos mérést ennek alkalmazásával tudjuk megvalósítani.

A tesztsorozat az SSD-n a szokásos növekvő blokkméretekkel:

SSD olvasási sebességteszt a dd paranccsal

És a laptopban lévő SATA 2-es háttértáron:

Hagyományos HDD olvasási sebességteszt a dd paranccsal

A teszteket többször kell futtatni, és az eredmények átlagát kell nézi, hogy pontosabb adatot kaphassunk.

Az olvasási tesztek végeztével ne felejtsük el letörölni a tesztfájlokat.

 

 

Mérés a hdparm parancs segítségével

A hdparm egy lemezkezelő program, melynek segítségével információkat, teszteket kérhetünk le HDD eszközeinkről, valamint sok paramétert be is állíthatunk. A hdparm linux parancs alapból nem a Debian rendszerek része, ezért a csomagját telepíteni kell:

apt-get install hdparm

Ezután már használható.

Hardverinformációk lekérése

A hdparm segítségével is hozzájuthatunk merevlemezünk minden technikai adataihoz, ha futtatjuk az alábbi parancsot:

hdparm -I /dev/sda

Ahol a /dev/sda helyére értelemszerűen be kell helyettesítenünk a vizsgálni kívánt blokk eszközünket. A parancsot futtatva hasznos információkhoz juthatunk. Nálam például a laptopban lévő régi HDD-ről ezeket adja:

/dev/sda:

ATA device, with non-removable media
        Model Number:       Hitachi HTS545025B9A300                 
        Serial Number:      091002PB42081SC46M2L
        Firmware Revision:  PB2OC64G
        Transport:          Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6; Revision: ATA8-AST T13 Project D1697 Revision 0b
Standards:
        Used: unknown (minor revision code 0x0028) 
        Supported: 8 7 6 5 
        Likely used: 8
Configuration:
        Logical         max     current
        cylinders       16383   16383
        heads           16      16
        sectors/track   63      63
        --
        CHS current addressable sectors:    16514064
        LBA    user addressable sectors:   268435455
        LBA48  user addressable sectors:   488397168
        Logical/Physical Sector size:           512 bytes
        device size with M = 1024*1024:      238475 MBytes
        device size with M = 1000*1000:      250059 MBytes (250 GB)
        cache/buffer size  = 7208 KBytes (type=DualPortCache)
        Form Factor: 2.5 inch
        Nominal Media Rotation Rate: 5400
Capabilities:
        LBA, IORDY(can be disabled)
        Queue depth: 32
        Standby timer values: spec'd by Vendor, no device specific minimum
        R/W multiple sector transfer: Max = 16  Current = 16
        Advanced power management level: 254
        Recommended acoustic management value: 128, current value: 254
        DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6 
             Cycle time: min=120ns recommended=120ns
        PIO: pio0 pio1 pio2 pio3 pio4 
             Cycle time: no flow control=120ns  IORDY flow control=120ns
Commands/features:
        Enabled Supported:
           *    SMART feature set
                Security Mode feature set
           *    Power Management feature set
           *    Write cache
           *    Look-ahead
           *    Host Protected Area feature set
           *    WRITE_BUFFER command
           *    READ_BUFFER command
           *    NOP cmd
           *    DOWNLOAD_MICROCODE
           *    Advanced Power Management feature set
                Power-Up In Standby feature set
           *    SET_FEATURES required to spinup after power up
                SET_MAX security extension
                Automatic Acoustic Management feature set
           *    48-bit Address feature set
           *    Device Configuration Overlay feature set
           *    Mandatory FLUSH_CACHE
           *    FLUSH_CACHE_EXT
           *    SMART error logging
           *    SMART self-test
           *    General Purpose Logging feature set
           *    WRITE_{DMA|MULTIPLE}_FUA_EXT
           *    64-bit World wide name
           *    IDLE_IMMEDIATE with UNLOAD
           *    WRITE_UNCORRECTABLE_EXT command
           *    {READ,WRITE}_DMA_EXT_GPL commands
           *    Segmented DOWNLOAD_MICROCODE
           *    Gen1 signaling speed (1.5Gb/s)
           *    Gen2 signaling speed (3.0Gb/s)
           *    Native Command Queueing (NCQ)
           *    Host-initiated interface power management
           *    Phy event counters
           *    NCQ priority information
                Non-Zero buffer offsets in DMA Setup FIS
                DMA Setup Auto-Activate optimization
                Device-initiated interface power management
                In-order data delivery
           *    Software settings preservation
           *    SMART Command Transport (SCT) feature set
           *    SCT Write Same (AC2)
           *    SCT Error Recovery Control (AC3)
           *    SCT Features Control (AC4)
           *    SCT Data Tables (AC5)
Security: 
        Master password revision code = 65534
                supported
        not     enabled
        not     locked
                frozen
        not     expired: security count
                supported: enhanced erase
        82min for SECURITY ERASE UNIT. 84min for ENHANCED SECURITY ERASE UNIT.
Logical Unit WWN Device Identifier: 5000cca5e8c1ea51
        NAA             : 5
        IEEE OUI        : 000cca
        Unique ID       : 5e8c1ea51
Checksum: correct

Gyors olvasási teszt parancssorból

A program segítségével egyszerűen és gyorsan végezhetünk olvasási sebességtesztet root-ként a parancssorból:

hdparm -Tt /dev/sda

Olvasási sebességteszt a hdparm programmal parancssorból

Timing cached reads utáni érték a cache-ból történő olvasási sebességet jelzi, majd utána a Timing buffered disk reads értéke pedig a rendes lemezről történő olvasási sebességet mutatja. Természetesen ezek az értékek több minta átlagán alapulnak.

 

 

Olvasási teszt grafikus felületen

Ha már feltelepítettük a hdparm programot, akkor a programcsomag tartalmaz egy grafikus frontend-et is, amivel grafikonon kirajzolva tekinthetjük meg a mérési eredményeket. Mivel asztalkörnyezetenként változhat, hogy melyik menübe kerül ki az ikonja a programnak, illetve egyáltalán kikerül-e, egyszerűbb, ha futtatjuk az indító parancsát root-ként:

gnome-disks
Nálam Debian 9 (Stretch) -en és LXDE asztalon egyből rendelkezésre állt a hdparm program grafikus felülete is, azonban a laptopon a Debian 10 (Buster) + LXQT asztalnál szükséges volt még telepíteni a gnome-disk-utility csomagot is. Ha máshol sem található elsőre a fenti parancs, akkor ez a csomag tartalmazza.

A program indulása után az alábbi ablak fogad bennünket:

A gnome-disks grafikus program főablaka

Alapból ez a program egy lemez particionáló, mint például a Gparted, viszont van benne sebességmérő rész is, ami itt most a lényeges. Először a bal oldalon válasszuk ki a mérni kívánt lemez eszközünket, majd a sebességteszt használatához kattintsuk a fejléc jobb felén lévő 3 csíkos (hamburger) menüre, ekkor előjön egy legördülő. Ebben válasszuk a Lemez teljesítménytesztje... opciót. Előjön a következő ablak:

Gnome-disks - Teljesítményteszt

Itt kattintsunk a bal alsó Teljesítményteszt indítása gombra. Erre előjön még egy ablak:

Gnome-disks - Teljesítményteszt beállításai

Itt a felső részen figyelmeztet, hogy az írási teszthez mentsük le az adatainkat, de nem lesz rá szükség, mert írási tesztet nem végzünk! A fenti két mezőt hagyhatjuk az alapértelmezett értékeken, majd az Írási teljesítményteszt checkboxból vegyük ki a pipát, ahogyan pirossal is jelöltem!

Fontos!
Ez a program csak úgy végez írási teszteket, ha le van csatolva a meghajtó, majd azon nyers adatokat mozgat, tehát a rajta lévő adataink elveszhetnek! Ezért most csak olvasási tesztet végzünk!
Ennek megfelelően mindenképpen vegyük ki a pipát a piros nyíllal jelölt résznél!
Ha mégis szeretnénk kísérletezni, akkor pl. üres pendrive-al vagy szintén üres USB HDD-kkel kipróbálhatjuk, de semmiképpen sem a használatban lévő eszközeinkkel!

Ha tehát kivettük a pipát az írási teljesítményteszt elől, mehet is a Teljesítményteszt megkezdése... gomb. Ekkor bekéri a root jelszót, majd utána elindul a tesztelés. Nálam ezek az eredmények születtek:

Asztali gépem SSD-jén:

Gnome-disks - Teljesítményteszt - Kingston SSD meghajtó

Az asztaliban lévő SATA2-es HDD:

Gnome-disks - Teljesítményteszt - Samsung SATA2-es merevlemez

És a leglassabb, a laptopban lévő SATA2-es meghajtóm:

Gnome-disks - Teljesítményteszt - Hitachi SATA2-es laptop merevlemez

A grafikonok felső részein láthatjuk a szekvenciális olvasási sebességeket – ami mindig gyorsabb –, lent pedig a véletlenszerű olvasási eredményeket. Lényegében az alsó rész a meghatározó, mert például egy operációs rendszer indulásánál, illetve hétköznapi használata során a véletlenszerű olvasási és írási műveletek váltják egymást. Ha pedig például nagyobb fájlokat másolunk gépünkön, akkor kerülnek csak kihasználásra a grafikonok fenti részein is látható nagyobb olvasási sebességek.

 

 

Konklúzió

A teljesség igénye nélkül ez lenne néhány HDD sebesség mérési módszer. Persze vannak még alternatívák, ezekkel már nem kívántam tovább nyújtani a leírást. Kiindulásnak az itt említett módszerek kiválóak, valamint ha átfogó képet szeretnénk kapni háttértáraink állapotáról és teljesítményéről.