mirror of
https://github.com/GNS3/gns3-server.git
synced 2026-08-27 20:40:13 +03:00
perf: raise marker UDP receive buffer from ~208KB to 8MB
1000+ uBridge processes share a single UDP marker.sink endpoint. The default kernel receive buffer (~208 KB) holds ~1000 datagrams — a traffic burst can overflow it before the event loop drains them. Grow it to 8 MB via setsockopt(SO_RCVBUF) so the kernel absorbs bursts without silent packet loss. UDP is unordered — buffer size does not affect per-datagram latency, only burst-loss resilience.
This commit is contained in:
parent
6c0ec30d5d
commit
a699383933
@ -17,6 +17,7 @@
|
||||
|
||||
import asyncio
|
||||
import logging
|
||||
import socket
|
||||
|
||||
from gns3server.compute.marker.marker_listener import MarkerListener
|
||||
from gns3server.compute.notification_manager import NotificationManager
|
||||
@ -75,10 +76,20 @@ class MarkerManager:
|
||||
return
|
||||
loop = asyncio.get_running_loop()
|
||||
self._listener = MarkerListener(self)
|
||||
|
||||
def _configure_transport(transport):
|
||||
sock = transport.get_extra_info("socket")
|
||||
if sock is not None:
|
||||
# Raise the UDP receive buffer from the default ~208 KB to 8 MB
|
||||
# so that 1000+ uBridge processes can burst marker.match signals
|
||||
# without kernel-side datagram loss.
|
||||
sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 8 * 1024 * 1024)
|
||||
|
||||
try:
|
||||
self._transport, _ = await loop.create_datagram_endpoint(
|
||||
lambda: self._listener, local_addr=(host, port)
|
||||
)
|
||||
_configure_transport(self._transport)
|
||||
except OSError:
|
||||
if port != 0:
|
||||
log.warning(
|
||||
@ -88,6 +99,7 @@ class MarkerManager:
|
||||
self._transport, _ = await loop.create_datagram_endpoint(
|
||||
lambda: self._listener, local_addr=(host, 0)
|
||||
)
|
||||
_configure_transport(self._transport)
|
||||
except OSError as e:
|
||||
log.error(
|
||||
"Marker listener startup failed: %s. Traffic insight signals are unavailable.", e
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user