Linux έλεγχος ταχύτητας δίσκου. Πώς να μετρήσετε την ταχύτητα του σκληρού δίσκου

Πρωτότυπο: Δοκιμάστε την ταχύτητα ανάγνωσης/εγγραφής μονάδων USB και ssd με την εντολή dd στο Linux
Συγγραφέας: Silver Moon
Ημερομηνία δημοσίευσης: 12 Ιουλίου 2014
Μετάφραση: N.Romodanov
Ημερομηνία μεταφοράς: Οκτώβριος 2014

Ταχύτητα συσκευής

Η ταχύτητα μιας συσκευής μετριέται σε μονάδες του πόσα δεδομένα μπορεί να διαβάσει ή να γράψει ανά μονάδα χρόνου. Η εντολή dd είναι ένα απλό εργαλείο γραμμής εντολών που μπορεί να χρησιμοποιηθεί για την ανάγνωση και την εγγραφή αυθαίρετων μπλοκ δεδομένων σε έναν δίσκο και τη μέτρηση της ταχύτητας με την οποία έλαβε χώρα μια μεταφορά δεδομένων.

Σε αυτό το άρθρο, θα χρησιμοποιήσουμε την εντολή dd για να ελέγξουμε την ταχύτητα ανάγνωσης και εγγραφής των συσκευών usb και ssd.

Η ταχύτητα μεταφοράς δεδομένων εξαρτάται όχι μόνο από το δίσκο, αλλά και από τη διεπαφή μέσω της οποίας συνδέεται. Για παράδειγμα, η θύρα usb 2.0 έχει μέγιστο όριο λειτουργικής ταχύτητας 35 MB/s, επομένως ακόμα κι αν συνδέσετε μια μονάδα flash USB 3 υψηλής ταχύτητας στη θύρα usb 2, η ταχύτητα θα περιοριστεί σε χαμηλότερη τιμή.

Το ίδιο ισχύει και για τη συσκευή SSD. Η συσκευή SSD συνδέεται μέσω θυρών SATA, οι οποίες έχουν διαφορετικές εκδόσεις. Το Sata 2.0 έχει μέγιστο θεωρητικό όριο ταχύτητας 3Gbps, που είναι περίπου 375MB/s. Ενώ το SATA 3.0 υποστηρίζει διπλάσια ταχύτητα.

Μέθοδος ελέγχου

Τοποθετήστε τη μονάδα δίσκου και πλοηγηθείτε σε αυτήν από ένα παράθυρο τερματικού. Στη συνέχεια, χρησιμοποιήστε την εντολή dd για να γράψετε πρώτα το αρχείο, το οποίο αποτελείται από μπλοκ σταθερού μεγέθους. Στη συνέχεια, διαβάστε το ίδιο αρχείο χρησιμοποιώντας το ίδιο μέγεθος μπλοκ.

Η γενική σύνταξη της εντολής dd είναι η εξής

Dd if=path/to/input_file of=/path/to/output_file bs=block_size count=number_of_blocks

Όταν γράφουμε στο δίσκο, απλά διαβάζουμε από το /dev/zero, το οποίο είναι η πηγή ενός άπειρου αριθμού byte. Όταν διαβάζουμε από το δίσκο, διαβάζουμε το αρχείο που γράφτηκε προηγουμένως και το στέλνουμε στο /dev/null, το οποίο στην πραγματικότητα δεν υπάρχει. Σε όλη τη διαδικασία, η εντολή dd παρακολουθεί και αναφέρει τον ρυθμό με τον οποίο πραγματοποιείται η μεταφορά.

Συσκευή SSD

Η συσκευή SSD που χρησιμοποιούμε είναι μια μονάδα SSD "Samsung Evo 120GB". Αυτή είναι μια συσκευή ssd εισαγωγικού επιπέδου που σχετίζεται με τον προϋπολογισμό και επίσης η πρώτη μου μονάδα SSD. Είναι επίσης ένας από τους SSD με την υψηλότερη απόδοση που διατίθενται στην αγορά.

Σε αυτήν τη δοκιμή, η μονάδα ssd είναι συνδεδεμένη σε μια θύρα sata 2.0.

Ταχύτητα εγγραφής

Ας ηχογραφήσουμε πρώτα σε ssd

$ dd if=/dev/zero of=./largefile bs=1M count=1024 1024+0 εγγραφές σε 1024+0 εγγραφές από 1073741824 byte (1,1 GB) αντιγραφή, 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 εγγραφές σε 165118+0 εγγραφές 676323328 byte (676 MB) αντιγράφονται, 3,0114 s, 225 MB/s

Συσκευή USB

Σε αυτή τη δοκιμή, θα μετρήσουμε την ταχύτητα ανάγνωσης των συνηθισμένων μονάδων flash USB. Οι συσκευές συνδέονται σε τυπικές θύρες usb 2. Η πρώτη συσκευή είναι ένα sony 4gb usb stick και η δεύτερη είναι ένα strontium 16gb.

Συνδέστε πρώτα τη συσκευή και τοποθετήστε την έτσι ώστε να είναι ευανάγνωστη. Στη συνέχεια, από τη γραμμή εντολών, μεταβείτε στον προσαρτημένο κατάλογο.

Συσκευή Sony 4GB - εγγραφή

Σε αυτήν τη δοκιμή, η εντολή dd χρησιμοποιείται για την εγγραφή 10.000 τεμαχίων δεδομένων των 8 KB το καθένα σε ένα μόνο αρχείο στο δίσκο.

# dd if=/dev/zero of=./largefile bs=8k count=10000 10000+0 εγγραφές σε 10000+0 εγγραφές από 81920000 byte (82 MB) αντιγραφή, 11,0626 s, 7,4 MB/s

Η ταχύτητα εγγραφής είναι περίπου 7,5 MB/s. Αυτό είναι χαμηλό ποσοστό.

Συσκευή Sony 4GB - ανάγνωση

Το ίδιο αρχείο διαβάζεται για να ελεγχθεί η ταχύτητα ανάγνωσης. Για να διαγράψετε την προσωρινή μνήμη, εκτελέστε την ακόλουθη εντολή

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

Τώρα διαβάστε το αρχείο με την εντολή dd

# dd if=./largefile of=/dev/null bs=8k 8000+0 εγγραφές σε 8000+0 εγγραφές 65536000 byte (66 MB) αντιγράφονται, 2,65218 s, 24,7 MB/s

Η ταχύτητα ανάγνωσης είναι περίπου 25 MB/s, η οποία είναι λίγο πολύ τυπική για φθηνά USB sticks.

Το USB 2.0 έχει θεωρητικό μέγιστο ρυθμό σηματοδότησης 480 Mbps ή 60 Mbps. Αλλά λόγω διάφορων περιορισμών, η μέγιστη απόδοση περιορίζεται σε περίπου 280 Mbps ή 35 Mbps. Επιπλέον, η πραγματική ταχύτητα εξαρτάται από την ποιότητα της μονάδας flash, καθώς και από άλλους παράγοντες.

Και αφού τα παραπάνω συσκευή usbσυνδέθηκε σε θύρα USB 2.0 και επιτεύχθηκε ταχύτητα ανάγνωσης 24,7 MB/s, κάτι που δεν είναι και πολύ κακό. Αλλά η ταχύτητα εγγραφής είναι πολύ πίσω.

Τώρα ας κάνουμε το ίδιο τεστ με ένα Strontium 16gb stick. Το στρόντιο είναι μια άλλη μάρκα που φτιάχνει πολύ φθηνά usb sticks, αλλά αυτά τα sticks είναι αξιόπιστα.

Ταχύτητα εγγραφής για συσκευή Strontium 16gb

# dd if=/dev/zero of=./largefile bs=64k count=1000 1000+0 εγγραφές σε 1000+0 εγγραφές από 65536000 byte (66 MB) αντιγράφονται, 8,3834 s, 7,8 MB/s

Ταχύτητα ανάγνωσης για συσκευή Strontium 16gb

# sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches" # dd if=./largefile of=/dev/null bs=8k 8000+0 εγγραφές σε 8000+0 εγγραφές από 65536000 byte (66 MB) αντιγράφηκε, 2,90366 s, 22,6 MB/s

Η ταχύτητα ανάγνωσης δεδομένων είναι πιο αργή από τη συσκευή Sony.

Για να προσδιορίσετε την ταχύτητα εγγραφής στο δίσκο, πρέπει να εκτελέσετε την ακόλουθη εντολή στην κονσόλα:

συγχρονισμός? dd if=/dev/zero of=tempfile bs=1M count=1024; συγχρονισμός

Η εντολή γράφει ένα προσωρινό αρχείο 1 MB σε μέγεθος 1024 φορές και το αποτέλεσμα της εργασίας της θα είναι η έξοδος τέτοιων δεδομένων

Λήφθηκαν 1024+0 εγγραφές 1024+0 εγγραφές στάλθηκαν αντιγραμμένες 1073741824 byte (1,1 GB), 15,4992 s, 69,3 MB/s

Για να προσδιορίσετε την ταχύτητα ανάγνωσης του δίσκου, πρέπει να εκτελέσετε την ακόλουθη εντολή στην κονσόλα:

Το προσωρινό αρχείο που δημιουργήθηκε από την προηγούμενη εντολή αποθηκεύεται προσωρινά στο buffer, το οποίο θα αυξήσει την ταχύτητα ανάγνωσης από μόνο του και θα είναι πολύ υψηλότερη από την πραγματική ταχύτητα ανάγνωσης απευθείας από τον ίδιο τον σκληρό δίσκο. Για να αποκτήσετε πραγματική ταχύτητα, πρέπει πρώτα να διαγράψετε αυτήν την προσωρινή μνήμη.

Για να προσδιορίσετε την ταχύτητα ανάγνωσης από έναν δίσκο από ένα buffer, πρέπει να εκτελέσετε την ακόλουθη εντολή στην κονσόλα:

Dd if=tempfile of=/dev/null bs=1M count=1024

Έξοδος της προηγούμενης εντολής:

Λήφθηκαν 1024+0 εγγραφές 1024+0 εγγραφές στάλθηκαν αντιγραμμένες 1073741824 byte (1,1 GB), 15.446 s, 69,5 MB/s

Για να μετρήσετε την πραγματική ταχύτητα ανάγνωσης από το δίσκο, διαγράψτε την προσωρινή μνήμη:

sudo /sbin/sysctl -w vm.drop_caches=3

Έξοδος εντολών:

vm.drop_caches = 3

Εκτελούμε μια δοκιμή ταχύτητας ανάγνωσης μετά την εκκαθάριση της προσωρινής μνήμης:

Dd if=tempfile of=/dev/null bs=1M count=1024 Λήφθηκαν 1024+0 εγγραφές 1024+0 εγγραφές στάλθηκαν αντιγραμμένες 1073741824 byte (1,1 GB), 16,5786 s, 64,8 MB/s

Εκτέλεση δοκιμής ταχύτητας ανάγνωσης/εγγραφής σε εξωτερική μονάδα δίσκου

Για να ελέγξετε την ταχύτητα οποιουδήποτε εξωτερικού σκληρού δίσκου, μονάδας flash USB ή άλλων αφαιρούμενων μέσων ή συστήματος αρχείων ενός απομακρυσμένου μηχανήματος (vps / vds), πρέπει να μεταβείτε στο σημείο προσάρτησης και να εκτελέσετε τις παραπάνω εντολές.

Ή, αντί για tempfile, μπορείτε φυσικά να γράψετε τη διαδρομή προς το σημείο προσάρτησης, ως εξής:

συγχρονισμός? dd if=/dev/zero of=/media/user/USBFlash/tempfile bs=1M count=1024; συγχρονισμός

Θα πρέπει επίσης να καθορίσετε ότι οι παραπάνω εντολές χρησιμοποιούν το προσωρινό αρχείο tempfile. Μην ξεχάσετε να το διαγράψετε αφού τελειώσουν οι δοκιμές.

Δοκιμή ταχύτητας σκληρού δίσκου χρησιμοποιώντας το βοηθητικό πρόγραμμα hdparm

hdparm είναι Βοηθητικό πρόγραμμα Linux, που σας επιτρέπει να μάθετε γρήγορα την ταχύτητα ανάγνωσης από τον σκληρό σας δίσκο.

Για να ξεκινήσετε τη μέτρηση της ταχύτητας ανάγνωσης από τον σκληρό σας δίσκο, πρέπει να εκτελέσετε την ακόλουθη εντολή στην κονσόλα:

sudo hdparm -Tt /dev/sda

Έξοδος εντολών στην κονσόλα:

/dev/sda: Αναγνώσεις χρονισμού προσωρινής αποθήκευσης: 6630 MB σε 2,00 δευτερόλεπτα = 3315,66 MB/sec Αναγνώσεις χρονισμού στην προσωρινή μνήμη: 236 MB σε 3,02 δευτερόλεπτα = 78,17 MB/sec

Αυτό είναι όλο. Έτσι, μπορέσαμε να μάθουμε την απόδοση του σκληρού μας δίσκου και να δώσουμε μια πρόχειρη εκτίμηση των δυνατοτήτων του.

Απαιτεί να διαβάσετε το εγχειρίδιο (man fio), αλλά θα σας δώσει ακριβή αποτελέσματα. Σημειώστε ότι για οποιαδήποτε ακρίβεια, πρέπει να προσδιορίσετε ακριβώς τι θέλετε να μετρήσετε. Μερικά παραδείγματα:

Διαδοχική ταχύτητα ΑΝΑΓΝΩΣΗΣ με μεγάλα μπλοκ

Fio --όνομα 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 --όνομα 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 --όνομα 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, το μέγεθος του αρχείου δεν έχει τόση σημασία.

Ωστόσο, σημειώστε ότι για ορισμένα μέσα αποθήκευσης το μέγεθος του αρχείου δεν είναι τόσο σημαντικό όσο τα συνολικά byte που γράφτηκαν σε σύντομο χρονικό διάστημα. Για παράδειγμα, ορισμένοι SSD μπορεί να έχουν σημαντικά ταχύτερη απόδοση με προ-διαγραμμένα μπλοκ ή μπορεί να έχουν μικρή περιοχή φλας SLC που χρησιμοποιείται ως κρυφή μνήμη εγγραφής και η απόδοση αλλάζει μόλις γεμίσει η κρυφή μνήμη SLC. Ως άλλο παράδειγμα, οι σκληροί σκληροί δίσκοι Seagate SMR έχουν περίπου Περιοχή κρυφής μνήμης 20 GB PMR που έχει αρκετά υψηλή απόδοση, αλλά μόλις γεμίσει, η απευθείας εγγραφή στην περιοχή SMR μπορεί να μειώσει την απόδοση στο 10% από την αρχική. Φυσικά, όλα εξαρτώνται από τον φόρτο εργασίας σας: εάν η πρόσβαση εγγραφής σας είναι εκρήγνυται με μεγάλες καθυστερήσεις που επιτρέπουν στη συσκευή να καθαρίσει την εσωτερική κρυφή μνήμη, οι μικρότερες ακολουθίες δοκιμών θα αντικατοπτρίζουν καλύτερα την απόδοσή σας στον πραγματικό κόσμο. IO, πρέπει να αυξήσετε τις παραμέτρους --io_size και --runtime. Λάβετε υπόψη ότι ορισμένα μέσα (π.χ. οι περισσότερες συσκευές flash ) θα φέρει επιπλέον φθορά από τέτοιες δοκιμές. Κατά τη γνώμη μου, εάν κάποια συσκευή είναι αρκετά φτωχή ώστε να μην μπορεί να χειριστεί αυτού του είδους τις δοκιμές, δεν θα πρέπει σε καμία περίπτωση να χρησιμοποιηθεί για τη διατήρηση αξιόλογων δεδομένων.

Επιπλέον, ορισμένες συσκευές SSD υψηλής ποιότητας μπορεί να έχουν ακόμη πιο έξυπνους αλγόριθμους ισοπέδωσης φθοράς, όπου η εσωτερική κρυφή μνήμη SLC έχει αρκετά έξυπνα στοιχεία για να αντικαταστήσει τα δεδομένα στη θέση τους που ξαναγράφονται κατά τη διάρκεια της δοκιμής, εάν φτάσει στον ίδιο χώρο διευθύνσεων (δηλαδή, αρχείο δοκιμής είναι μικρότερη από τη συνολική κρυφή μνήμη SLC). Για τέτοιες συσκευές, το μέγεθος του αρχείου αρχίζει και πάλι να έχει σημασία. Εάν χρειάζεστε τον πραγματικό φόρτο εργασίας σας, είναι καλύτερο να δοκιμάσετε με μεγέθη αρχείων που θα δείτε πραγματικά στην πραγματική ζωή. Διαφορετικά οι αριθμοί σας μπορεί να φαίνονται πολύ καλοί.

Σημειώστε ότι το fio θα δημιουργήσει το απαιτούμενο προσωρινό αρχείο κατά την πρώτη εκτέλεση. Θα γεμίσει με τυχαία δεδομένα για να αποφευχθεί η λήψη πολύ καλών αριθμών από συσκευές που εξαπατούν συμπιέζοντας τα δεδομένα πριν τα γράψουν σε μόνιμη αποθήκευση. Το προσωρινό αρχείο θα ονομάζεται fio-tempfile.dat στα παραπάνω παραδείγματα και θα αποθηκευτεί στον τρέχοντα κατάλογο εργασίας. Επομένως, θα πρέπει πρώτα να αλλάξετε σε κατάλογο που είναι τοποθετημένος στη συσκευή που θέλετε να δοκιμάσετε.

Εάν διαθέτετε καλό SSD και θέλετε να δείτε ακόμη υψηλότερους αριθμούς, αυξήστε τις --numjobs παραπάνω. Αυτό ορίζει την ταυτόχρονη ανάγνωση και εγγραφή. Τα παραπάνω παραδείγματα έχουν όλα τα numjobs που έχουν οριστεί στο 1, επομένως η δοκιμή αφορά την ανάγνωση και τη γραφή μιας διαδικασίας με ένα σπείρωμα (πιθανώς με μια σειρά ουρών με ιωδό βάθος). Οι SSD υψηλής τεχνολογίας (π.χ. Intel Optane) θα πρέπει να λαμβάνουν υψηλούς αριθμούς ακόμη και χωρίς να αυξάνονται πολύ οι αριθμοί εργασίας (π.χ. 4 θα πρέπει να είναι αρκετά για να λάβετε τους υψηλότερους αριθμούς προδιαγραφών), αλλά ορισμένοι SSD "Enterprise" απαιτούν τη μετάβαση στο 32 - 128 για να λάβετε τους αριθμούς προδιαγραφών Η εσωτερική καθυστέρηση αυτών των συσκευών είναι υψηλότερη, αλλά η συνολική απόδοση είναι τρελή.

mob_info