perf: 40% LESS CPU usage: cut per-instance CPU cost of shared socket.io Redis pub/sub channel (#27282)
* perf: cut per-instance CPU cost of shared socket.io Redis pub/sub channel Profiling a multi-instance deployment (py-spy --gil) showed ~44% of worker CPU in the socket.io pub/sub listener. Two causes, two fixes: - Add hiredis so redis-py parses the RESP protocol in C instead of pure Python (redis/_parsers/resp3.py alone accounted for ~28% of GIL samples; redis-py auto-selects the hiredis parser when importable). - Subclass AsyncRedisManager to drop emits whose target room has no local participants before upstream _handle_emit re-encodes the full packet. Every instance receives every emit published on the shared channel, so with N instances all but the hosting one were paying full packet re-serialization per message just to deliver it to nobody. Broadcasts (room=None) are unaffected. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q9CQ9qnp3sZGYQQwztsCJT * fix: restrict pub/sub emit early-out to string rooms Adversarial review against python-socketio 5.16.2 found one divergence from upstream: for a degenerate empty-sequence room (emit to room=[]) on an instance whose namespace has no local clients, the filter's get_participants probe raises IndexError from room[0] where upstream returns silently at the namespace guard and still publishes to Redis. Open WebUI only ever emits to scalar string rooms or room=None, so the case is unreachable today; guard on isinstance(room, str) anyway so any non-string room shape passes through to upstream behavior unchanged. Every open-webui emit uses a string room, so the fast path still covers all real traffic. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q9CQ9qnp3sZGYQQwztsCJT * Update requirements.txt * Update pyproject.toml * Update requirements-min.txt --------- Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
1 parent
aaf2834db7
commit
32242a6788
4 files changed
+29
-3
No files matched your search
@@ -30,7 +30,8 @@ psycopg[binary]==3.3.4
|
||||
alembic==1.18.4
|
||||
|
||||
pycrdt==0.13.1
|
||||
redis==8.0.0
|
||||
redis==8.0.1
|
||||
hiredis==3.4.0
|
||||
|
||||
APScheduler==3.11.2
|
||||
RestrictedPython==8.2
|
||||
|
||||
Reference in new issue
Block a user