mirror of
https://github.com/GNS3/gns3-server.git
synced 2026-11-03 14:01:15 +02:00
perf: cache compute.host_ip + add UDPLink.create timing log
host_ip resolved socket.gethostbyname on every access with no cache. get_ip_on_same_subnet touches host_ip 2-4 times per link, so opening a 2500-link project issued thousands of blocking DNS calls inline on the event loop — freezing all concurrent link coroutines each time. This is the most likely cause of the 12-link/s throughput (1000x below what Pool(concurrency=100) should deliver) and the burst+pause pattern. - compute.host_ip: cache the resolution in _host_ip_cache, invalidate on host setter change - UDPLink.create: timing log splitting get_ip / ports / nio so the next project-open confirms where time actually goes
This commit is contained in:
2 files changed
+24
-4
No files matched your search
@@ -98,6 +98,10 @@ class Compute:
|
||||
self.name = name
|
||||
# Cache of interfaces on remote host
|
||||
self._interfaces_cache = None
|
||||
# Cached resolution of self._host — socket.gethostbyname is a blocking
|
||||
# call; resolving it on every host_ip access (several times per link
|
||||
# via get_ip_on_same_subnet) freezes the event loop for all coroutines.
|
||||
self._host_ip_cache = None
|
||||
self._connection_failure = 0
|
||||
|
||||
def _session(self):
|
||||
@@ -224,14 +228,17 @@ class Compute:
|
||||
"""
|
||||
Return the IP associated to the host
|
||||
"""
|
||||
try:
|
||||
return socket.gethostbyname(self._host)
|
||||
except socket.gaierror:
|
||||
return "0.0.0.0"
|
||||
if self._host_ip_cache is None:
|
||||
try:
|
||||
self._host_ip_cache = socket.gethostbyname(self._host)
|
||||
except socket.gaierror:
|
||||
self._host_ip_cache = "0.0.0.0"
|
||||
return self._host_ip_cache
|
||||
|
||||
@host.setter
|
||||
def host(self, host):
|
||||
self._host = host
|
||||
self._host_ip_cache = None # invalidate; re-resolve on next access
|
||||
if self._console_host is None:
|
||||
self._console_host = host
|
||||
|
||||
|
||||
Reference in new issue
Block a user