Warum ist das Schreiben auf das NAS langsamer als das Lesen

  • Hallo zusammen,


    ich stell mir die Frage: "Warum ist das Schreiben auf das NAS langsamer als das Lesen ?"


    Bei meinem kleinen NAS (QNAP 109 Pro II) ist die CPU das limitierende Element warum die Festplatte nicht die Übertragungsraten erreicht, als wenn die HD direkt am PC angeschlossen wäre. Soweit ist alles klar :thumb:


    Nehmen wir mal grob folgende Werte an:
    schreiben 10MByte/s
    lesen 20MByte/s


    Dann sind beide Werte weit vom Maximum der Werte weg, was die Platte eigentlich könnte.
    Dann meine ich:
    OK, wenn das NAS 20MByte/s lesen kann, warum kann sie sie nicht auch schreiben. Da die Platte nicht das limitierende Element ist, und das Netzwerk auch nicht (sonst wären ja keine 20MByte/s beim lesen möglich) muß es wohl an der CPU des NAS liegen, richtig :?:


    Aber was hat die CPU beim schreiben mehr zu tun als beim lesen :?:
    Wird da noch Fehlerprüfung gemacht, oder sonstige Überwachungsmechanismen die die CPU zusätzlich belastet :?:


    Fragen über Fragen, vielleicht weiß jemand Rat :thumb:

  • Zitat von "GalliAG"

    Weiss dennn keiner mehr, oder ist die Frage so doof??


    Bei mir ersteres. Ich vermute, dass beim schreiben verschiedene Verifizierungen laufen, Blockgrößen und Auftrennungen der Daten berechnet werden müssen, und das wird Zeit kosten. Auf eine gewisse Weise könnte man also sagen, dass bei Schreibzugriffen gleichzeit geschrieben und gelesen werden muss, und das dürfte einfach die Zeit kosten.


    Die physikalischen Daten der Platten und die daraus resultierende Geschwindigkeit sollte ja ansonsten gleich sein.

  • OK, dann versuche ich mal eine Erklärung.


    Beim Lesen muss der Dateisystemtreiber nur im Directory der Partition nach den Positionsinformationen einer Datei suchen und diese dann lesen. Beim Schreiben muss er hingegen:
    1. Freie Positionen auf der Partiton suchen. Normalerweise liegen Dateien am Stück relativ verstreut auf der
    Platte, um eine starke Fragmentierung zu vermeiden. Je voller die Platte wird, desto aufwändiger wird das.
    Schliesslich gibt es oft mehrere 10tausend Dateien, die verwaltet werden müssen. Durch Löschen kleiner und
    Schreiben größerer Dateinen kann es bei einer gut gefüllten Platte zu Fragmentierung von Dateien kommen,
    d.h. eine Datei kann nicht an einem Stück geschrieben werden, sondern muss auf mehrere kleinere Lücken
    verteilt werden.
    2. Die Daten müssen natürlich geschrieben werden. Das geht meist auch etwas langsamer, da die Platte ja
    magnetisiert werden muss, wohingegen beim Lesen keine größeren Wartezeiten entstehen. Normalerweise
    versucht der platteninterne Cache dem entgegenzuwirken. Das funktioniert natürlich nur unter gewissen
    Randbedingungen verlustfrei :). Deshalb gibt es auch bei jedem Dateisystem einen Schreibcache, der versucht,
    diese Zeitverluste für den Benutzer zu verstecken. Wenn du viele kleine Dateien schreibst, werden sie
    normalerweise im Cache gesammelt und fürs Schreiben zu größeren Blöcken zusammengefasst, denn jedes Byte
    einzeln zu schreiben, wäre sehr langsam. Bei größeren Blöcken kommen optimierte Übertragungsprotokolle
    zur Anwendung (z.B. DMA), die die Anzahl der notendigen Kommunkationsschritte mit der Platte reduzieren.
    3. Die Positionen der geschriebenen Datei müssen ins Directory aufgenommen werden, damit sie beim Lesen
    wieder auffindbar sind.


    Hinter dem Ganzen steckt eine Menge Rechenaufwand, denn Platten werden in Sektoren addressiert (eigentlich ist es noch komplizierter, aber das lasse ich mal weg), Dateien von Dateisystemen sind aber hierarchisch strukturiert. Diese Hierarchie muss irgendwo flachgeklopft werden und natürlich gespeichert.

  • Dank euch Beide für die Antworten,


    also muß die CPU des Rechners alle zusätzlichen Aufgabe bewältigen, die beim Datenschreiben so anfallen. Das macht nicht die Festplatte :idea:


    Also wäre es doch eine tolle Idee, der Festplatte so was wie einen Co-Prozessor zu verpassen, der sich um diese Aufgaben kümmert. Wahrscheinlich gibt es das auch schon, oder zumindest auf dem Controller, ist aber wohl für den "Low-Cost" Markt nicht interessant :mrgreen:


    Grüsse Galli

  • das wird schon gemacht :) jede festplatte hat ihren eigenen coprozessor sowie einen speicher welcher das betriebssystem für die festplatte enthält. diese sorgen dafür das die festplatte ihre sache gut macht.


    wo genau die arbeit der treiber (also der rechner-cpu) aufhört und wo die arbeit der firmware anfängt, kann ich dir leider nicht sagen :D


    aktuell hat z.B. seagate probeme mit der firmware auf seinen festplatten
    http://www.golem.de/0901/64673.html