AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Große Abweichung zwischen Now und GetTickCount

Große Abweichung zwischen Now und GetTickCount

Ein Thema von norwegen60 · begonnen am 2. Mai 2020 · letzter Beitrag vom 3. Mai 2020
Antwort Antwort
Seite 3 von 3     123
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
36.075 Beiträge
 
Delphi 10.4 Sydney
 
#21

AW: Große Abweichung zwischen Now und GetTickCount

  Alt 3. Mai 2020, 12:37
Jetzt noch in der Mitte der Messung mal eine Zeit lang einen CPU-Benchmak laufen lassen
und dann schauen wie GetTickCount und QueryPerformenceCounter sich verhalten.

Die Abweichung müsste dabei ja größer werden.
Bleibt QueryPerformenceCounter aber gleich, würde ich dennoch zu GetTickCount raten, denn das scheint ja, unter Kompensation der Auswirkungen der Virtualisierung, ein gutes Ergebnis zu liefern, im Verhältnis zur realen "Rechenzeit".


Aus Spaß und Langeweile kannst auch noch das mit einbauen. (den Test brauchst eigentlich nicht mehr, da wohl jede CPU das "inzwischen" hat)
http://michael-puff.de/Programmierun...UCounter.shtml
Delphi-Quellcode:
function RDTSC: UInt64; // oder Int64
asm
  RDTSC
end;
Es kann aber dennoch nicht schaden hier den Prozess/Thread/MainThread an einen Kern zu binden ... sicher ist sicher.
MSDN-Library durchsuchenSetProcessAffinityMask oder MSDN-Library durchsuchenSetThreadAffinityMask
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 3. Mai 2020 um 12:43 Uhr)
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
367 Beiträge
 
Delphi 10.3 Rio
 
#22

AW: Große Abweichung zwischen Now und GetTickCount

  Alt 3. Mai 2020, 13:08
Jetzt sind auch die Schwingungen wieder aufgetreten. Ausgelöst durch den Start von SQL-Manager und einige SQL-Abfragen. Und tatsächlich weicht da dann die Uhrzeit der VM um 4s von der Uhrzeit des Original-Pc ab.
QueryPerformance ist davon aber unbeeinflusst, zeigt es doch die Abweichung korrekt an

Ich verstehe also nicht ganz warum ich bei GetTickCount bleiben sollte. Der läuft doch von der realen Zeit weg (blaue Linie)
Miniaturansicht angehängter Grafiken
timegettickcount8.jpg  

Geändert von norwegen60 ( 3. Mai 2020 um 13:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
36.075 Beiträge
 
Delphi 10.4 Sydney
 
#23

AW: Große Abweichung zwischen Now und GetTickCount

  Alt 3. Mai 2020, 14:26
Ja, die VM hängt nunmal, also läuft deren Zeit weg und wird teilweise wieder mit der Realität synchronisiert.
GetTickCount läuft auch weg, aus unserer Sicht, aber nicht aus Sicht der VM.

Es kommt nun drauf an was man eigentlich messen will.
* die "virtuelle" Laufzeit von etwas in der VM, im Vergleich zu dem was man auch außerhalb messen würde
* die reale Laufzeit zur Realität außerhalb der VM

Beispiel: du hast einen grottenschlechten Emulator, der nur halb so schnell ist, wie das echte Gerät.
Will man da dann im Emulator die emulierte Zeit messen (also halb so schnell) oder die "echte" Zeit? Und wenn ja, was ist die "richtige" Echte, also im Verhältnis zu was?

Zeit ist eben relativ, wie so ein gewisser Typ mal bemerkte.
Die VM ist der Inhalt eines Raumschiffs bei nahezu Lichtgeschwindigkeit oder in der Nähe eines Schwarzen Lochs.
Im Raumschiff/VM läuft alles langsamer, aber für die Insassen ist das "normal".

Selbst ein Satellit in der Nähe der Erde ist etwas verschoben, aus unserer Sicht.
Oder zwei Uhren, Eine auf einem langsamen Kreuzfahrtschiff und die Andere in einem schnellen Flieger. Am Ziel haben die Uhren einen Unterschied, aber für beide Reisenden verlief die Zeit aus "ihrer" Sicht ganz normal.

Bei einem Planeten mit einer elyptischen Umlaufbahn ist im Sommer die Zeit langsamer, als im Winter, weil näher an der Sonne und damit schneller, aber auf dem Planeten bekommt das niemand mit, so lange er sich nicht mit einer externen Referenz vergleicht.
Aber wenn seine Referenz auch unbemerkt einer Schwankung unterliegt, dann misst der Messende schonmal Mist.

PS: Mit TIdTime kannst dich auch selber mit einem Zeitserver auf dem Host, deinem Router oder im Internet synchronisieren, also jeweils die aktuelle Zeit erfragen, dann bist unabhängig von dem Sync-Intervall der VM.
Musst aber bedenken, dass der Host sich auch mit einem externen Zeitserver synchronisiert, nur nicht in so extrem kurzen Abständen, wie in der VM.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 3. Mai 2020 um 14:56 Uhr)
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
367 Beiträge
 
Delphi 10.3 Rio
 
#24

AW: Große Abweichung zwischen Now und GetTickCount

  Alt 3. Mai 2020, 17:54
Ich glaube nicht, dass ich unseren Kunden erklärt bekäme, dass ihre Tests halt auf einer langsamen VM gelaufen sind und deshalb etwas länger liefen als in der normalen Welt. Da halte ich mich also lieber an den irdischen QueryPerfomer und hoffe, dass der sich nicht auch irgendwo ablenken lässt und zu trödeln anfängt.

Ich wüsste außer unserer Entwicklungsumgebung auch keine reale Anwender, die das Programm in einer VM laufen lassen. Von daher hat sich die Problematik eh etwas entschärft.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
36.075 Beiträge
 
Delphi 10.4 Sydney
 
#25

AW: Große Abweichung zwischen Now und GetTickCount

  Alt 3. Mai 2020, 22:48
Brauchst doch nicht zu erklären?
Also falls die Verlangsamung sowohl Programm als auch den Counter gleicher Maßen betreffen, läuft es gefühlt vielleicht länger, aber gemessen wird das Gleiche.


Zitat:
Ich wüsste außer unserer Entwicklungsumgebung auch keine reale Anwender, die das Programm in einer VM laufen lassen.
Oder hast es nur nicht bemerkt?

Unser neuer Server, da läuft nun ein Linux und darin dann das Windows mit Delphi. (hatte dort nur mal ausversehn kurz reingesehn)
Aktuell ist es ein WindowsServer, der mehrere VMs mit Linux
und einer WinXP-Testumgebung (die ich zum Glück seit über einem Jahr nicht mehr besuchen musste).
und unserer Kunden haben auch schonmal Linux und Windows sonstiw gemischt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
7.751 Beiträge
 
Delphi 10.4 Sydney
 
#26

AW: Große Abweichung zwischen Now und GetTickCount

  Alt 3. Mai 2020, 23:20
Da halte ich mich also lieber an den irdischen QueryPerfomer und hoffe, dass der sich nicht auch irgendwo ablenken lässt und zu trödeln anfängt.
Also bei VMware gibt es eine Option Virtualize CPU performance counters. Könnte irgendwie damit zu tun haben.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 20:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf