Delphi-PRAXiS
Seite 3 von 3     123

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Große Abweichung zwischen Now und GetTickCount (https://www.delphipraxis.net/204177-grosse-abweichung-zwischen-now-und-gettickcount.html)

himitsu 3. Mai 2020 12:37

AW: Große Abweichung zwischen Now und GetTickCount
 
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

norwegen60 3. Mai 2020 13:08

AW: Große Abweichung zwischen Now und GetTickCount
 
Liste der Anhänge anzeigen (Anzahl: 1)
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)

himitsu 3. Mai 2020 14:26

AW: Große Abweichung zwischen Now und GetTickCount
 
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.

norwegen60 3. Mai 2020 17:54

AW: Große Abweichung zwischen Now und GetTickCount
 
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.

himitsu 3. Mai 2020 22:48

AW: Große Abweichung zwischen Now und GetTickCount
 
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. :stupid:


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.

Uwe Raabe 3. Mai 2020 23:20

AW: Große Abweichung zwischen Now und GetTickCount
 
Zitat:

Zitat von norwegen60 (Beitrag 1463507)
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:52 Uhr.
Seite 3 von 3     123

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