Unsere Anwendung braucht Ewigkeiten, wenn Objekte & Ziel-DLL auf einem Netzwerklaufwerk liegen: Ich habe mich auf die Erstellung der DLL konzentriert, da es 400 Sekunden dauert.zunehmende Schreibgeschwindigkeit durch CIFS beim Kompilieren/Verknüpfen von gcc/ld unter Windows
Auf einem lokalen Laufwerk beträgt die DLL-Erstellung etwa 60 Sekunden. Beide Laufwerke teilen die gleichen Eigenschaften, unser Netzwerk ist sehr schnell.
Ich habe versucht, große Dateien zu kopieren/zu erstellen, die das Netzwerklaufwerk als Ziel verwenden, und gute Ergebnisse erzielt, wenn die Schreibgröße groß genug war. Also habe ich mit ProcessMonitor untersucht, und festgestellt, dass die ld
eine Menge von WriteFile
Anrufe mit 2 Bytes verwendet, und größte write-at-once-Größe war um 200.
Also ich vermute, dass CIFS reagiert sehr schlecht auf a Reihe von ungepufferten kleinen Schreibvorgänge, während das lokale Laufwerk nicht kümmert.
Ich könnte meinen gcc-Compiler-basierten Anbieter bitten, seine write
Aufrufe von einigen gepufferten fwrite
zu konvertieren, aber gibt es nicht etwas, das wir auf dem CIFS-Schreib-Cache-Parameter fehlen?
Ich meine: Wenn es einen solchen Cache auf der CIFS-Seite gäbe, würden größere Blöcke geschrieben werden und die Performance wäre nahe an einer Dateikopie/-erstellung. Gibt es eine Möglichkeit, die Cachegröße zu drucken/zu ändern? (Sorry für die Noob CIFS Frage, aber Ich habe Sachen gegoogelt wie „SMB CIFS Fenster schreiben Cache-Größe“ und fand nur Sachen für Linux.
Anwendungsebene Pufferung über 'fwrite()' wahrscheinlich sind, wird nicht Hilfe viel wenn überhaupt - der Client-Kernel puffert normalerweise IO. Dies könnte helfen: https://msdn.microsoft.com/en-us/library/cc558565(v=bts.10).aspx Schauen Sie sich insbesondere 'SizeReqBuffer' an. Weitere Informationen zu SizeReqBuffer finden Sie unter https://blogs.msdn.microsoft.com/openspecification/2009/04/10/smb-maximum-transmit-size-and-performance-tuning/. –
@Andrew Henle: Ich hatte den SizeReqBuffer Registrierungsschlüssel ohne Glück versucht. Muss ich nach der Einstellung neu starten? –