2016-03-19 10 views
3

Ich erstelle meine eigenen verkabelten Simulationsmodell, wo Knoten geschichtete Architektur haben.Selbstauslösung ist langsam in OMNet ++

Anwendungsschicht erzeugt periodisch Pakete planen dann selbst

scheduleAt(simTime() + 0.00000000625,AppModuleSelfTrigger); 

Dieses Paket wird dann unter Verwendung von in der nächst niedrigeren Schicht Modul gepuffert. Das untere Schichtmodul überprüft dann diesen Puffer periodisch auf Pakete. Ich Erreichung dieses Ziels durch diese Schicht Modul Terminierung als auch mit

scheduleAt(simTime() + 0.00000000625,LowerLayerModuleSelfTrigger); 

ähnlicher Weise alle unteren Schichten, die Puffer verwendet, ich Triggern sie ebenfalls in regelmäßigen Abständen selbst auszulösen und prüfen, ob alle gepufferten Pakete zu senden.

Dieser Ansatz funktioniert gut. Wenn ich jedoch die Verzögerung (0.00000000625) weiter reduziere, dann werden die GUI-Paketflussnähte langsam (z. B. nachdem ich ein Paketflussereignis sehe, muss ich sehr lange warten, um den nächsten Paketfluss in OMNe ++ GUI zu sehen). Aber wenn ich diesen Verzögerungswert erhöhe und stattdessen einen höheren Dezimalwert verwende, z. 0,2, dann scheint das GUI-Paket fließt Ereignisse schnell (und ich muss nicht viel warten, bis das nächste Paket in der GUI zu sehen).

Aber das Problem mit der Einstellung dieser Verzögerung zu höheren Werten wie 0,2 erhöht die Paketlatenz (gemessen als simTime() - PacketCreationTime).

Also, ich bin im Zweifel, wenn ich den gesamten Prozess der Selbstauslösung richtig verwende oder ich muss einige signifikante Verbesserungen vornehmen.

+0

Beeinflusst die "Animationsgeschwindigkeit" die Verzögerung beim Anzeigen des nächsten Ereignisses? Testen Sie im "Run" oder "Fast" Modus? –

+0

Nein, Ereignisse werden wie üblich generiert. Der Fast-Modus zeigt keine Gui-Effekte an, daher teste ich das nur mit Run. Bei dieser Frage frage ich nur, ob eine solche Selbstplanung besser ist oder ob es andere Möglichkeiten gibt, dasselbe zu verwenden, ohne 'templeAt()' zu verwenden. Gibt es auch eine Möglichkeit, der Simulation die Tick-Dauer und Tick-Häufigkeit mitzuteilen? – user3243499

+0

Self-Nachricht ist eine universelle Möglichkeit, eine Aktion in der Zukunft zu planen. Es kann verwendet werden, um verschiedene Aktionen zu modellieren. Ich denke aber, dass in Ihrem Fall 'sendDelayed()' möglicherweise genug ist, weil Sie wahrscheinlich nur später dieses Paket * senden * wollen. Meiner Kenntnis nach gibt es keine Möglichkeit, die Dauer der GUI-Ticks zu kontrollieren. Es gibt nur eine Option, um die Genauigkeit der Zeitdarstellung in der Simulation zu steuern (ganze Simulation, nicht nur GUI) - siehe Option "simtime-scale" für ini-Datei. –

Antwort

2

Ein Ereignis alle 6,25-9 Sekunden einzuplanen, um Änderungen im Puffer abzufragen, erscheint als eine suboptimale Möglichkeit, ein Simulationsmodell zu strukturieren. Nimmt man sieben Schichten pro Host an, würde man über eine Milliarde Ereignisse pro Sekunde pro Host verschwenden, nur um sicherzustellen, dass der Puffer tatsächlich unverändert ist. Obwohl jedes Ereignis nur wenige CPU-Zyklen für die Verarbeitung kostet, summieren sich die Dinge schnell.

Ich würde empfehlen, Ihre Simulationsmodelle so zu schreiben, dass sie die Tatsache nutzen, dass sie kennen, wenn sich der Puffer ändert. Im Simulationsmodell muss nicht abgefragt werden.

Zum Beispiel gehen wir davon aus, eine Schicht modellieren, die 10 ms nimmt ein Paket zu verarbeiten und dass seine Pufferstaat polls alle 5 ms. Angenommen, ein Rahmen erreicht zum Zeitpunkt t = 3 ms einen leeren Puffer. Zu diesem Zeitpunkt können wir sofort berechnen, dass der Rahmen bemerkt wird, wenn der Puffer als nächstes abgefragt wird (bei t = 5 ms) und 10 ms später gesendet wird (bei t = 15 ms). Um diesen Prozess zu modellieren, muss also nur ein "Frame gesendet" -Ereignis bei t = 15 ms eingeplant werden. Wir mussten nie abfragen.

+0

Genau das, was ich gesucht habe. Und das erklärt auch, warum mein Modell zu viel Zeit braucht, um die nächste Paketübertragung in der GUI zu sehen. Bitte schlagen Sie vor, wie Sie eine App erstellen, die Traffic generiert (ohne solche Self-Message-Techniken zu verwenden) – user3243499