Skip to content

Add NTTTCP full duplex mode#692

Open
rudraptpsingh wants to merge 1 commit intomicrosoft:mainfrom
rudraptpsingh:user/rudrasingh/ntttcp-full-duplex
Open

Add NTTTCP full duplex mode#692
rudraptpsingh wants to merge 1 commit intomicrosoft:mainfrom
rudraptpsingh:user/rudrasingh/ntttcp-full-duplex

Conversation

@rudraptpsingh
Copy link
Copy Markdown
Contributor

@rudraptpsingh rudraptpsingh commented Apr 16, 2026

Enable bidirectional network testing where both nodes run sender and receiver simultaneously, producing separate TX/RX throughput metrics per direction.

Core changes:

  • NTttcpExecutor: Add DuplexMode property, ExecuteFullDuplexWorkloadAsync with parallel sender+receiver processes, CaptureDirectionalMetrics for per-direction telemetry, role-aware port assignment (forward/reverse), direction-aware -m IP mapping for correct sender→receiver targeting
  • NetworkingWorkloadState: Add DuplexMode property for client-server state sync
  • NetworkingWorkloadExecutor: Pass DuplexMode through orchestration instructions

Profile:

  • PERF-NETWORK-NTTTCP-FULLDUPLEX.json: 6 TCP scenarios (T1/T32 x 4K/64K/256K) with DuplexMode=Full, same dependencies as half-duplex profile

Tests (21 tests):

  • NTttcpFullDuplexTests: IsFullDuplex property, ReversePort offset, command-line flag/port/buffer verification for both platforms, execution tests for client send+receive on Linux/Windows, results file separation, half-duplex backward compatibility, NetworkingWorkloadState serialization with DuplexMode

Upstream fixes (pre-existing bugs in main):

  • ProcessProxy.cs: Fix catch clause ordering (general catch before specific)
  • CommandBase.cs: Fix NullReferenceException on isolationTargets.TargetPackages

Verified on real hardware: win-x64 <-> win-arm64
TCP 4K T1: Send 3226 Mbps / Receive 1455 Mbps
TCP 64K T1: Send 6490 Mbps / Receive 6163 Mbps

Enable bidirectional network testing where both nodes run sender and receiver
simultaneously, producing separate TX/RX throughput metrics per direction.

Core changes:
- NTttcpExecutor: Add DuplexMode property, ExecuteFullDuplexWorkloadAsync with
  parallel sender+receiver processes, CaptureDirectionalMetrics for per-direction
  telemetry, role-aware port assignment (forward/reverse), direction-aware -m IP
  mapping for correct sender→receiver targeting
- NetworkingWorkloadState: Add DuplexMode property for client-server state sync
- NetworkingWorkloadExecutor: Pass DuplexMode through orchestration instructions

Profile:
- PERF-NETWORK-NTTTCP-FULLDUPLEX.json: 6 TCP scenarios (T1/T32 x 4K/64K/256K)
  with DuplexMode=Full, same dependencies as half-duplex profile

Tests (21 tests):
- NTttcpFullDuplexTests: IsFullDuplex property, ReversePort offset, command-line
  flag/port/buffer verification for both platforms, execution tests for client
  send+receive on Linux/Windows, results file separation, half-duplex backward
  compatibility, NetworkingWorkloadState serialization with DuplexMode

Upstream fixes (pre-existing bugs in main):
- ProcessProxy.cs: Fix catch clause ordering (general catch before specific)
- CommandBase.cs: Fix NullReferenceException on isolationTargets.TargetPackages

Verified on real hardware: win-x64 (10.177.236.133) <-> win-arm64 (10.199.102.112)
TCP 4K T1: Send 3226 Mbps / Receive 1455 Mbps
TCP 64K T1: Send 6490 Mbps / Receive 6163 Mbps
Copy link
Copy Markdown
Contributor

@brdeyo brdeyo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please hold up on merging these changes until we have completed the 3.0 production release of VC. We are aiming at having that out today Thursday April 16th. However, I want to prevent anymore major changes to VC core or workloads until we finalize.


await this.WaitForExitCodeConfirmationAsync(cancellationToken, timeout);
}
catch (TimeoutException) when (timeout != null)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not needed. There is a generic "catch" block. This catches ALL exceptions including TimeoutException.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants