Performance von JSON-RPC calls

Ich habe IPS auf einer WIn10-Box laufen (32 GB RAM), und einen webserver auf einer Virtual Machine (Hyper-V, Arch Linux, Nginx). Physisch liegt alles auf der gleichen Hardware; die VM und der Host sind via Hyper-V Virtual Switch verbunden. Die VM hat ihren eigenen Ethernet-Anschluss (1GB/s) Der Webserver holt sich die Daten von 40 Enocean-Kontakten über JSON-RPC.

Nun, anscheinend braucht die Abfrage von 4 IPS-Variablen ziemlich viel Zeit. Folgender Snippet


$ReedObject = IPS_GetObject($modulId);
$ReedState['ParentID'] = IPS_GetName($ReedObject['ParentID']);
$ReedChild = IPS_GetChildrenIDs($modulId);
$ReedChildVariable = IPS_GetVariable($ReedChild[0]);

dauert zwischen 270 und 320 ms. Wenn ich das 40-mal schlaufen lasse, wird es also kritisch - denn es geht ewig bis die Webseite aufgebaut wird.

Meine Frage ist: lässt sich eventuell etwas daran schrauben? Liegt das Nadelöhr an der VM, oder am Hyper-V-Switch, oder an IPS? (hoffentlich nicht!) Oder ist JSON-RPC bei anderen Tasks auch so langsam? Was meint Ihr?

btw, der gleiche Block dauert 0.13ms im IPS nativ (Win10)…

127.0.0.1 oder localhost? Hast du evtl. eine Hostnameauflösung die so viel Zeit kostet?

paresy

Gute Idee, danke. Die zwei Systeme sind physisch auf der gleichen Maschine aber haben zwei getrennte IPs (und auch separate Ethernet-Anschlüsse). Direktes ansprechen der IP (anstelle von DNS) spart etwa 20%. Ist aber immer noch viel zu langsam, ca. 100x langsamer als nativ.

Wahrscheinlich würde alles viel besser laufen wenn ich IPS vom Win10 host auf die gleiche Archlinux VM migriere, wo auch der Webserver lebt.

Update: IIS Webserver auf Win10 installiert (anstelle von nginx auf einer archlinux VM). Somit keine DNS-lookups da alles auf localhost läuft. Ergebnis: die Abfrage von ca. 40 Variablen via JSON-RPC braucht nun 1100 msec anstelle von 12 Sekunden. Immer noch nicht blitzschnell, aber nun doch erträglich.