1. Einleitung ● Zufälliges Schreiben führt dazu, dass der Kopf ständig die Spur wechselt, was zu einer erheblichen Verringerung der Effizienz führt. Beim sequentiellen Schreiben muss der Kopf die Spur fast nicht wechseln oder die Wechselzeit ist sehr kurz. ● In diesem Artikel werden die spezifischen Unterschiede zwischen den beiden und die entsprechenden Kernelaufrufe erläutert. 2. Umweltvorbereitung
3. Einführung in fio Der FIO-Test kann den Status des Lesens und Schreibens widerspiegeln. Wir müssen uns auf mehrere Schlüsselindikatoren im FIO-Ausgabebericht konzentrieren: 4. Synchroner Schreibtest (1) Synchrones wahlfreies Schreiben fio wird hauptsächlich als Testtool verwendet. Um die Systemaufrufe anzuzeigen, wird das Tool strace verwendet. Der Befehl sieht folgendermaßen aus: Lassen Sie uns zuerst einen zufälligen Schreibvorgang testen strace -f -tt -o /tmp/randwrite.log -D fio -name=randwrite -rw=randwrite \ -direct=1 -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/tmp/test.db Wichtige Informationen extrahieren root@wilson-ubuntu:~# strace -f -tt -o /tmp/randwrite.log -D fio -name=randwrite -rw=randwrite \ > -direct=1 -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/tmp/test.db Randschreiben: (g=0): rw=Randschreiben, bs=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1 fio-2.2.10 1 Prozess wird gestartet ... randwrite: (Gruppen-ID = 0, Jobs = 1): Fehler = 0: pid = 26882: Mittwoch, 14. August 2019, 10:39:02 Schreiben: io=1024,0 MB, bw=52526 KB/s, iops=13131, runt= 19963 ms clat (µs): min=42, max=18620, Durchschnitt=56,15, Standardabweichung=164,79 Breite (µs): min.=42, max.=18620, Durchschnitt=56,39, Standardabweichung=164,79 ... Bandbreite (KB/s): min. = 50648, max. = 55208, pro = 99,96 %, Durchschnitt = 52506,03, Standardabweichung = 1055,83 ... Ausführen der Statusgruppe 0 (alle Jobs): SCHREIBEN: io=1024,0 MB, aggrb=52525 KB/s, minb=52525 KB/s, maxb=52525 KB/s, mint=19963 ms, maxt=19963 ms Festplattenstatistiken (Lesen/Schreiben): ... sda: ios=0/262177, Zusammenführung=0/25, Ticks=0/7500, in_queue=7476, Auslastung=36,05 % Aufgelistet sind die Informationen, auf die wir uns konzentrieren müssen: (1) Clat, durchschnittliche Dauer ca. 56 ms (2) lat, durchschnittliche Dauer beträgt ca. 56ms (3) Bandbreite, Durchsatz, ca. 52M Schauen wir uns die Kernel-Aufrufinformationen an: root@wilson-ubuntu:~# mehr /tmp/randwrite.log ... 26882 10:38:41.919904 lseek(3, 665198592, SEEK_SET) = 665198592 26882 10:38:41.919920 schreiben(3, "\220\240@\6\371\341\277>\0\200\36\31\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096 26882 10:38:41.919969 lseek(3, 4313088, SEEK_SET) = 4313088 26882 10:38:41.919985 schreiben(3, "\220\240@\6\371\341\277>\0\200\36\31\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096 26882 10:38:41.920032 lseek(3, 455880704, SEEK_SET) = 455880704 26882 10:38:41.920048 schreiben(3, "\220\240@\6\371\341\277>\0\200\36\31\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096 26882 10:38:41.920096 lseek(3, 338862080, SEEK_SET) = 338862080 26882 10:38:41.920112 schreiben(3, "\220\240@\6\371\341\277>\0\2402\24\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096 26882 10:38:41.920161 lseek(3, 739086336, SEEK_SET) = 739086336 26882 10:38:41.920177 schreiben(3, "\220\240@\6\371\341\277>\0\2402\24\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096 26882 10:38:41.920229 lseek(3, 848175104, SEEK_SET) = 848175104 26882 10:38:41.920245 schreiben(3, "\220\240@\6\371\341\277>\0\2402\24\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096 26882 10:38:41.920296 lseek(3, 1060147200, SEEK_SET) = 1060147200 26882 10:38:41.920312 schreiben(3, "\220\240@\6\371\341\277>\0\2402\24\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096 26882 10:38:41.920362 lseek(3, 863690752, SEEK_SET) = 863690752 26882 10:38:41.920377 schreiben(3, "\220\240@\6\371\341\277>\0\2402\24\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096 26882 10:38:41.920428 lseek(3, 279457792, SEEK_SET) = 279457792 26882 10:38:41.920444 schreiben(3, "\220\240@\6\371\341\277>\0\2402\24\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096 26882 10:38:41.920492 lseek(3, 271794176, SEEK_SET) = 271794176 26882 10:38:41.920508 schreiben(3, "\220\240@\6\371\341\277>\0\2402\24\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096 26882 10:38:41.920558 lseek(3, 1067864064, SEEK_SET) = 1067864064 26882 10:38:41.920573 schreiben(3, "\220\240@\6\371\341\277>\0\2402\24\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096 ... Vor jedem zufälligen Lesevorgang wird lseek verwendet, um den aktuellen Dateioffset zu lokalisieren. Synchrones sequentielles Schreiben Verwenden Sie die Methode jetzt, um die Schreibreihenfolge zu testen root@wilson-ubuntu:~# strace -f -tt -o /tmp/write.log -D fio -name=schreiben -rw=schreiben \ -direct=1 -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/tmp/test.db schreiben: (g=0): rw=schreiben, bs=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1 fio-2.2.10 1 Prozess wird gestartet Jobs: 1 (f=1): [W(1)] [100.0% erledigt] [0KB/70432KB/0KB /s] [0/17.7K/0 iops] [eta 00m:00s] schreiben: (Gruppen-ID=0, Jobs=1): Fehler= 0: PID=27005: Mittwoch, 14. August 2019, 10:53:02 Schreiben: io=1024,0 MB, bw=70238 KB/s, iops=17559, runt= 14929 ms clat (µs): min=43, max=7464, Durchschnitt=55,95, Standardabweichung=56,24 Breite (µs): min=43, max=7465, Durchschnitt=56,15, Standardabweichung=56,25 ... Bandbreite (KB/s): min. = 67304, max. = 72008, pro = 99,98 %, Durchschnitt = 70225,38, Standardabweichung = 1266,88 ... Ausführen der Statusgruppe 0 (alle Jobs): SCHREIBEN: io=1024,0 MB, aggrb=70237 KB/s, minb=70237 KB/s, maxb=70237 KB/s, mint=14929 ms, maxt=14929 ms Festplattenstatistiken (Lesen/Schreiben): ... sda: ios=0/262162, Zusammenführung=0/10, Ticks=0/6948, in_Warteschlange=6932, Auslastung=46,49 % Sie können sehen: Durchsatz auf ca. 70M erhöht Schauen wir uns den Kernel-Aufruf noch einmal an: root@wilson-ubuntu:~# mehr /tmp/write.log ... 27046 10:54:28.194508 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\360\t\0\0\0\0\0\0\320\17\0\0\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.194568 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.194627 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.194687 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.194747 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.194807 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.194868 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.194928 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.194988 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195049 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195110 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195197 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195262 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195330 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195426 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195497 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195567 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195637 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195704 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195757 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195807 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195859 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195910 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195961 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.196012 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.196062 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.196112 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.196162 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.196213 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\0\320\17\0\0\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.196265 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.196314 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.196363 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.196414 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\0\320\17\0\0\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.196472 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.196524 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.196573 schreiben(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 ... Durch das sequentielle Lesen ist es nicht erforderlich, den Dateioffset wiederholt zu lokalisieren, sodass Sie sich auf Schreibvorgänge konzentrieren können 5. Lamellenanzeige Beim obigen Test haben wir im Fio-Testbericht kein Slat gefunden. Das liegt daran, dass es sich bei den oben genannten Vorgängen um synchrone Vorgänge handelt. Bei synchronem I/O ist Slat tatsächlich der Zeitpunkt, zu dem I/O abgeschlossen ist, da I/O-Übermittlung und I/O-Abschluss eine Aktion sind. Für asynchrones sequentielles Schreiben fügen Sie dem Befehl für synchrones sequentielles Schreiben -ioengine=libaio hinzu: root@wilson-ubuntu:~# fio -name=schreiben -rw=schreiben -ioengine=libaio -direct=1 -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/tmp/test.db schreiben: (g=0): rw=schreiben, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=1 fio-2.2.10 1 Prozess wird gestartet Jobs: 1 (f=1): [W(1)] [100,0% erledigt] [0KB/119,3MB/0KB /s] [0/30,6K/0 iops] [eta 00m:00s] schreiben: (Gruppen-ID = 0, Jobs = 1): Fehler = 0: PID = 27258: Mittwoch, 14. August 2019, 11:14:36 Uhr Schreiben: io=1024,0 MB, bw=120443 KB/s, iops=30110, runt= 8706 ms Latte (µs): min=3, max=70, Durchschnitt=4,31, Standardabweichung=1,56 clat (µs): min=0, max=8967, Durchschnitt=28,13, Standardabweichung=55,68 Breite (µs): min=22, max=8976, Durchschnitt=32,53, Standardabweichung=55,72 ... Bandbreite (KB/s): min. = 118480, max. = 122880, pro = 100,00 %, Durchschnitt = 120467,29, Standardabweichung = 1525,68 ... Ausführen der Statusgruppe 0 (alle Jobs): SCHREIBEN: io=1024,0 MB, aggrb=120442 KB/s, minb=120442 KB/s, maxb=120442 KB/s, mint=8706 ms, maxt=8706 ms Festplattenstatistiken (Lesen/Schreiben): ... sda: ios=0/262147, Zusammenführung=0/1, Ticks=0/6576, in_queue=6568, Auslastung=74,32 % Es ist ersichtlich, dass der Lamellenindikator angezeigt wird und Lat ungefähr der Summe aus Lamellen + Clat (durchschnittlicher Durchschnittswert) entspricht. Nach dem Umschalten auf asynchrones E/A wurde der Durchsatz erheblich verbessert und liegt nun bei etwa 120 M. VI. Fazit ● Fio sollte als Basistool für Festplatten verwendet werden. Wenn Sie eine Maschine (physisch oder in der Cloud) erhalten, sollten Sie so bald wie möglich einen Basistest auf der Festplatte der Maschine durchführen, um sich ein klares Bild von der Situation zu machen. ● Alle Tests in diesem Artikel haben den Cache umgangen. In tatsächlichen Anwendungen muss die Auswirkung des Caches berücksichtigt werden. Oben habe ich Ihnen das sequentielle und zufällige Schreiben auf Linux-Festplatten vorgestellt. Ich hoffe, es wird Ihnen helfen. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und ich werde Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken! Das könnte Sie auch interessieren:
|
<<: Tutorial zum Deaktivieren und Aktivieren von Triggern in MySQL [Empfohlen]
>>: Beispiel für die Verwendung einer Keep-Alive-Komponente in Vue
Beim Aktualisieren eines Datensatzes in MySQL ist...
Vorwort Als ich zuvor „defineProperty“ vorgestell...
Die Optimierung großer Datenbankdatenmengen ist e...
Das META-Tag ist ein Hilfstag im Kopfbereich der ...
In diesem Artikel wird der spezifische Code von J...
Schritt 1: yum install httpd -y #httpd-Dienst ins...
Vorwort: MYSQL dürfte die beliebteste WEB-Backend...
Vorwort Die logische Datenträgerverwaltung von lv...
Inhaltsverzeichnis 1. Verwendung von Pfeilfunktio...
1: Einführung in syslog.conf Für verschiedene Uni...
Als ich kürzlich jQuery lernte, stieß ich auf die...
Schauen wir uns zunächst den GIF-Vorgang an: Fall...
Inhaltsverzeichnis 1. Elementversatzserie 2. Elem...
Umfeld Hostname IP-Adresse Aufschlag Prometheus 1...
1. Warum diesen Artikel schreiben? Sie haben sich...