Page 1 of 4

hashdeep mit Multi-Threading

PostPosted: 09.01.2012, 09:51
by Gerby
Hallo und ein frohes neues Jahr in die Runde! (Jepp, auch noch am 9. Januar. 8-) )

Vom hashdeep-Tool gibt es eine neue Version 4.0.0, die nun auch Multi-Threading beherrscht (Changelog im Download-Bereich des Tools). Das wirkt sich dann aus, wenn dem Tool eine Liste von Dateien übergeben wird, in unserem Fall also beim Überprüfen und Erstellen von Hashes für die Download-Verzeichnisse. Und natürlich sollte der Computer mehrere Prozessor-Cores haben, was ja heutzutage gängig ist.

Ein Kurztest mit dem aktuellen Verzeichnis \w60-x64\glb (hat ziemlich viele Dateien):
V3.9.2: 35 Sek.
V4.0.0: 15 Sek.
(Intel Core2 Quad Q8300 @ 2.5 GHz)
Der Geschwindigkeitsvorteil ist zwar nicht die Welt, aber immerhin.

Das Multi-Threading wirkt sich leider nicht positiv bei den großen ISO-Dateien aus, da nicht mehrere Threads an einer Datei arbeiten können (1 Verwaltungsthread + 4 Arbeitsthreads für jeweils eine Datei). Bei den ISO-Dateien ergibt sich sogar ein kleiner CPU-Last-Nachteil im Vergleich zur Vorgängerversion, da für die eine Datei sowohl der Verwaltungs-Thread als auch ein Arbeitsthread jeweils einen CPU-Core voll auslasten (vorher nur ein Core). Aber das sind Feinheiten.

Aus meiner Sicht also das Fazit, dass man die neue Version ruhig in WSUS Offline integrieren könnte.

Eventuell denkbar für die Zukunft wäre die Erstellung der ISO-Hashes in einem Rutsch, um auch dort gegebenenfalls (mehrere ISO-Dateien, mehrere Cores) einen Geschwindigkeitsvorteil zu erwirken. Aber das würde wohl eine größeren Umbau im Skript bedeuten, oder?

Schöne Grüße
Gerby

Re: hashdeep mit Multi-Threading

PostPosted: 09.01.2012, 11:53
by Gerby
Gerade flatterte ein neuer Trunk r336 mit dem 4-er hashdeep rein und ich dachte, "Hui, prompte Umsetzung meiner Anregung". Aber da zog Torsten wohl schneller... (Vergleich der Uhrzeiten). :lol:

Re: hashdeep mit Multi-Threading

PostPosted: 09.01.2012, 12:18
by WSUSUpdateAdmin
"Trotzdem" danke, Gerby! :)

Gruß
Torsten

Re: hashdeep mit Multi-Threading

PostPosted: 09.01.2012, 14:10
by boco
Das sollte man erwarten; wenn eine Community wächst, wächst die Anzahl der Augen normalerweise doppelt so schnell (einäugige Mitglieder werden selbstverständlich nicht ausgeschlossen! :mrgreen:)

Bei MD5deep hätte ich wahrscheinlich nicht mehr so schnell nachgesehn. Dafür seh ich andere Sachen - der Vorteil von ''community-supported'' Projekten.


Hey, aber was verbietet uns denn, für die ISO-Dateien die vorherige Version zu benutzen (zumindest bis die Nachteile der Multithreading-Implementation ausgeglichen sind)?

Re: hashdeep mit Multi-Threading

PostPosted: 10.01.2012, 10:14
by WSUSUpdateAdmin
Moin!

Gerby wrote:Das Multi-Threading wirkt sich leider nicht positiv bei den großen ISO-Dateien aus, da nicht mehrere Threads an einer Datei arbeiten können (1 Verwaltungsthread + 4 Arbeitsthreads für jeweils eine Datei). Bei den ISO-Dateien ergibt sich sogar ein kleiner CPU-Last-Nachteil im Vergleich zur Vorgängerversion, da für die eine Datei sowohl der Verwaltungs-Thread als auch ein Arbeitsthread jeweils einen CPU-Core voll auslasten (vorher nur ein Core). Aber das sind Feinheiten.


boco wrote:Hey, aber was verbietet uns denn, für die ISO-Dateien die vorherige Version zu benutzen (zumindest bis die Nachteile der Multithreading-Implementation ausgeglichen sind)?


Das wird nicht nötig sein (vgl. http://md5deep.sourceforge.net/hashdeep.html):
Code: Select all
-jnn
Controls multi-threading. By default the program will create one producer thread to scna the file system and one hashing thread per CPU core. Multi-threading causes output filenames to be in non-deterministic order, as files that take longer to hash will be delayed while they are hashed. If a deterministic order is required, specify -j0 to disable multi-threading

Dann baue ich mal "-j0" in CreateISOImage.cmd ein.

Danke & Gruß
Torsten

Re: hashdeep mit Multi-Threading

PostPosted: 10.01.2012, 11:59
by Gerby
WSUSUpdateAdmin wrote:Dann baue ich mal "-j0" in CreateISOImage.cmd ein.

Ein kurzer Test des hashdeep-Tools mit diesem Parameter hat gezeigt, dass tatsächlich nur ein Core ausgelastet wird. Die Dauer des Hash-Vorgangs bleibt gleich.

Dank und Gruß zurück
Gerby

Re: hashdeep mit Multi-Threading

PostPosted: 10.01.2012, 18:40
by Matjes
Hallo zusammen,

die geänderte Version von hashdeep.exe will auf meinem Notebook nicht so richtig.

Angehakt ist : "pro Produkt und Sprache Iso-Image erstellen.

Bei mir sind es 5.

Das erste ISo-Image wird erstellt. Alles ok :)
Beim Erstellen des Hashes kommt jeweils eine FehlerMeldung. :x
System Win 7 32-Bit
wsusoffline: v. 7.2+ (r337)

Gruß Matjes :)
Code: Select all
10.01.2012 18:15:38,79 - Info: createing iso for: Windows XP (deu)
10.01.2012 18:15:38,83 - Info: command-line: "D:\ct_wsusoffline\\cmd\CreateISOImage.cmd" wxp deu  /includedotnet /includemsse /includewddefs
Starting ISO image creation for wxp deu /includedotnet /includemsse /includewddefs    ...
Creating ISO filter for wxp deu...
Creating ISO image ..\iso\wsusoffline-wxp-deu.iso...
Warning: Creating ISO-9660:1999 (version 2) filesystem.
Warning: ISO-9660 filenames longer than 31 may cause buffer overflows in the OS.
  0.75% done, estimate finish Tue Jan 10 18:26:43 2012
...

 99.06% done, estimate finish Tue Jan 10 18:17:14 2012
 99.81% done, estimate finish Tue Jan 10 18:17:14 2012
Total translation table size: 0
Total rockridge attributes bytes: 42383
Total directory bytes: 100690
Path table size(bytes): 350
666278 extents written (1301 MB)
Creating message digest file ..\iso\wsusoffline-wxp-deu-hashes.txt...




hashdeep.exe funktoniert nicht mehr

Problemsignatur:
  Problemereignisname:   APPCRASH
  Anwendungsname:   hashdeep.exe
  Anwendungsversion:   0.0.0.0
  Anwendungszeitstempel:   4f06eb2b
  Fehlermodulname:   hashdeep.exe
  Fehlermodulversion:   0.0.0.0
  Fehlermodulzeitstempel:   4f06eb2b
  Ausnahmecode:   c0000005
  Ausnahmeoffset:   000293b1
  Betriebsystemversion:   6.1.7601.2.1.0.256.48
  Gebietsschema-ID:   1031
  Zusatzinformation 1:   0a9e
  Zusatzinformation 2:   0a9e372d3b4ad19135b953a78882e789
  Zusatzinformation 3:   0a9e
  Zusatzinformation 4:   0a9e372d3b4ad19135b953a78882e789

Re: hashdeep mit Multi-Threading

PostPosted: 11.01.2012, 12:40
by Gerby
Hi Matjes!

Ich kann's hier leider nicht nachvollziehen, auch nicht in einer virtuellen Maschine (hier mit Vista 32-Bit). Hättest Du die Muße einfach mal nur das Tool auf diverse Dateien (groß, klein, dick, dünn - wie auch immer) loszulassen?
Code: Select all
hashdeep.exe -j0 <dateiname>

Auf welcher Hardware läuft denn bei Dir der Update Generator?

Im md5deep-Forum ist wenig los, und auch woanders habe ich noch nichts zu diesem Fehler gefunden. Wenn Du das reproduzieren kannst, könnte man eventuell mal beim Tool-Autor nachfragen.

Gruß
Gerby

Re: hashdeep mit Multi-Threading

PostPosted: 11.01.2012, 13:45
by Matjes
Hallo Gerby,

also die Hardware ist ein MSI CX700.

Der handische Aufruf klappt:
Code: Select all
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. Alle Rechte vorbehalten.

D:\ct_wsusoffline>D:\ct_wsusoffline\client\bin\hashdeep.exe -j0 D:\ct_wsusoffline\iso\wsusoffline-ofc-deu.iso
%%%% HASHDEEP-1.0
%%%% size,md5,sha256,filename
## Invoked from: D:\ct_wsusoffline
## D:\ct_wsusoffline> D:\ct_wsusoffline\client\bin\hashdeep.exe -j0 D:\ct_wsusoffline\iso\wsusoffline-ofc-deu.iso
##
1228105728,3cd53866cb7672d135a88b8f7b72abae,30701b72213a309428492b3819a910b1a167626f5f41f568b3f7e0ca1446c624,D:\ct_wsusoffline\iso\wsusoffline-ofc-deu.is

D:\ct_wsusoffline>


Dann hab ich den Aufruf in CreateISOImage.cmd, Zeile 164 um den Parameter -j0 reduziert, also den alten Aufruf.
Code: Select all
..\client\bin\%HASHDEEP_EXE% -c md5,sha1,sha256 -b -j0  %OUTPUT_PATH%\%ISO_NAME%.iso >%OUTPUT_PATH%\%ISO_NAME%.mds

in
Code: Select all
..\client\bin\%HASHDEEP_EXE% -c md5,sha1,sha256 -b %OUTPUT_PATH%\%ISO_NAME%.iso >%OUTPUT_PATH%\%ISO_NAME%.mds

Und siehe da, es läuft wieder wie gewohnt.

Zur Kontrolle wieder den Parameter -j0 eingefügt: Fehler ist wieder da

Gruß Matjes :)

Re: hashdeep mit Multi-Threading

PostPosted: 11.01.2012, 13:58
by WSUSUpdateAdmin
Dann baue ich "-j0" lieber wieder aus.

Danke & Gruß
Torsten