Ankündigung

Einklappen
Keine Ankündigung bisher.

Darf's ein bisschen schneller sein?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #31
    Ein kurzes Update von meiner Seite:

    Die Begrenzung der maximalen Telegramme funktioniert grundsätzlich, jedoch erscheint mir diese Art der Limitierung ungeeignet. Getestet habe ich ein Limit von 10, über 20, bis hin zu 50 Telegrammen pro Durchlauf. Bei 10 Telegrammen merkt man noch eine gewisse Trägheit der Pluginabarbeitung. Bei 50 Telegrammen entsprechend wesentlich flotter. Aufgefallen ist mir hierbei, dass die Ausführdauer sehr unterschiedlich ist. Manchmal laufen 50 Telegramme in 0.1 Sekunden durch. In seltenen Fällen werden aber auch 6-8 Sekunden benötigt.

    Da die maximale Dauer eines jeden Plugins mit 10 Sekunden limitiert ist, könnte theoretisch monit nach nur 6-7 Telegrammen zuschlagen (zugegeben, wenn dies der Fall werden würde, hat man auch ganz andere Probleme ).

    Sinnvoller erscheint mir daher eine zeitliche Limitierung. In Anlehnung an das "10 Sekunden Limit" pro Plugin, habe ich auch die While Schleife auf 10 Sekunden begrenzt. Somit würde im Worst Case nur ein Telegramm abgearbeitet werden und im Regelbetrieb ist eine schnelle Abarbeitung der auflaufenden Telegramme garantiert, ohne dass monit zuschlagen könnte.

    Meine Anpassung sieht nun fogendermaßen aus (sinnvollerweise könnte man das Limit auch als Variable einbinden, habe ich mir jedoch erspart):
    Code:
    my $stime = time();
    while (($select->can_read(.1)) and (time() < $stime+10)) { # EIB Packet processing

    Kommentar


      #32
      Zitat von XueSheng Beitrag anzeigen
      Sinnvoller erscheint mir daher eine zeitliche Limitierung. In Anlehnung an das "10 Sekunden Limit" pro Plugin, habe ich auch die While Schleife auf 10 Sekunden begrenzt. Somit würde im Worst Case nur ein Telegramm abgearbeitet werden und im Regelbetrieb ist eine schnelle Abarbeitung der auflaufenden Telegramme garantiert, ohne dass monit zuschlagen könnte.
      Zwei identische Grenzwerte? 10 + 10
      Macht es nicht Sinn den Timer geringer zu wählen, da ja die Abarbeitung der Whileschleife noch Addon kommt.
      cu
      Andreas


      Aus dem Norden? Schau mal rein, Stammtisch-Nord!

      Kommentar


        #33
        Ich weiss nicht wie exakt das 10 Sekunden Timeout der Plugins greift. Im schlimmsten Fall würden knapp 10 Sekunden verstreichen und dann ein Plugin mit einem Timeout ans Limit gehen... dann würde die Schleife maximal knapp 20 Sekunden benötigen. Ist imho immer noch unkritisch für einen stabilen Betrieb!

        Kommentar


          #34
          Nur zur Vollständigkeit:

          Nach einigen Tagen Testen möchte ich noch mal bestätigen, dass die Limitierung der While Schleife durch eine zeitliche Begrenzung von 10 Sekunden tadellos funktioniert. Große Telegrammfluten, die nicht weiter durch Plugins verarbeitet werden müssen, werden schnell verarbeitet.

          Situationen, die bislang zum wiregated.pl restart geführt haben (timout), werden sauber abgefangen. Daher seit dem keine Restarts mehr! Für mich ist die Welt erst mal wieder in Ordnung .

          Achso, noch eine Info:
          In den letzten Tagen war die maximale Ausführdauer der Schleife 10.4 Sekunden (was daran liegt, dass meine "langsamsten/komplexesten" Plugins, die über GAs aufgerufen werden, rund 300-400ms benötigen). Wie bereits diskutiert, wird eine Ausführdauer bis rund 20 Sekunden bei dem genannten 10 Sekunden Limit toleriert.

          Kommentar


            #35
            Ich versuche Laufzeiten von Plugins _möglichst_ unter 1s zu halten, im Ausnahmefall (zB SMS-Versand über sipgate) auch mal bis zu 2s. Darüber betrachte ich das Plugin als buggy, oder sagen wir mal definitiv verbesserungswürdig.

            Ich empfehle anderen die gleiche Zielsetzung. Falls man das nämlich nicht hinkriegt, wird es dazu kommen, dass das Wiregate gefühlt "träge" reagiert. Dann wird es bspw für Lichtlogiken über den Logikprozessor nervig.

            Auch eine Alternative: den wiregated-Daemon nur für die 1wire-Geschichten und die weniger zeitkritischen Dinge laufen lassen, und in einem Parallelprozess Jumis knxd starten, der ja für die Plugins vollkompatibel mit dem wiregated ist und in dem dann alle zeitkritischen Plugins laufen können.

            Das habe ich mir mittelfristig vorgenommen so einzurichten.

            VG, Fry

            PS. @Xue: ich bin wirklich neugierig, was bei dir dieses massive Trafficaufkommen verursacht. Ich bin deiner Methode gefolgt, mein Timeout der while-Schleife ist aber 2s. Ohne Probleme.

            Kommentar


              #36
              Zitat von Fry Beitrag anzeigen
              PS. @Xue: ich bin wirklich neugierig, was bei dir dieses massive Trafficaufkommen verursacht. Ich bin deiner Methode gefolgt, mein Timeout der while-Schleife ist aber 2s. Ohne Probleme.
              Wie bereits zu Anfang geschrieben verursacht bei mir die Helligkeitsregelung der Dali Beleuchtung für einen zeitweise kontinuierlichen Telegrammversand. 46 EVGs, die über das Dali Gateway sowohl Status AN/AUS, als auch Helligkeitswert übertragen. Fast alle Leuchten werden über eine automatische Helligkeitsregelung (PM) gesteuert (wenn nötig, wird alle 2 Sekunden der Helligkeitswert aktualisiert).

              Für eine Testvisualisierung hatte ich eine Auswertung aller StatusGA (Zentral Status pro Raum/Etage/Haus). Das Skript selbst braucht ca. 200ms pro Aufruf. Pro Raum habe ich durchschnittlich drei EVGs. Wenn ich also durch 4 Räume laufe, werden alle zwei Sekunden 12 Telegramme geschickt. Bei 200ms sind dies 2,4 Sekunden Laufzeit. Alleine in dieser Situation kann die Schleife nicht mehr verlassen werden, da mehr Telegramme ankommen als das jeweilige Plugin verarbeiten kann! Hinzu kommen natürlich noch andere Telegramme, die ausgewertet werden wollen.

              Das Wiregate kann natürlich auf verschiedenste Weise eingesetzt werden und jeder muss selbst wissen, ob er es für zeitkritische Logiken einsetzen möchte oder nicht. Wobei man immer im Hinterkopf behalten muss, dass die Pluginfähigkeit des Wiregate eher eine nette Zugabe ist und nicht für zeitkritische Logiken konzipiert wurde!

              Aus diesem Grund spielt es meiner Meinung nach auch keine wesentliche Rolle, ob das timeout der While-Schleife nun 2 oder 10 Sekunden ist. Das verhindert am Ende des Tages nur, dass die Prozesse der übergeordneten Schleife blockiert werden und monit zuschlägt.

              Das Auslagern von Plugins z.B. Richtung knxd ist natürlich eine Möglichkeit sich mehr Freiraum zu schaffen... Wobei man sich dann natürlich die Frage stellen muss, ob man nicht das Pluginkonzept weiter optimieren könnte (z.B. durch teilweise parallele Abarbeitung von Plugins, wobei das gleiche Plugin natürlich nicht mehrfach aufgerufen werden dürfte, aber das gehört sicherlich in einen anderen Thread).

              Kommentar


                #37
                Wobei man immer im Hinterkopf behalten muss, dass die Pluginfähigkeit des Wiregate eher eine nette Zugabe ist und nicht für zeitkritische Logiken konzipiert wurde!
                Jupp, aber dafür funktioniert es hier ziemlich gut :-)
                VG, Fry

                Kommentar

                Lädt...
                X