[gelöst] Zeitauflösung von Sleep und co. erhöhen?



  • Echtzeitfähig subjektiv auf deine Wahrnehmungsfähigkeit. Das ist deine eigene Definition von Echtzeit in Betriebssysteme.



  • lowbyte_ schrieb:

    Aber Windows ist bis zu einem gewissen grad Echzeitfähig ( eben nur weiches Echtzeitverhalten).

    Klar. Also ein Garagentor würde ich damit schon steuern. Oder eine Farbenfabrik, wo keine Reaktion weniger als 5 Sekunden Zeit hat, um noch rechtzeitig zu sein. Je nach Anforderungen muß halt dies oder jenes am Windows spezialeingestellt werden. Zum Beispiel reicht für's Garagentor, wenn man die automatischen Updates abschaltet und die damit verbundenen Install-Reboot-Pausen.

    lowbyte_ schrieb:

    Und nur weil ich das am Anfang nicht so genau genomen habe hacken zwei hier im Forum auf mir herum. Konnte ja nicht wissen das es manche hier so eng sehen, oder das ich sogar manchen auf die Füsse trette.

    Ist bei Echtzeit sehr oft so. Wahrscheinlich, weil 85% der Poster nicht wissen, was Echtzeitfähigkeit ist, nämlich nur, daß Antworten innerhalb spezifizierter Schranken geliefert werden (*). Die Schranken müssen aber keineswegs sowas wie 5ms sein. Und es gibt auch keine Definition, die sagt, ab 1ms ist es Echtzeit. Beim Garagentor brauche ich gar keine harte Echtzeit, sondern mir reicht, wenn man durchschnittlich weniger als 1s und mit einer Wahrscheinlichkeit von unter 1/10000 mehr als 60s warten muß. Beim Farbenwerk geht vielleicht ein Kessel kaputt, wenn ich mal 5s überschreite. Da muß ich halt was besorgen, was 5s garantiert. Tue ich das nicht, darf ich vielleicht den nächsten Kessel selber bezahlen. Oder ich kann glaubwürdig abschätzen, daß ein hübsch eingestelltes Windows die 5s so selten überschreitet, daß man das Risiko eingehen sollte. Ist ja nur eine Farbenfabrik und kein Atomkraftwerk.

    lowbyte_ schrieb:

    Aber es schadet sicher nicht einem Prozess bisschen höhere Priorität zu geben, so das er bei einem ausgelasteten System nicht zu kurz kommt und wenigstens (weiches echtzeitverhalten einhält, wobei hier die Range undefiniert ist).

    Ja. Wenn man so lustig drauf ist, auf dem Prozessrechner Counterstrike zu zocken, ist das eine sehr gute Idee. Aber den Schneid hätte ich nicht. Alle Windowsdienste, die was im Hintergrund machen, sollten bereits auf einer niedrigen Priorität laufen.

    (*) Wegen diesem Satz werde ich bestimmt beschimpft werden und werde erfahren müssen, daß in einerm Unternehmen in Bielefeld alle unter Entzeitfähigkeit was ganz anderes verstehen und es auch ein Professor gesagt hat und so...



  • Hi

    Und nochwas, ich bin kein besserwisser, und werde mich in Zukunft sehr genau ausdrücken, dass ich hier ja niemandem auf die Füsse trete.

    @Volkard

    Sehr gutes Bsp. von dir.

    lowbyte



  • Hi

    @Volkard

    Nicht dass ich jetz hier einen auf Kumpel machen will, doch mit dir konnte man sich immer anständig unterhalten. 👍

    lowbyte



  • @lowbyte_:
    Mich hat nicht so sehr gestört dass du hier was falsches behauptet hast, sondern die Art und Weise wie du ausgeflippt bist und den Thread hier zugespamt nachdem du mit "Schlaumeier" betitelt wurdest. Ist ja auch wirklich ein ganz schlimmes Wort.

    Und dass du - wie ein kleines Kind - immer darauf beharrst dass du ja in wirklichkeit doch Recht hattest, nur dich falsch ausgedrückt oder was auch immer. Der Hund wars, der hat die Hausaufgabe gefressen, ja ehrlich.

    Aber Windows ist bis zu einem gewissen grad Echzeitfähig ( eben nur weiches Echtzeitverhalten).

    Soft-Realtime ist ein dummer Begriff für dumme Leute. Warum? Weil er *nichts* aussagt, ausser dass Soft-Realtime eben nicht Realtime ist. Man kann statt Soft- also genau so gut Nicht- schreiben.



  • Hi

    Eben Ansichtssache...

    lowbyte



  • Hi

    Weisst du Hustbaer, realtime ist ein weiter Begriff, denn so wie es scheint nicht alle gleich sehen.
    Und am Anfang haben wir noch gar nicht von soft und hard geredet, daher meine Ansichten das Windows Echzeitfähig ist, oder muss wohl besser sagen
    (( nur soft-realtime )).Wie gesagt werde mich in zukunft genauer ausdrücken.

    lowbyte



  • Also Leute! Keine Software ist wirklich zu hartem Echtzeitverhalten fähig!

    hartes Echtzeitverhalten = Hardware
    weiches Echtzeitverhalten = Software

    Software kann nur unter ganz genau definierten Bedingungen(CPU Last...)hartes Echtzeitverhalten liefern. Aber das kann dann sogar Windows!

    Wir haben mal eine Anlage für einen Autohersteller gebaut die mit Windows NT gesteuert wurde. In der Automobilindustie gelten sehr strenge Bedingungen wie z.B. hartes Echtzeitverhalten. Um das zu garantieren wurde eine Hardware entwickelt die das PNOZ abfallen lässt wenn die vorgeschriebene Reaktionszeit nicht eingehalten wird.

    Das passierte dann immer Montag früh, weil Windows einfach keine Woche ohne Neustart durchhält... 😃

    Aber zum eigentlichen Thema: Für die Kommunikation mit der SPS hat der Hersteller doch sicher eine Lösung? Falls nicht würde ich sowas eher mit einem Mikrocontroller machen.

    Wenn es unbedingt Windows sein soll/muß würde ich keine Funktionen wie Sleep oder so einsetzen sondern lieber etwas CPU-Zeit verschenken um das Timing einzuhalten. Wenn sowiso kein anderer Prozess/Thread im Weg ist der viel CPU-Zeit braucht ist es ja auch total egal. Man sollte dann auch drüber nachdenken ev. einen Assembler einzusetzen.



  • moetan schrieb:

    Also Leute! Keine Software ist wirklich zu hartem Echtzeitverhalten fähig!

    Falsch. Warum sollte das so sein?

    moetan schrieb:

    hartes Echtzeitverhalten = Hardware
    weiches Echtzeitverhalten = Software

    Falsch. Siehe zum Beispiel Definition auf Wikipedia.

    moetan schrieb:

    Software kann nur unter ganz genau definierten Bedingungen(CPU Last...)hartes Echtzeitverhalten liefern.

    Kommt drauf an. Also im Allgemeinen falsch.

    moetan schrieb:

    Aber das kann dann sogar Windows!

    Falsch.

    moetan schrieb:

    weil Windows einfach keine Woche ohne Neustart durchhält... 😃

    Falsch. Das war vor 15 Jahren so.

    moetan schrieb:

    Wenn es unbedingt Windows sein soll/muß würde ich keine Funktionen wie Sleep oder so einsetzen sondern lieber etwas CPU-Zeit verschenken um das Timing einzuhalten. Wenn sowiso kein anderer Prozess/Thread im Weg ist der viel CPU-Zeit braucht ist es ja auch total egal.

    Quatsch. Es wird nicht sicherer, weil man die CPU seltener weggezogen kriegt! Im Gegenzeil, frische Zeitscheibenabschnitte sind langlebiger.

    moetan schrieb:

    Man sollte dann auch drüber nachdenken ev. einen Assembler einzusetzen.

    Inwiefern hält das das Windows davon ab, meinen Prozess von der CPU zu nehmen?



  • Falsch. Das war vor 15 Jahren so.

    Nein, das ist mit Win2000 und XP noch heute so!

    8auf den Rest der Antwort werde ich jetzt mal nicht eingehen.)



  • moetan schrieb:

    Falsch. Das war vor 15 Jahren so.

    Nein, das ist mit Win2000 und XP noch heute so!

    Ich benutze genau jetzt XP und es ist nicht der Fall.



  • Zum Echtzeitverhalten schreib ich mal nichts, ich will ja noch ein wenig leben...

    Quatsch. Es wird nicht sicherer, weil man die CPU seltener weggezogen kriegt! Im Gegenzeil, frische Zeitscheibenabschnitte sind langlebiger.

    Das Problem ist aber doch nur die schlechte Auflösung der Windows Funktionen! Wenn kein anderer thread die zeit braucht hat man sie.

    Inwiefern hält das das Windows davon ab, meinen Prozess von der CPU zu nehmen?

    Wohl kaum, aber man kann besser mit sowas umgehen bzw. recht gut optimieren. Aber soweit würde ich dann auch nicht gehen.



  • Ich benutze genau jetzt XP und es ist nicht der Fall.

    du hast seit über einer Woche keinen Neustart gemacht und es läuft immer noch stabil und einigermaßen schnell? Das wäre echt ein Wunder!



  • mraka schrieb:

    Das Problem ist aber doch nur die schlechte Auflösung der Windows Funktionen! Wenn kein anderer thread die zeit braucht hat man sie.

    moetan hatte anscheinend immer genug Zeit, daß Windows immer rechtzeitig antworten konnte (außer es hat mal neu gebootet). Es geht also wohl nirgends um 15ms. Da halte ich es für eine gute Idee, oft zu Sleepen, das gibt dem Windows mehr Gelegenheit, die komischen Privatsachen gerade dann zu machen, wenn ich gerade nichts zu tun habe, es mich also nicht verlangsamt.
    Nehme ich alle Prozessorzeit für mich, dann riskiere ich, daß Windows irgendwann die Nase voll hat und was macht, obwohl ich auch was machen will.



  • moetan schrieb:

    du hast seit über einer Woche keinen Neustart gemacht und es läuft immer noch stabil und einigermaßen schnell? Das wäre echt ein Wunder!

    Keine Auslagerungsdatei, keine Viren, kein Virenscanner, ich arbeite nie als Admin, es ist erst ca ein Jahr alt, die Terabyteplatte ist nur zu 16% voll.
    Im Moment ist die Uptime kleiner als eine Woche, weil ich öfters mal zum Linux auf der anderen Platte umgebootet habe. Aber ich habe nie gebootet, weil er langsam geworden wäre und abstürzen tut er auch nicht. In der Küche habe ich einen XP-Rechner stehen, der macht nur einen auf Fileserver. Mal nachgucken...
    Ähm, leichter gesagt als getan, wie frage ich denn die uptime ab?
    edit: Habs gefunden.

    C:\irgendwo>net statistics server
    Serverstatistik für \\IRGENDWER
    
    Statistik seit 6/15/2010 6:37 PM
    ...
    


  • Ich dachte es geht gerade drum unter 15ms zu kommen???
    Windows teilt immer die verfügbare Zeit unter allen Threads auf. Es braucht kein Sleep oder so!

    Das Sleep ist nur da um Windows mitzuteilen das man einige Zeit nichts zu tun hat. Das ist normalerweise sinnvoll weil andere Threads diese Zeit nutzen können. Es gibt aber eine minimale Zeit(bei XP wohl so um die 15ms). Wenn man also wie in diesem Fall gar keine anderen Threads hat die wirklich die Zeit brauchen macht es ja gar keinen Sinn.



  • Wir sprechen hier von Extremsituationen, da hat jeder seine eigene Meinung. Jedenfalls ist Windows für sowas ganz sicher nicht gedacht. Ich würde dann auch eher zum Mikrocontroller raten. Da kann kein anderer Thread dazwischen kommen. 😃



  • @volkard

    Ich glaube moetan meinte industrielle Anwendungen. Da hat Windows permanent ordentlich was zu tun und nach 1-2 Wochen wird es deutlich langsamer. Deshalb startet man normalerweise immer am WE neu und hat diese Montagsprobleme nicht.



  • @hustbaer: Danke. Hab gerade mal deinen code ausprobiert, auch auf nem anderen Rechner und da dann mit VC 2010 express, aber unter 15ms komme ich trotzdem nicht, obwohl ( timeBeginPeriod(min) == TIMERR_NOERROR ) bei mir auch true ist. Der Bill ist mal wieder so fies zu mir. 😉
    Ich werd dann nochmal berichten, wie schlimm die Abweichung mit dem Performance-Counter ist und was meine weiteren Test von Geekys Sleep-Variante ergeben.

    @Microcontrollervorschlag: Ja, es mag sein, dass es elegantere Lösungen für diese Sache gibt, aber die mir vorgegebene Hardwarekonfiguration ist nun schon vielfach vorhanden und lässt sich aus Kostengründen deshalb nicht mehr ändern.

    @loybyte: ><(({°>
    😉



  • ich stand vor dem gleichen Problem und habe aufgegeben. Man kann mit einem Multicore Prozessor nicht mehr unter die 15ms kommen. Jedenfalls nicht einigermaßen sicher. Oder hat sich noch eine brauchbare Lösung gefunden?


Anmelden zum Antworten