Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
dnbd3_fuse_cow [2022/09/09 18:16 CEST] – status.txt mscherlednbd3_fuse_cow [2022/09/09 18:28 CEST] – Threads und Locks mscherle
Zeile 406: Zeile 406:
 Wenn eine neue CoW-Sitzung gestartet wird, werden eine neue Meta-, Daten- und, falls in den Befehlszeilenargumenten festgelegt, eine status.txt-Datei erstellt. Wenn eine neue CoW-Sitzung gestartet wird, werden eine neue Meta-, Daten- und, falls in den Befehlszeilenargumenten festgelegt, eine status.txt-Datei erstellt.
  
-===status.txt===+==status.txt==
 Die Datei status.txt kann mit dem Kommandozeilenparameter --cowStatFile aktiviert werden. Die Datei status.txt kann mit dem Kommandozeilenparameter --cowStatFile aktiviert werden.
  
Zeile 434: Zeile 434:
  
   * **ulspeed** die aktuelle Upload-Geschwindigkeit in kb/s.   * **ulspeed** die aktuelle Upload-Geschwindigkeit in kb/s.
 +
 +Sobald alle Blöcke hochgeladen wurden, wird der Status auf erledigt gesetzt. Wenn Sie COW_DUMP_BLOCK_UPLOADS festlegen (in config.h), wird eine Liste aller Blöcke, sortiert nach der Anzahl der Uploads, in die Datei status.txt kopiert, nachdem der Block-Upload abgeschlossen ist.
 +
 +Mit dem Kommandozeilenparameter --cowStatStdout wird die gleiche Ausgabe der Statistikdatei in stdout ausgegeben.
 +
 +==meta==
 +Die Metadatei enthält die folgenden Header:
 +<code>
 +// cowfile.h
 +typedef struct cowfile_metadata_header
 +{
 +    uint64_t magicValue;                    // 8byte
 +    atomic_uint_least64_t imageSize;        // 8byte
 +    int32_t version;                        // 4byte
 +    int32_t blocksize;                      // 4byte
 +    uint64_t originalImageSize;             // 8byte
 +    uint64_t metaDataStart;                 // 8byte
 +    int32_t bitfieldSize;                   // 4byte
 +    int32_t nextL2;                         // 4byte
 +    atomic_uint_least64_t metadataFileSize; // 8byte
 +    atomic_uint_least64_t dataFileSize;     // 8byte
 +    uint64_t maxImageSize;                  // 8byte
 +    uint64_t creationTime;                  // 8byte
 +    char uuid[40];                          // 40byte
 +    char imageName[200];                    // 200byte
 +} cowfile_metadata_header_t;
 +</code>
 +Nach diesem Header beginnt bei Byte 8192 die oben erwähnte l1- und dann die l2-Datenstruktur.
 +==data==
 +Die Datendatei enthält den magicValue und am Offset 40 * 8 * 4096 (Kapazität eines cowfile_metadata_header_t) beginnt der erste Datenblock.
 +
 +==magic values in den Headern der Dateien==
 +Die magic values in beiden Dateien werden verwendet, um sicherzustellen, dass eine geeignete Datei gelesen wird und dass der Rechner die richtige Endianness hat.
 +<code>
 +//config.h
 +#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
 +</code>
 +
 +===Threads===
 +Diese Erweiterung verwendet zwei neue Threads:
 +<code>
 +tidCowUploader
 +tidStatUpdater
 +</code>
 +  * **tidCowUploader** ist der Thread, der die Blöcke auf den Cow-Server hochlädt.
 +
 +  * **tidStatUpdater** aktualisiert die Statistiken in stdout oder die Statistikdateien (je nach Parametern).
 +
 +===Locks===
 +Diese Erweiterung verwendet einen neuen Lock cow.l2CreateLock. Er wird verwendet, wenn ein neues L2-Array zugewiesen wird.
 +
 <note warning>To do</note> <note warning>To do</note>
  
Drucken/exportieren