[GH-ISSUE #1749] [RFC]: Optimizing Mooncake TCP Transport for High-Concurrency Throughput #507

Closed
opened 2026-10-29 21:15:37 +00:00 by bsakaguchi · 6 comments
Owner

Originally created by @yxj-97 on GitHub (Mar 26, 2026).
Original GitHub issue: https://github.com/kvcache-ai/Mooncake/issues/1749

Originally assigned to: @alogfans, @maheshrbapatu on GitHub.

Changes proposed

1. Summary

This RFC proposes optimizations to Mooncake TCP Transport by introducing multiple io_contexts for parallel processing, a concurrency limiter, asynchronous connection establishment, and CUDA asynchronous copy, in order to improve throughput and GPU memory transfer efficiency under high-concurrency workloads.

2. Motivation

2.1 Current Architecture Analysis

The existing TCP Transport uses a single io_context and worker thread model:

Image

2.2 Performance Bottlenecks

Bottleneck Cause Impact
Single-threaded I/O A single io_contexts is driven by a single worker thread, so CPU multicore resources cannot be used in parallel to process I/O events. Throughput becomes limited under high concurrency. Low utilization of multicore CPUs
Synchronous connection establishment getConnections waits synchronously for TCP three-way handshake completion. Blocks the calling thread; connection latency propagates into transfer latency
No concurrency limit Transfer tasks are submitted without restriction. File descriptor exhaustion, memory pressure, and system instability during traffic spikes
Synchronous CUDA copy cudaMemcpy blocks until the copy completes. Blocks the I/O thread, preventing it from handling other socket events
Temporary buffers Each CUDA transfer allocates and frees a temporary buffer via new/delete. Memory allocation overhead and fragmentation

2.3 Current Performance

In an environment measured by iperf3 with 10.8 GB/s bandwidth, the current performance is as follows:

Scenario Bandwidth Bandwidth Utilization
DRAM transfer 3.2 GB/s 30%
VRAM transfer 2.3 GB/s 22%

2.4 Design Goals

  • Fully utilize multicore CPUs to improve throughput under high-concurrency workloads
  • Make connection establishment asynchronous to eliminate blocking
  • Limit the number of concurrent transfers to keep resource usage controllable
  • Make GPU memory transfers non-blocking so they do not interfere with I/O threads

3. Proposed Design

3.1 Architecture Overview

Image

3.2 Multi-IO Context Pool

3.2.1 Design Principles

In the current single io_context model, all socket events (accept, read, write) are handled by the same thread through io_context.run(). On multicore systems, this leads to:

  • One core being fully saturated while other cores remain idle
  • The internal ASIO queue becoming a contention hotspot

The proposed improvement is:

  • Create N independent io_contexts, each running in its own thread
  • Bind each io_context to an independent acceptor, and use SO_REUSEPORT to achieve kernel-level load balancing
  • Distribute client connections to different io_contexts in round-robin fashion

Configure the number of I/O threads via the MC_NUM_TCP_IO_THREADS environment variable

3.2.2 Acceptor Load Balancing

Use SO_REUSEPORT to allow multiple sockets to bind to the same port, so the kernel can automatically distribute incoming connections across different acceptors:

Image

3.3 ConcurrencyLimiter

3.3.1 Design Principles

Unrestricted concurrency may cause:

  • File descriptor exhaustion
  • Memory pressure, since each transfer consumes buffers
  • Overload of the remote peer

A soft flow-control mechanism is introduced through ConcurrencyLimiter:

Image

3.3.2 Key Interfaces

Method Responsibility
submit(slice, fn) If the limit is not exceeded, execute fn
immediately; otherwise enqueue it
onTransferFinished(fn) Decrement the active count and try to dequeue and execute the next task
activeCount() Return the number of currently active transfers, for monitoring
pendingCount() Return the length of the waiting queue, for monitoring

3.4 Async Connection Pool

3.4.1 Differences from the Current Implementation

Feature Existing Implementation Proposed Solution
Acquisition method Synchronous blocking getConnection() Asynchronous asyncGetConnection(callback)
Connection failure handling Return error directly Retry with exponential backoff
Idle detection Clean up during acquisition Independent periodic cleanup timer
Statistics None Provide reuse/new connection counters

3.4.2 Retry Strategy

Exponential backoff with random jitter.

3.4.3 GC Mechanism

The connection pool maintains a periodic timer to scan and clean up:

  • Connections that have been idle for longer than a configured threshold
  • Invalid connections that have already been closed

3.5 CUDA Async Copy Subsystem

3.5.1 Current Problems

In the existing implementation, Session::writeBody / readBody have the following issues:

if (isCudaMemory(addr)) {
    dram_buffer = new char[size];           // temporary buffer
    cudaMemcpy(dram_buffer, addr, size, ...); // sync block
    // ... async_write ...
    delete[] dram_buffer;                    // release
}
  • Synchronous cudaMemcpy blocks the I/O thread, preventing it from handling other sockets during the copy
  • A temporary buffer is allocated and freed for each transfer, which incurs overhead

3.5.2 Proposed Solution

Pinned memory reuse:

  • Each Session holds a pinned buffer allocated via cudaMallocHost
  • The lifetime of the buffer is bound to the Session, avoiding repeated allocations and deallocations

Asynchronous copy + event polling:

  • Use asynchronous copy operations
  • Poll CUDA events to detect completion
Image

4. Configuration

4.1 New Configuration Items

Parameter Environment Variable Default Description
num_tcp_io_threads MC_NUM_TCP_IO_THREADS 8 Number of I/O threads (= number of io_context
s)
tcp_max_connections MC_TCP_MAX_CONNECTIONS 64 Maximum number of concurrent transfers

5. Compatibility

5.1 API Compatibility

Public APIs remain unchanged.

5.2 Behavioral Differences

Behavior Before After
Number of I/O threads 1 N (configurable)
Connection acquisition Synchronous Asynchronous
CUDA copy Synchronous and blocking Asynchronous and non-blocking
Concurrency control None With an upper limit

6. Performance

Benchmarking was performed using transfer_engine_bench.

6.1 Test Environment

CPU 23 cores
Network single-node loopback 47 GB/s, cross-node 10.8 GB/s (iperf3)
Test configuration io_threads=16, max_connections=64, io_size=1MiB

6.2 Test Results

6.2.1 Single-node Test

Memory Operation Native Optimized Improvement
DRAM read 6.73 GB/s 46.24 GB/s 6.9×
DRAM write 6.71 GB/s 45.39 GB/s 6.8×
VRAM read 2.36 GB/s 29.02 GB/s 12.3×
VRAM write 2.36 GB/s 29.25 GB/s 12.4×

6.2.2 Cross-node Test

Memory Operation Native Optimized Improvement
DRAM read 3.16 GB/s 10.73 GB/s 3.4×
DRAM write 3.29 GB/s 10.81 GB/s 3.3×
VRAM read 2.33 GB/s 10.68 GB/s 4.6×
VRAM write 2.31 GB/s 10.66 GB/s 4.6×

7. Rollout Plan

Phase Content
Phase 1 Multi-IO Context + ConcurrencyLimiter
Phase 2 Async Connection Pool
Phase 3 CUDA Async Subsystem + Session adaptation

Before submitting a new issue...

  • Make sure you already searched for relevant issues and read the documentation
Originally created by @yxj-97 on GitHub (Mar 26, 2026). Original GitHub issue: https://github.com/kvcache-ai/Mooncake/issues/1749 Originally assigned to: @alogfans, @maheshrbapatu on GitHub. ### Changes proposed # 1. Summary <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">This RFC proposes optimizations to Mooncake TCP Transport by introducing multiple io_contexts for parallel processing, a concurrency limiter, asynchronous connection establishment, and CUDA asynchronous copy, in order to improve throughput and GPU memory transfer efficiency under high-concurrency workloads.</font> # <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">2. Motivation</font> ## 2.1 <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Current Architecture Analysis</font> <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">The existing TCP Transport uses a single io_context and worker thread model:</font> <img width="1372" height="692" alt="Image" src="https://github.com/user-attachments/assets/e299d957-ec01-4cc3-842f-1eb94655e1a7" /> ## 2.2 <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Performance Bottlenecks</font> | **Bottleneck** | **Cause** | **Impact** | | --- | --- | --- | | Single-threaded I/O | A single io_contexts is driven by a single worker thread, so CPU multicore resources cannot be used in parallel to process I/O events. Throughput becomes limited under high concurrency. | Low utilization of multicore CPUs | | Synchronous connection establishment | getConnections waits synchronously for TCP three-way handshake completion. | Blocks the calling thread; connection latency propagates into transfer latency | | No concurrency limit | Transfer tasks are submitted without restriction. | File descriptor exhaustion, memory pressure, and system instability during traffic spikes | | Synchronous CUDA copy | cudaMemcpy blocks until the copy completes. | Blocks the I/O thread, preventing it from handling other socket events | | Temporary buffers | Each CUDA transfer allocates and frees a temporary buffer via new/delete. | <font style="color:rgb(0, 0, 0);background-color:rgb(239, 246, 255);">Memory allocation overhead and fragmentation</font> | ## <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">2.3 Current Performance</font> <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">In an environment measured by iperf3 with 10.8 GB/s bandwidth, the current performance is as follows:</font> | **Scenario** | **Bandwidth** | **Bandwidth Utilization** | | --- | --- | --- | | <font style="color:rgb(0, 0, 0);">DRAM transfer</font> | <font style="color:rgb(0, 0, 0);">3.2 GB/s</font> | <font style="color:rgb(0, 0, 0);">30%</font> | | <font style="color:rgb(0, 0, 0);">VRAM transfer</font> | <font style="color:rgb(0, 0, 0);">2.3 GB/s</font> | <font style="color:rgb(0, 0, 0);">22%</font> | ## <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">2.4 Design Goals</font> + <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Fully utilize multicore CPUs to improve throughput under high-concurrency workloads</font> + <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Make connection establishment asynchronous to eliminate blocking</font> + <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Limit the number of concurrent transfers to keep resource usage controllable</font> + <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Make GPU memory transfers non-blocking so they do not interfere with I/O threads</font> # <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">3. Proposed Design</font> ## <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">3.1 Architecture Overview</font> <img width="1400" height="736" alt="Image" src="https://github.com/user-attachments/assets/72cdb2f2-bcce-4d41-932c-f0e932a94961" /> ## 3.2 <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Multi-IO Context Pool</font> ### <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">3.2.1 Design Principles</font> <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">In the current single io_context model, all socket events (accept, read, write) are handled by the same thread through io_context.run(). On multicore systems, this leads to:</font> + <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">One core being fully saturated while other cores remain idle</font> + <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">The internal ASIO queue becoming a contention hotspot</font> <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">The proposed improvement is:</font> + <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Create N independent io_contexts, each running in its own thread</font> + <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Bind each io_context to an independent acceptor, and use SO_REUSEPORT to achieve kernel-level load balancing</font> + <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Distribute client connections to different io_contexts in round-robin fashion</font> <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Configure the number of I/O threads via the MC_NUM_TCP_IO_THREADS environment variable</font> ### <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">3.2.2 Acceptor Load Balancing</font> <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Use SO_REUSEPORT to allow multiple sockets to bind to the same port, so the kernel can automatically distribute incoming connections across different acceptors:</font> <img width="1372" height="584" alt="Image" src="https://github.com/user-attachments/assets/2ad9c9d0-58f4-418e-982b-bc5f847bc31d" /> ## <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">3.3 ConcurrencyLimiter</font> ### <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">3.3.1 Design Principles</font> <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Unrestricted concurrency may cause:</font> + <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">File descriptor exhaustion</font> + <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Memory pressure, since each transfer consumes buffers</font> + <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Overload of the remote peer</font> <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">A soft flow-control mechanism is introduced through ConcurrencyLimiter:</font> <img width="978" height="658" alt="Image" src="https://github.com/user-attachments/assets/b51fa534-a86c-4fc3-b726-9412d6ba5824" /> ### <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">3.3.2 Key Interfaces</font> | **Method** | **Responsibility** | | --- | --- | | submit(slice, fn) | If the limit is not exceeded, execute fn<br/> immediately; otherwise enqueue it | | onTransferFinished(fn) | Decrement the active count and try to dequeue and execute the next task | | activeCount() | Return the number of currently active transfers, for monitoring | | pendingCount() | Return the length of the waiting queue, for monitoring | ## <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">3.4 Async Connection Pool</font> ### <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">3.4.1 Differences from the Current Implementation</font> | **Feature** | **Existing Implementation** | **Proposed Solution** | | --- | --- | --- | | Acquisition method | Synchronous blocking getConnection() | Asynchronous asyncGetConnection(callback) | | Connection failure handling | Return error directly | Retry with exponential backoff | | Idle detection | Clean up during acquisition | Independent periodic cleanup timer | | Statistics | None | Provide reuse/new connection counters | ### <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">3.4.2 Retry Strategy</font> <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Exponential backoff with random jitter.</font> ### <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">3.4.3 GC Mechanism</font> <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">The connection pool maintains a periodic timer to scan and clean up:</font> + <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Connections that have been idle for longer than a configured threshold</font> + <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Invalid connections that have already been closed</font> ## <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">3.5 CUDA Async Copy Subsystem</font> ### <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">3.5.1 Current Problems</font> <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">In the existing implementation, Session::writeBody / readBody have the following issues:</font> ```cpp if (isCudaMemory(addr)) { dram_buffer = new char[size]; // temporary buffer cudaMemcpy(dram_buffer, addr, size, ...); // sync block // ... async_write ... delete[] dram_buffer; // release } ``` + <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Synchronous cudaMemcpy blocks the I/O thread, preventing it from handling other sockets during the copy</font> + <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">A temporary buffer is allocated and freed for each transfer, which incurs overhead</font> ### <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">3.5.2 Proposed Solution</font> **<font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Pinned memory reuse:</font>** + <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Each Session holds a pinned buffer allocated via cudaMallocHost </font> + <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">The lifetime of the buffer is bound to the Session, avoiding repeated allocations and deallocations</font> **<font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Asynchronous copy + event polling:</font>** + <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Use asynchronous copy operations</font> + <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Poll CUDA events to detect completion</font> <img width="1132" height="694" alt="Image" src="https://github.com/user-attachments/assets/90eed228-d08b-4f3a-ad8e-511723c0e2b8" /> # <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">4. Configuration</font> ## <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">4.1 New Configuration Items</font> | **Parameter** | **Environment Variable** | **Default** | **Description** | | :--- | :--- | :--- | :--- | | num_tcp_io_threads | MC_NUM_TCP_IO_THREADS | 8 | Number of I/O threads (= number of io_context<br/>s) | | tcp_max_connections | MC_TCP_MAX_CONNECTIONS | 64 | Maximum number of concurrent transfers | # <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">5. Compatibility</font> ## <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">5.1 API Compatibility</font> <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Public APIs remain unchanged.</font> ## <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">5.2 Behavioral Differences</font> | **Behavior** | **Before** | **After** | | --- | --- | --- | | Number of I/O threads | 1 | N (configurable) | | Connection acquisition | Synchronous | Asynchronous | | CUDA copy | Synchronous and blocking | Asynchronous and non-blocking | | Concurrency control | None | With an upper limit | # <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">6. Performance</font> <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Benchmarking was performed using transfer_engine_bench.</font> ## <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">6.1 Test Environment</font> | CPU | 23 cores | | :--- | :--- | | <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Network</font> | <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">single-node loopback 47 GB/s, cross-node 10.8 GB/s (iperf3)</font> | | <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">Test configuration</font> | io_threads=16, max_connections=64, io_size=1MiB | ## <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">6.2 Test Results</font> ### <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">6.2.1 Single-node Test</font> | **<font style="background-color:rgb(246, 247, 248);">Memory</font>** | **<font style="background-color:rgb(246, 247, 248);">Operation</font>** | **<font style="background-color:rgb(246, 247, 248);">Native</font>** | **<font style="background-color:rgb(246, 247, 248);">Optimized</font>** | **<font style="background-color:rgb(246, 247, 248);">Improvement</font>** | | :--- | :--- | :--- | :--- | :--- | | <font style="background-color:rgb(246, 247, 248);">DRAM</font> | <font style="background-color:rgb(246, 247, 248);">read</font> | <font style="background-color:rgb(246, 247, 248);">6.73 GB/s</font> | <font style="background-color:rgb(246, 247, 248);">46.24 GB/s</font> | <font style="background-color:rgb(246, 247, 248);">6.9×</font> | | <font style="background-color:rgb(246, 247, 248);">DRAM</font> | <font style="background-color:rgb(246, 247, 248);">write</font> | <font style="background-color:rgb(246, 247, 248);">6.71 GB/s</font> | <font style="background-color:rgb(246, 247, 248);">45.39 GB/s</font> | <font style="background-color:rgb(246, 247, 248);">6.8×</font> | | <font style="background-color:rgb(246, 247, 248);">VRAM</font> | <font style="background-color:rgb(246, 247, 248);">read</font> | <font style="background-color:rgb(246, 247, 248);">2.36 GB/s</font> | <font style="background-color:rgb(246, 247, 248);">29.02 GB/s</font> | <font style="background-color:rgb(246, 247, 248);">12.3×</font> | | <font style="background-color:rgb(246, 247, 248);">VRAM</font> | <font style="background-color:rgb(246, 247, 248);">write</font> | <font style="background-color:rgb(246, 247, 248);">2.36 GB/s</font> | <font style="background-color:rgb(246, 247, 248);">29.25 GB/s</font> | <font style="background-color:rgb(246, 247, 248);">12.4×</font> | ### <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">6.2.2 Cross-node Test</font> | **Memory** | **Operation** | **Native** | **Optimized** | **Improvement** | | :--- | :--- | :--- | :--- | :--- | | DRAM | read | 3.16 GB/s | 10.73 GB/s | 3.4× | | DRAM | write | 3.29 GB/s | 10.81 GB/s | 3.3× | | VRAM | read | 2.33 GB/s | 10.68 GB/s | 4.6× | | VRAM | write | 2.31 GB/s | 10.66 GB/s | 4.6× | # <font style="color:rgb(13, 18, 57);background-color:rgb(246, 247, 248);">7. Rollout Plan</font> | **<font style="background-color:rgb(246, 247, 248);">Phase</font>** | **<font style="background-color:rgb(246, 247, 248);">Content</font>** | | :--- | :--- | | <font style="background-color:rgb(246, 247, 248);">Phase 1</font> | <font style="background-color:rgb(246, 247, 248);">Multi-IO Context + ConcurrencyLimiter</font> | | <font style="background-color:rgb(246, 247, 248);">Phase 2</font> | <font style="background-color:rgb(246, 247, 248);">Async Connection Pool</font> | | <font style="background-color:rgb(246, 247, 248);">Phase 3</font> | <font style="background-color:rgb(246, 247, 248);">CUDA Async Subsystem + Session adaptation</font> | ### Before submitting a new issue... - [x] Make sure you already searched for relevant issues and read the [documentation](https://kvcache-ai.github.io/Mooncake/)
bsakaguchi 2026-10-29 21:15:37 +00:00
Author
Owner

@maheshrbapatu commented on GitHub (Mar 26, 2026):

@yxj-97
This looks like a strong direction, especially removing the CPU-side bottlenecks around single io_context and synchronous connection setup, and adding flow control via the concurrency limiter .

I don’t currently have access to a GPU setup, but I’d be happy to help on the CPU/networking side e.g., async connection pool behavior, concurrency limiter correctness/tuning, or multi-io_context handling under load. Let me know if there’s an area that would benefit from additional bandwidth.

<!-- gh-comment-id:4136899586 --> @maheshrbapatu commented on GitHub (Mar 26, 2026): @yxj-97 This looks like a strong direction, especially removing the CPU-side bottlenecks around single io_context and synchronous connection setup, and adding flow control via the concurrency limiter . I don’t currently have access to a GPU setup, but I’d be happy to help on the CPU/networking side e.g., async connection pool behavior, concurrency limiter correctness/tuning, or multi-io_context handling under load. Let me know if there’s an area that would benefit from additional bandwidth.
Author
Owner

@yxj-97 commented on GitHub (Mar 30, 2026):

@yxj-97 This looks like a strong direction, especially removing the CPU-side bottlenecks around single io_context and synchronous connection setup, and adding flow control via the concurrency limiter .

I don’t currently have access to a GPU setup, but I’d be happy to help on the CPU/networking side e.g., async connection pool behavior, concurrency limiter correctness/tuning, or multi-io_context handling under load. Let me know if there’s an area that would benefit from additional bandwidth.

Thanks, really appreciate the offer. I’ve basically finished implementing the RFC and will open a PR soon. I’d be very grateful if you could review it, especially around async connection pooling, concurrency limiter behavior/tuning, and multi-io_context handling under load. Looking forward to your feedback to help improve stability.

<!-- gh-comment-id:4151644073 --> @yxj-97 commented on GitHub (Mar 30, 2026): > [@yxj-97](https://github.com/yxj-97) This looks like a strong direction, especially removing the CPU-side bottlenecks around single io_context and synchronous connection setup, and adding flow control via the concurrency limiter . > > I don’t currently have access to a GPU setup, but I’d be happy to help on the CPU/networking side e.g., async connection pool behavior, concurrency limiter correctness/tuning, or multi-io_context handling under load. Let me know if there’s an area that would benefit from additional bandwidth. Thanks, really appreciate the offer. I’ve basically finished implementing the RFC and will open a PR soon. I’d be very grateful if you could review it, especially around async connection pooling, concurrency limiter behavior/tuning, and multi-io_context handling under load. Looking forward to your feedback to help improve stability.
Author
Owner

@maheshrbapatu commented on GitHub (Mar 30, 2026):

Sure @yxj-97 , will be happy to review it.

<!-- gh-comment-id:4155934655 --> @maheshrbapatu commented on GitHub (Mar 30, 2026): Sure @yxj-97 , will be happy to review it.
Author
Owner

@Shl1015CS commented on GitHub (May 17, 2026):

I saw this RFC from the CCF open-source competition topic 3 discussion and I'm interested in contributing to #1749. I'd like to start with the TCP transport opt work.
Is this still open for contribution? If so, I'd be happy to join
Thanks~

<!-- gh-comment-id:4470940058 --> @Shl1015CS commented on GitHub (May 17, 2026): I saw this RFC from the CCF open-source competition topic 3 discussion and I'm interested in contributing to #1749. I'd like to start with the TCP transport opt work. Is this still open for contribution? If so, I'd be happy to join Thanks~
Author
Owner

@github-actions[bot] commented on GitHub (Aug 16, 2026):

This issue has had no activity for 90 days and will be closed in 7 days if there is no further activity. Please comment or react if it should stay open.

<!-- gh-comment-id:5305506882 --> @github-actions[bot] commented on GitHub (Aug 16, 2026): This issue has had no activity for 90 days and will be closed in 7 days if there is no further activity. Please comment or react if it should stay open.
Author
Owner

@github-actions[bot] commented on GitHub (Aug 23, 2026):

Closing due to 3 months of inactivity. If this is still relevant, please comment and we can reopen.

<!-- gh-comment-id:5383981768 --> @github-actions[bot] commented on GitHub (Aug 23, 2026): Closing due to 3 months of inactivity. If this is still relevant, please comment and we can reopen.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
kvcache-ai/Mooncake#507
No description provided.