Zusammenfassung
Wie kann Linux so konfiguriert werden, dass es gleichzeitig von einer lokalen Festplatte / einem lokalen Dateisystem liest und auf eine Netzwerkfreigabe schreibt, anstatt zu lesen, während keine Daten über das Netzwerk übertragen werden, und diese Daten dann über das Netzwerk zu senden, während sich die lokale Festplatte befindet? untätig?
Es ist viel schneller, gleichzeitig zu lesen und zu schreiben, anstatt nur eine Operation und dann die andere abwechselnd auszuführen.
Einzelheiten
Ich verschiebe eine große Datenmenge von lokalen Festplatten auf einem Linux-Computer auf ein NAS-Gerät.
Ich verwende rsync
grundsätzlich zu kopieren /srv/data
in /mnt/nas
, das ein CIFS montieren.
Es fing gut an, mit 100 MB / s zu lesen und mit 100 MB / s (Grenze des Gigabit-Netzwerks) auf den NAS zu schreiben, wobei sowohl gelesen als auch geschrieben wurde.
Ein paar Stunden später stelle ich jedoch fest, dass gerade von der lokalen Festplatte gelesen wird und der Lesevorgang abgebrochen wird, während auf den NAS geschrieben wird. Wenn dann keine Daten mehr auf den NAS geschrieben werden müssen, wird der Lesevorgang von der Festplatte fortgesetzt nochmal. Das Netzwerk ist inaktiv, während die Festplatte gelesen wird, und die Festplatte ist inaktiv, während das Netzwerk verwendet wird.
Es erübrigt sich zu erwähnen, dass das Lesen von 200 MB und das anschließende Schreiben von 200 MB viel länger dauert als das gleichzeitige Lesen und Schreiben von 200 MB.
Wie kann ich den Kernel so konfigurieren, dass er das frühere Lese- und Schreibverhalten beibehält, anstatt zwischen Lesen und Schreiben zu wechseln und jeweils nur einen Vorgang auszuführen?
Einige Beobachtungen: Wenn die lokale Festplatte mit 100 + MB / s liest, scheint alles parallel zu laufen, aber sobald die Festplatte langsamer wird (aus irgendeinem Grund nur noch 20 MB / s), ist dies der Zeitpunkt für das Lesen / Schreiben Umschaltung scheint zu passieren.
Ich kann auch sync
alle paar Sekunden manuell ausführen , damit die Schreibvorgänge parallel zu den Lesevorgängen ablaufen (obwohl dies offensichtlich bei reduzierten Geschwindigkeiten der Fall ist). Es scheint jedoch nicht die richtige Lösung zu sein , sync
eine while
Schleife zu erstellen, die alle fünf Sekunden ausgeführt wird.
Der Kernel scheint etwa 1 GB Daten zwischenzuspeichern und sie dann so schnell wie möglich über das Netzwerk auszuspeichern. Das ist in Ordnung. Ich verstehe nur nicht, warum die langsame Festplatte nicht mehr gelesen werden muss, während die Daten über das Internet gesendet werden Netzwerk.