Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
dnbd3_fuse_cow [2022/09/09 18:28 CEST] – Threads und Locks mscherlednbd3_fuse_cow [2022/11/24 15:36 CET] (aktuell) – [cow_merger_service] bißchen verfl. chr
Zeile 173: Zeile 173:
  
 ^Schlüssel              ^ Wert ^ Beschreibung                                                                                                                                      ^Schlüssel              ^ Wert ^ Beschreibung                                                                                                                                     
-|WorkingDirectory       | Pfad| Order in dem der Server die aktiven Images zur Bearbeitung zwischen speichert                              +|WorkingDirectory       | Pfad| Order zur Zwischenspeicherung und Bearbeitung aktiver Images. | 
-|OriginalImageDirectory | Pfad | Ordner der die Originalen Image Dateien enthält. |+|OriginalImageDirectory | Pfad | Ordnerder die originalen Imagedateien enthält. |
 |DestinationDirectory | Pfad | In diesen Ordner werden die fertigen Images kopiert.| |DestinationDirectory | Pfad | In diesen Ordner werden die fertigen Images kopiert.|
-|Urls                 | url:port,..,url:port| Url Liste auf die der Server hören soll.|+|Urls                 | url:port,..,url:port| URL-Listeauf die der Server hören soll.|
  
-Sämtliche genannten Werte aus der Tabelle **müssen** konfiguriert werden. Sollten sich die Serverprozesse cow_merger_service und der dnbd3-server auf dem selben System befinden, macht es Sinn, dass **OriginalImageDirectory** auf den gleichen Ordner wie der **basePath** des dnbd3 Servers zeigt.+Die genannten Werte müssen konfiguriert werden. Sollten sich die Serverprozesse cow_merger_service und der dnbd3-server auf dem selben System befinden, ergibt es Sinn, als OriginalImageDirectory das entsprechende Verzeichnis des dnbd3-Servers (basePath) zu verwenden.
  
 === Serverstart === === Serverstart ===
Zeile 217: Zeile 217:
  
 Der Random Test führt zufällige Schreibvorgänge und Größenänderungen durch. Diese werden sowohl auf dem gemounteten Image als auch auf einer im Dateisystem befindlichen Kopie desselben durchgeführt. Beide Abbilder werden zum Abschluss auf Gleichheit getestet. Der Random Test führt zufällige Schreibvorgänge und Größenänderungen durch. Diese werden sowohl auf dem gemounteten Image als auch auf einer im Dateisystem befindlichen Kopie desselben durchgeführt. Beide Abbilder werden zum Abschluss auf Gleichheit getestet.
 +
 +Folgende Pfade werden bei den Tests verwendet:
 +
 +  * **mountPfad** Beliebiger Pfad an dem das Image gemounted wird, wichtig der Ordner muss leer sein.
 +  * **tmpCowPfad** Beliebiger  Pfad an dem die CoW Extension die CoW Session Data und die Status Datei speichert.
 +  * **Pfad im lokalen Dateisystem** Beliebiger  Pfad im lokalen Dateisystem an dem eine Kopie des Test Images abgespeichert werden kann. Dies wird im Random Test als "Ground Truth" verwendet.
  
 ==== Allgemeine Testvorbereitungen ==== ==== Allgemeine Testvorbereitungen ====
Zeile 486: Zeile 492:
 Diese Erweiterung verwendet einen neuen Lock cow.l2CreateLock. Er wird verwendet, wenn ein neues L2-Array zugewiesen wird. Diese Erweiterung verwendet einen neuen Lock cow.l2CreateLock. Er wird verwendet, wenn ein neues L2-Array zugewiesen wird.
  
-<note warning>To do</note>+ 
 +===Config Variablen ==== 
 +Die folgenden Konfigurationsvariablen wurden zu config.h hinzugefügt. Eine Änderung wird nur erfahrenen Nutzern empfohlen. 
 +<code> 
 +//config.h 
 +// +++++ COW +++++ 
 +#define COW_BITFIELD_SIZE 40 // NEVER CHANGE THIS OR THE WORLD WILL ALSO END! 
 +#define COW_FILE_META_MAGIC_VALUE ((uint64_t)0xEBE44D6E72F7825E) // Magic Value to recognize a Cow meta file 
 +#define COW_FILE_DATA_MAGIC_VALUE ((uint64_t)0xEBE44D6E72F7825F) // Magic Value to recognize a Cow data file 
 +#define COW_MIN_UPLOAD_DELAY 60 // in seconds 
 +#define COW_STATS_UPDATE_TIME 5 // time in seconds the cow status files gets updated (while uploading blocks) 
 +#define COW_MAX_PARALLEL_UPLOADS 10 // maximum number of parallel uploads 
 +#define COW_MAX_PARALLEL_BACKGROUND_UPLOADS 2 // maximum number of parallel uploads while the image is still mounted 
 +#define COW_URL_STRING_SIZE 500 // Max string size for an url 
 +#define COW_SHOW_UL_SPEED 1 // enable display of ul speed in cow status file 
 +#define COW_MAX_IMAGE_SIZE 1000LL * 1000LL * 1000LL * 1000LL; // Maximum size an image can have(tb*gb*mb*kb) 
 +// +++++ COW API Endpoints +++++ 
 +#define COW_API_CREATE "%s/api/File/Create" 
 +#define COW_API_UPDATE "%s/api/File/Update?guid=%s&BlockNumber=%lu" 
 +#define COW_API_START_MERGE "%s/api/File/StartMerge" 
 +</code> 
 + 
 +  * **COW_MIN_UPLOAD_DELAY** legt die Mindestzeit in Sekunden fest, die seit der letzten Änderung eines CoW Blocks verstrichen sein muss, bevor er hochgeladen wird. Ein größerer Wert verringert normalerweise das doppelte Hochladen von Blöcken. Ein kleinerer Wert verringert die Zeit für das abschließende Hochladen, nachdem das Image ausgehängt wurde. Wenn Sie COW_DUMP_BLOCK_UPLOADS setzen und den Kommandozeilenparameter --cowStatFile angeben, wird eine Liste aller Blöcke, sortiert nach der Anzahl der Uploads, in die Datei status.txt geschrieben, nachdem der Block-Upload abgeschlossen ist. Dies kann bei der Feinabstimmung von COW_MIN_UPLOAD_DELAY helfen. 
 + 
 +  * **COW_STATS_UPDATE_TIME** definiert die Aktualisierungsfrequenz der stdout-Ausgabe/Statistikdatei in Sekunden. Ein zu niedriger Wert könnte die Leistung beeinträchtigen, da eine Schleife über alle Blöcke läuft. 
 + 
 +  * **COW_MAX_PARALLEL_BACKGROUND_UPLOADS** definiert die maximale Anzahl der parallelen Block-Uploads. Diese Zahl wird verwendet, wenn das Image noch eingehängt ist und der Benutzer es noch nutzt. 
 + 
 +  * **COW_MAX_PARALLEL_UPLOADS** definiert die maximale Anzahl der parallelen Block-Uploads. Diese Zahl wird verwendet, sobald das Image ausgehängt wurde, um die restlichen geänderten Blöcke hochzuladen.
  
 ==== REST-API ==== ==== REST-API ====
  
-Die folgende REST API wird genutzt zur Komunikationund Datenübertragung mit dem cow_merger_service.+Die folgende REST API wird genutzt zur Komunikation und Datenübertragung mit dem cow_merger_service.
  
 === /api/File/Create === === /api/File/Create ===
Zeile 588: Zeile 622:
 | mergedBlocks | integer |  | Yes | | mergedBlocks | integer |  | Yes |
 | totalBlocks | integer |  | Yes | | totalBlocks | integer |  | Yes |
 +
 +==== Tests ====
 +
 +===Standard Test===
 +
 +==TestSingleBit==
 +Setzt das erste Bit des ersten dnbd3 Blocks auf 1 und das mittlere Bit des zweiten dnbd3 Blocks auf 1.
 +
 +==WriteOverTwoBlocks==
 +Dieser Test schreibt über zwei dnbd3 Blöcke.
 +
 +==WriteNotOnBlockBorder==
 +Dieser Test schreibt über drei Blöcke, jedoch beginnt er nicht an der Block grenze.
 +
 +==InterleavedTest==
 +Dieser Test schreibt mehrere dnbd3 Blöck mit verschiedenen Daten, jedoch lässt er Blöcke zwischendrin unbeschrieben.
 +
 +==WriteOverL2==
 +Dieser Test, testet das schreiben über eine L2 grenze.
 +
 +==MultipleWrites==
 +Dieser Test schreibt mehrmals auf dieselben Blöcke verschiedene Daten. Mit dem --delay Paramter kann die Wartezeit zwischen den Schreibvorgängen definiert werden. Dies ist nützlich, da je nach Delay die Blöcke zwischenzeitlich hochgeladen werden.
 +
 +==fileSizeChanges==
 +Testet Änderungen an der Dateigröße. Zuerst wird die Dateigröße um 2 * l2Capacity mit einem Truncate erhöht. Dann wird geprüft, ob alle Bits in dem neu zugewiesenen Speicherplatz auf 0 gesetzt sind. Dann werden Daten in die Datei geschrieben, um zu prüfen, ob ein Schreiben möglich ist. Danach wird die Datei wieder auf die ursprüngliche Größe zurückgeschnitten. Dann wird sie wieder auf die ursprüngliche Größe + 2 * l2Capacity verkleinert und geprüft, ob alle Bits im neu zugewiesenen Speicherbereich wieder 0 sind (so dass die zuvor geschriebenen Daten wieder auf 0 gesetzt werden).
 +
 +==LongNonAlignedPattern==
 +Dieser Test schreibt ein langes Muster über 3 l2-Blöcke. Das Muster wiederholt Zeichen von 0 bis 254, ist also kein Vielfaches von 4096, was dazu führt, dass alle Blöcke mit unterschiedlichen Daten gefüllt werden. Außerdem ist dieser Test nicht blockorientiert.
 +
 +===Random Test===
 +Dieser Test führt wie oben beschrieben zufällig Größenänderungen und Schreibvorgänge durch. Die Wahrscheinlichkeit für eine Größenänderung wird mit dem Macro RND_TRUNCATE_PROBABILITY definiert und ist standardmäßig 5 %.
 +Ansonsten wird ein Schreibvorgang ausgeführt. Des Weiteren gibt es noch das Macro RND_UNALIGNED_WRITE_PROBABILITY, dies definiert die Wahrscheinlichkeit, dass der Schreibvorgang nicht auf einer Blockgrenze beginnt und endet. Die maximale prozentuale Größenänderung wird mit den Startparametern minSizePercent und maxSizePercent wie oben beschrieben festgelegt.
  
  
Drucken/exportieren