Add CCL (Collective Communication Library) API model - #490
Open
xiongxuecheng wants to merge 2 commits into
Open
Conversation
Add Ccl.Config top-level object with full CCL collective communication support: - Ccl.Config: transport (rocev2/uet), send_mode, stage_mode, stage_loop_count - Ccl.Stage: algorithm default, duration (fixed_iterations / fixed_seconds with interval_ms), bg_flow_names, communicators[] - Ccl.Communicator: device_names, algorithm override, generation, rocev2 policy - Ccl.Generation: data_size, compute_gap (fixed/random), qp_scheduling - Ccl.Rocev2Policy: ib_mtu, chunk_size_kb, qps_per_peer, encapsulation, connection_type (reliable_connection / unreliable_datagram) - Ccl.Config.IterationRecording: threshold-triggered per-iteration recording - Ccl.Config.TailLatencyRecording: rolling TOP-N per-QP-pair recording - Ccl.Config.TailLatencyCdf: CDF collection config (enable via SetConfig) - Result model: CclMetric, CclLoopMetric, CclIterationMetric, CclTailLatencyMetric, CclTailLatencyCDFBucket with full JCT / BW / tail latency fields and format annotations Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
xiongxuecheng
force-pushed
the
ccl_otg_viavi
branch
from
August 14, 2026 05:31
7012380 to
61045b7
Compare
…/ecn rule encapsulation was per-communicator in Ccl.Rocev2Policy but the underlying engine only supports one value per CCL job, so it moves to Ccl.Config (uid=3) as a job-wide setting. dscp/ecn stay per-communicator in Ccl.Rocev2Policy.ReliableConnection since differentiating them by traffic class across communicators is a real test need, but the schema now documents that communicators sharing a port via overlapping device_names must configure matching dscp/ecn, with SetConfig rejecting conflicting values instead of resolving them silently.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
otg_ccl_API_design_V1.md
Summary
Add CCL (Collective Communication Library) API model to OTG for AI fabric collective operation testing. Enables simulation and measurement of NCCL-style AllReduce / AllToAll operations over RoCEv2, with Job Completion Time (JCT) and bandwidth metrics.
Feature Overview
Related Issue: Add CCL (Collective Communication Library) support #489
Brief Description:
AI training clusters rely on collective communication primitives (AllReduce, AllToAll, PointToPoint) to synchronize gradients across GPUs. This PR adds a first-class
Cclmodel to OTG, allowing test tools to:stages[]modelState.Traffic.cclGetMetricsFeature Details
Config.cclCcl.ConfigCcl.Config.stages[]Ccl.StageCcl.Stage.algorithmCcl.Algorithmchoice+phase)Ccl.Stage.communicators[]Ccl.CommunicatorCcl.Stage.durationCcl.Stage.Durationfixed_iterationsorfixed_secondsCcl.Communicator.generationCcl.GenerationCcl.Communicator.rocev2Ccl.Rocev2PolicyState.Traffic.cclState.Traffic.Cclstart/stop)MetricsRequest.cclCcl.Metrics.RequestMetricsResponse.ccl_metrics[]Ccl.MetricCode Snippet
Test Specification
**Example test scenario: 2-port B2B Ring AllReduce **
Topology: Two ports connected back-to-back, simulating a 2-rank AllReduce collective.
Configuration:
Ccl.Config.transport = rocev2,send_mode = asyncCcl.Stage.algorithm.choice = ring_allreduceCcl.Stage.duration = fixed_iterations,count = 10,interval_ms = 1000Ccl.Communicator.generation.data_size = 160,data_size_unit = gigabyteCcl.Communicator.rocev2.encapsulation = ipv4,ib_mtu = 4096,qps_per_peer = 64Ccl.Communicatorwithdevice_names = ["dev0", "dev1"]Control:
State.Traffic.ccl.state = start→ triggers ARP resolution + RC QP setup + 10 iterationsState.Traffic.ccl.state = stop→ interrupts executionVerification via
GetMetrics:jct_percentbus_bwdrop_countiteration_countmax_tail_latency_usOpen Questions
RoCEv2 UD Transport — The proposal currently reserves
Ccl.Rocev2Policy.connection_type = unreliable_datagrampendingDevice.Rocev2PeerUD support. Can CCL-level UD parameters be defined independently of single-flow UD support?Ultra Ethernet Transport (UET) — We reserve
Config.ccl.transport = uetpending UEC v1.0 ratification. Can UET be supported exclusively at the CCL level without requiring a single-flow UET API as a prerequisite?