Echtzeitgarantie unter Windows XP

Memnoch1337

Cadet 1st Year
Registriert
Apr. 2012
Beiträge
10
Hallo!

Ich weiß, dass XP kein Echtzeitbetriebssystem ist und man daher auch keine Garantie darauf bekommen kann.
Dennoch sitze ich gerade an meiner Diplomarbeit und muss versuchen etwas auf einem Laptop zu simulieren, bei dem ich ansich Echtzeit garantieren müsste.
Ich muss also untersuchen, inwiefern das Programm, was die Simulation gewährleistet, Zugriffszeiten gewährt bekommt, bzw. wie lange es warten muss.
Ziel soll es sein eine Einschätzung treffen zu können, ob das Programm in einem vertretbaren Rahmen antwortet.

Ich hab versucht bei Google danach zu suchen, aber ich finde anscheinend keine korrekten Suchworte.
Kennt jemand ein Programm oder eine Umgebung, die ungefährt meinen Erwartungen gerecht werden könnte?

Um es auf den Punkt zu bringen:
Ich muss Windows XP nutzen (kein Echtzeitbetriebssystem, ist mir bekannt) um ein Programm möglichst Echtzeitnah zum laufen zu bringen.
Ich suche ein Tool, dass mir die Performance aufzeigt. Wie schnell bekommt das Programm wieder Rechnenzeit, wieviel Verzögerung hat es usw...
Ich muss eben gucken, ob das Programm in einem vertretbaren Rahmen agiert oder nicht.

Vielen Dank für Eure Bemühungen (allein das ihr bis hier gelesen habt )

Mit freundlichen Grüßen,
Stephan.
 
Mir fällt da auf die Schnelle nichts ein.

Du könntest versuchen das Ganze virtualisiert umzusetzen.
Dort sollte man besonders die zeitlichen Differenzen spüren können.

Die generelle Meinung zu Echtzeitbetriebssystemen geht übrigens stark auseinander.
Auch wenn die Definition darauf ausgelegt ist, dass eigtl (laut Wikipedia) nur WinCE als Echtzeitbetriebssytem fungiert, so gibt es durchaus Fachleute die Windows generell in diese Kiste stecken.

Früher definierte man durch diesen Begriff die unmittelbare Abarbeitung direkt über die Kernel. Bei Prioritisierungen oder generellen Queues ist dies ja nicht mehr gewährleistet, auch wenn man heutzutage eigentlich bei jedem Betriebssystem im "zeitlich akzeptablen Rahmen" liegt.
 
Wenn du den quellcode hast, kannst du einfach zwischen dem befehl und der ausgabe die zeit messen!? wenn du den quellcode nicht hast wirds schwer. bei einem programm mit nutzeroberfläche würd ich mal sagen nicht möglich. bei kommandozeilentools könnte man mit nem kleinen skript wieder die zeitpunkte zwischen aufruf und und beenden der aufgabe messen.
 
Also bei der Audiobearbeitungen bzw. für Live-PCs wird dort gern DPC Latency Checker genommen.
Der zeigt Dir auf ob Dein System fähig ist Audio Live aufzunehmen oder fehlerfrei wiederzugeben...

Kann ggf auch Dir helfen um Systembremsen oder Störenfriede ausfindig zu machen.

http://www.thesycon.de/deu/latency_check.shtml

Ein gutes Livesystem hat unter 50µs ohne Ausreißer...
 
@max_1234

Dann kann ich dir als Fachmann sagen, dass Windows generell keine Echtzeitbetriebssystem ist!
Gerade mal WinCE kommt da in die Nähe, ist aber auch nur weiche Echtzeit.
 
Das ganze liegt auch stark mit daran wie viel auf dem Rechner läuft. Der Kernel vergibt doch feste Zeitscheiben an jeden Thread, sprich: Eine Totzeit wird immer da sein. Da bleibt dir nix anderes übrig als das installierte Programm auf der Zielmaschine einem Torture Test zu unterziehen und daraus rückzuschließen ob die Simulation annehmbar ist. Ggf. die Thread Priorität auf Realtime pushen, was jedoch Probleme mit restlichen Funktionen des Betriebssystems mit sich ziehen kann.

Edit: Ein grober Einblick was der Scheduler da treibt KLICK
 
Zuletzt bearbeitet:
Wow! So viele Antworten in so kurzer Zeit, danke dafür!

Ich muss leider Windows XP nehmen, da komm ich nicht drumrum.

Leider habe ich den Quellcode nicht, ansonsten könnte man da sicher irgendwas behelfsmäßig drumbasteln, ja :)

Das mit dem DPC Latency Checker werde ich mal probieren, da ich, zwar kein Audio oder Video, aber andere Datensignale streamen muss.

Liebe Grüße,
Stephan.
 
Du könntest dir auch einfach ein eigenes Programm schreiben um zu messen wie viel Zeit deinem Programm zugestanden wird um Code auszuführen und/oder wie lange es dauert bis es erneut an der Reihe ist.

Dazu gibt es in der Kernel32.dll die Funktion QueryPerformanceCounter (QueryPerformanceCounterFrequency)

Eine Erläuterung dazu und ein Codebeispiel gibts hier -> http://support.microsoft.com/kb/172338/de

Um ein möglichst genaues Ergebnis zu erzielen solltest du das Programm im Taskmanager auf die Priorität "Echtzeit" stellen. Standardmäßig hat ja jedes Programm die Priorität "Normal".
 
Im Kernel steckt der Scheduler, der jedem Thread eine winzige Zeitspanne gibt, bevor dann der nächste Thread dran ist.

Ein wirkliches "gleichzeitig" gibt es also nicht. Auch auf Mehrkern CPUs nicht.


Ich würd mir die MSDN Doku zu dem Thema ansehen, Microsoft wird am besten wissen wie ihr System arbeitet. http://msdn.microsoft.com/en-us/library/ms810029.aspx

Im Taskmanager deinen Prozess auf "Echtzeit" stellen könnte helfen, aber zaubern kann man damit auch nicht, heisst du solltest selber für eine performante Kiste sorgen.
 
Du könntest auch versuchen, Dein Simulationsprogramm auf einem möglichst unbelasteten Rechner laufen zu lassen, um Quereffekte durch andere Programme oder Treiber auszuschließen. Das Ziel ist die saubere Trennung zwischen der Entwicklungsumgebung (altes Windows voller Tools) und der Laufzeitumgebung (= Minimierung störender Einflüsse).

Dafür einfach ein frisches Windows XP auf einem zweiten Rechner aufsetzen und nur das absolute Minimum installieren. Ich würde sogar auf das Service Pack 3 verzichten, da das dem Rechner erheblich mehr Leistung abverlangt.
 
Zuletzt bearbeitet:
Genau das ist es ja... Es wird Audio gestreamt bei den Anwendungen die ich beschrieben habe....

Hier mal nette Tipps dazu - Meinst bezieht sich das auf Laptops aber das meiste gilt auch für Desktops:
http://www.musiker-board.de/compute...indows-xp-windows7-fuer-recording-zwecke.html

btw: Mein WinXP Lappi habe ich unter 20µs bekommen... Das war aber auch nen gutes Stück arbeit....

Um zu analysieren was da mit DPC gesehen stört, nimmt man RATTV3 - Hier ist das ganz gut beschrieben:
http://forum.cockos.com/showthread.php?t=30896

Du kannst Dir unter XP auch ein zweites Hardwareprofil (musste mal googeln) anlegen und dort nicht benötigte (und störende) Hardware deaktivieren...
 
Wenn Du magst, laß die Simulation doch auch mal unter Windows 7 laufen und poste uns das Ergebnis. Würde mich mal interessieren, ob es Unterschiede gibt.
 
Nochmal danke für Eure wertvollen Tips!

Ja auch unter XP gibt es schon den Punkt "Echtzeit". Allerdings wird an mehreren Stellen darauf hingewiesen, dass dann Systemwichtige Prozesse darunter leiden können.
Zudem garantiert diese Option keine Echtzeit (wie auch bei einem System, das nicht Echtzeit ist ).
Ich brauch halt irgendwas zum konkreten Messen :)

@MacGyver: ja, ich hab auch schon dran gedacht mir nen eigenes Programm zu schreiben. aber die Zeit dieses Programms muss ja nicht dem Programm entsprechen, welches ich im endeffekt nutze, da es unweit komplizierter ist

Das mit dem unbelastet und Windows 7 ist kompliziert... In meiner Firma gibt es nur vorinstallierte Rechner, einen blanken werde ich nicht bekommen. Daher heißt es klarerweise zu schauen, wie es läuft, wenn ich alles so weit es geht abschalte (ich hoffe ich bekomm den Virenscanner irgendwie weg), als auch, was passiert wenn alles an ist. Das heißt, was kann passieren, wenn ein Entwickler das Programm startet und die Virenprüfung geht an, oder Windows Update oder kA was.

Wie gesagt das mit Latency Check werde ich definitiv mal probieren, allerdings habe ich zur Zeit noch andere aufgaben, die im Vorrang stehen (wie das Programm erstmal fertig bekommen :D )
Also bitte nehmt es mir nicht übel, wenn ich zur Zeit nur abblocke... ich werde zur geeigneten Zeit alles prüfen und meine Ergebnisse dann auch posten! Allerdings kann da auch noch ne Weile dauern. Ich wollte nur früh mit dem recherchieren anfangen :)

Liebe Grüße,
Stephan.
 
Memnoch1337 schrieb:
aber die Zeit dieses Programms muss ja nicht dem Programm entsprechen, welches ich im endeffekt nutze, da es unweit komplizierter ist

Ich glaube nicht, dass der Scheduler die Rechenzeit anhand der Komplexität der Programme zuweist, sondern anhand der Priorität mit der ein Programm läuft.

Darum auch die beiden Funktionen QueryPerformanceCounter und QueryPerformanceCounterFrequency.

Die erste Funktion sollte ermitteln wie lange dein Programm rechnen darf und die zweite Funktion wie lange es dauert bis dein Programm wieder ans Ruder kommt.
Die Frequency-Funktion sollte dir also sagen können wie "echtzeitig" dein Programm läuft, unabhängig davon wie komplex es ist.
 
Der Windows-Timer hat eine minimale Granularität von 10ms, wenn deine Simulationssoftware also lediglich für irgendwelche Operationen einen sleep von 2ms machen will, funktioniert das nicht. Es werden minimal 10ms draus.
Java hat das z.B. durch diverse Tricks umgangen aber ob deine Anwendung das tut kann man eben nur durch Zugriff auf den Quellcode sehen oder wenn du dort solch einen Test mit sleeps machen kannst. Also einfach 1000mal 1ms sleepen, wenn der dann für alles deutlich länger als eine Sekunde benötigt, bist du schon weit von Echtzeit weg.
 
@MacGyver: danke, werde ich zur gegebenen Zeit mal implementieren und testen!

@ice-breaker: das klingt nicht gut... ansich muss ich daten mindestens im 10ms takt abfragen... hast du irgendeine offizielle quelle, die deine aussage bestätigt? (nicht das ich dir nicht glauben würde... aber mein arbeitgeber wird sich denke ich mal nicht von jemand anonymen überzeugen lassen, sry ;) )
 
Hier kannst du technische Hintergründe zum Timer lesen.
Dort kommen auch die von mir genannten Funktionen bezüglich des High Resolution Timers vor.

Und hier gibts ein kostenloses Programm für Windows XP mit dem man den Timer beeinflussen kann. Für Windows 7 kostet es was.
 
@MacGyver

Ich hab nun mal das Beispiel programmiert, aber ich komme nicht zum erfhofften Ergebnis.
Da ich mir in diesem Thread nur wenig Hilfe erhoffe hab ich es in einem anderen Teil des Forums gepostet.
Könntest du bitte dennoch einen Blick drauf werfen und mir vielleicht sagen was ich falsch mache?
https://www.computerbase.de/forum/threads/c-timer-resolution.1063653/

Liebe Grüße,
Memnoch.
 
In dem neuen Thema steht ja schon was dazu. Mehr kann ich dazu auch nicht sagen.
 
Zurück
Oben