Es ist unklar, was Ihre Frage ist - Sie scheinen zu fragen, "warum sind meine Ergebnisse nicht realistisch (und warum sind sie schneller als die von fio?"). Sie nehmen Ihren fio-Job nicht auf, so dass es unmöglich ist, dazu etwas zu sagen :-( Ich weiß auch nicht, was das Programm fsrw macht. Ich werde mich bemühen, was bleibt:
Nehmen wir an, wir haben nur Ihr Programm und den Kernel (dies ist eine Vereinfachung). Ihr Programm gibt Schreibvorgänge aus, und der Kernel sagt "yup, ich habe sie", sobald er sie in einem internen Puffer in eine Warteschlange stellt, wodurch Ihr Programm seinen Weg gehen kann. Nur wenn der interne Kernelpuffer zu voll ist, blockiert Ihr Programm so lange, bis genügend Speicherplatz vorhanden ist. Das heißt, wenn ein Programm "kleine" Datenmengen auf ein leises System schreibt, wird es niemals auf die Disk warten, um die I / Os zu bedienen - wir haben sie durch die Verwendung eines Puffers von der Geschwindigkeit der Diskette abgekoppelt. Natürlich kann diese Illusion nur so lange dauern und hängt davon ab, wie groß der Puffer ist, wie voll er ist usw.
Wenn der RAM nicht verwendet wird, kann der Kernel außerdem Teile der Datenträger zwischenspeichern. Wenn ich Daten auf die Festplatte schreibe, werden die Daten, die ich schreibe, später nicht nur zwischengespeichert und geleert, sondern auch, wenn noch Speicherplatz vorhanden ist. Sie können auch nach dem Spülen herumgehalten werden, falls sie später benötigt werden. Sie können diesen Effekt sehen, wenn Sie eine Datei schreiben und dann die Datei nach freiem Zugriff prüfen. In der Regel werden Sie feststellen, dass der RAM-Speicherplatz gesunken ist, weil Teile dieser Datei im Cache gehalten werden. Wenn ich es aus dem Cache von Linux auslese, ist die Geschwindigkeit, die ich erreiche, in der Nähe der RAM-Geschwindigkeit und die Festplatte bleibt unangetastet (wenn Sie wissen, wie Iostat verwendet wird, werden Sie feststellen, dass keine / viele Festplatten gemeldet werden. O wenn dies geschieht).
So:
- Normale Schreib-E / A können gepuffert werden
- Normale E / A können zwischengespeichert werden
- Das Lesen zwischengespeicherter Daten ist VIEL schneller als das Lesen nicht zwischengespeicherter Daten
- Ihr Leseprogramm ist anfällig für den vorherigen Punkt
Beachten Sie, dass dies eine Vereinfachung ist. Ich habe nicht über Dinge wie Readahead oder Dateisysteminteraktionen berichtet, warum Sie fsync
und so weiter.
Zusätzlich können Blöcke, die vom Kernel nach unten in Richtung der Platte gesendet werden, von der Größe abweichen, die Ihr Programm sie übermittelt. Sie können 16 x 4 KByte zusammenhängende Schreibvorgänge an den Kernel senden, aber der Kernel kann diese zusammenführen und ein einzelnes 64 KByte-Schreiben auf die Festplatte senden. Dies ist in der Regel von Vorteil, aber im synthetischen Benchmarking muss man sich dessen bewusst sein.
Zusammenfassend würde ich vermuten, dass Ihre Ergebnisse "unrealistisch" sind, weil Sie massiv von der Pufferung und dem Zwischenspeichern von Linux profitieren. Wenn Ihre tatsächliche Arbeitslast wirklich so ist, dann ist die Geschwindigkeit Ihrer SSD kein Engpass und schnellere Festplatten helfen Ihnen nicht viel (so realistisch ist ein kniffliges Wort)! Sie können Zahlen erhalten, die näher an der SSD liegen, indem Sie sicherstellen, dass Ihre Datensatzgröße um ein Vielfaches (mindestens dreimal) größer ist als der Gesamtspeicher Ihres Systems, oder indem Sie E / A-Vorgänge ausführen, die nicht gepuffert oder zwischengespeichert werden können . Ich kann nicht sagen, warum Sie langsamer sind als fio-Läufe, weil jede Antwort darauf sehr fio-spezifisch ist und kein Job in der Frage enthalten ist.