AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Multithread und File I/O bei SSD/HDD

Ein Thema von Benmik · begonnen am 23. Apr 2016 · letzter Beitrag vom 24. Apr 2016
Antwort Antwort
Benmik

Registriert seit: 11. Apr 2009
552 Beiträge
 
Delphi 11 Alexandria
 
#1

Multithread und File I/O bei SSD/HDD

  Alt 23. Apr 2016, 16:19
Ich lese JPG ein und erstelle Vorschaubilder. Jetzt habe ich mal überprüft, welche Auswirkungen das hat, wenn ich Multithreading verwende, und das jeweils bei einer SSD und zwei herkömmlichen Festplatten (FP).
Material waren ~1.200 JPG mit insgesamt ~5 GB. Gemessen habe ich einmal mit und einmal ohne Platten-Cache (Rechner-Neustart). Verwendet habe ich nach längerem Überlegen AsyncCalls von Andreas Hausladen in der Modifikation von Zarko Gajic, da ich das WaitAll benutze.

Ergebnisse (gerundet, kommt ja auf die Größenordnung an):

Nach Neustart (Singlethread):

SSD: 85 sec
FP1: 90 sec
FP2: 90 sec

Beim Zweitstart (Singlethread):

SSD: 85 sec
FP1: 85 sec
FP2: 85 sec

Nach Neustart (Multithread):

SSD: 30 sec
FP1: 180 sec
FP2: 290 sec

Beim Zweitstart (Multithread):

SSD: 23 sec
FP1: 25 sec
FP2: 25 sec

Von der HDD-LED und vom Kraspeln her vermute ich stark, dass die Dateien auf der FP2 sehr viel verstreuter lagen als auf der FP1.

Das vorläufige Fazit ist, dass bei einer SSD Multithreading ein Muss ist, bei einer HDD ein DarfNicht. Ich habe überlegt, ob ich das Datei-Einlesen in einen eigenen Threadpool auslagern könnte, aber das geht nicht, da ich ich die Extract-Methode des IExtractImage benutze.

Jetzt könnte ich feststellen, ob die Dateien auf einer SSD liegen, und die entsprechende Strategie wählen. Das würde auch klappen, aber wie ich hier feststellen musste, würde das Administratorrechte voraussetzen.

Gibt es da Ideen zu?

Geändert von Benmik (23. Apr 2016 um 20:59 Uhr) Grund: FP beim Zweitstart Multithread 25 sec und nicht 85
  Mit Zitat antworten Zitat
Benedikt Magnus

Registriert seit: 6. Jul 2012
Ort: Bonn
190 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Multithread und File I/O bei SSD/HDD

  Alt 23. Apr 2016, 16:37
Wenn das Prüfen auf SSD wegfällt, könntest du als Workaround auch einen kleinen Teil der Dateien normal und einen multithreaded auslesen, anschließend vergleichen, was schneller ging und damit fortfahren.
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
552 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Multithread und File I/O bei SSD/HDD

  Alt 23. Apr 2016, 16:50
... vergleichen, was schneller ging und damit fortfahren.
Das merk ich mir schon mal. Das könnte selbst dann gut sein, wenn sich eine Lösung fände.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Multithread und File I/O bei SSD/HDD

  Alt 23. Apr 2016, 17:33
Das Zauberwort heißt Pipeline.
  1. Bild von der Platte lesen (1 Thread)
  2. Vorschau erstellen (CPU-Count Threads)
  3. Vorschau speichern (1 Thread)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
552 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Multithread und File I/O bei SSD/HDD

  Alt 23. Apr 2016, 18:30
War ja auch meine Idee, aber nach viel Experimentieren fand ich seinerzeit den Weg über IExtractImage (Achtung: Interface! ) mit GetLocation und Extract am schnellsten. Und da kann man Bild-Lesen und Vorschau-Erstellen nicht trennen.

Geändert von Benmik (23. Apr 2016 um 19:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Multithread und File I/O bei SSD/HDD

  Alt 23. Apr 2016, 20:44
War ja auch meine Idee, aber nach viel Experimentieren fand ich seinerzeit den Weg über IExtractImage (Achtung: Interface! ) mit GetLocation und Extract am schnellsten. Und da kann man Bild-Lesen und Vorschau-Erstellen nicht trennen.
Warum kann man die nicht trennen?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von markus5766h
markus5766h

Registriert seit: 5. Mär 2009
Ort: Hamburg
569 Beiträge
 
Delphi XE8 Professional
 
#7

AW: Multithread und File I/O bei SSD/HDD

  Alt 23. Apr 2016, 16:38
Moin,

ich kann mich dunkel daran erinnern, dass es bei SCSI Laufwerken über SCSI INQUIRY die Möglichkeit gab,
die Rotationsgeschwindigkeit abzufragen, für "SSD"s (gab's damals noch nicht --> waren EPROM-Lösungen)
gab's dann einen entsprechenden Rückgabewert.
Ob sich das für "normale" Festplatten umsetzen lässt, weiß ich allerdings nicht . . .
Markus H.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz