Class: Ignis::Collective::Transport::NetworkDirectTransport
- Defined in:
- lib/nvruby/collective/transport/rdma_transports.rb
Overview
Requires NetworkDirect-capable NIC (RDMA NICs from Mellanox, Chelsio, etc.)
SKIP in most cases - requires specialized hardware
NetworkDirect RDMA Transport Interface Microsoft’s RDMA abstraction for Windows
NetworkDirect provides:
-
Kernel bypass
-
Zero-copy transfers
-
Low latency
Instance Attribute Summary
Attributes inherited from Base
Class Method Summary collapse
-
.available? ⇒ Boolean
Check if NetworkDirect is available.
- .check_nd_provider ⇒ Object
-
.transport_type ⇒ Symbol
Transport type.
Instance Method Summary collapse
-
#destroy! ⇒ void
Clean up.
-
#estimated_bandwidth ⇒ Float
Estimated bandwidth in GB/s.
-
#initialize(local_addr:, remote_addr:) ⇒ NetworkDirectTransport
constructor
A new instance of NetworkDirectTransport.
-
#initialize! ⇒ void
Initialize NetworkDirect transport.
-
#ready? ⇒ Boolean
Check if ready.
-
#recv(dst_ptr, size, stream: nil) ⇒ Integer
Receive data.
-
#send(src_ptr, size, stream: nil) ⇒ Boolean
Send data.
- #to_s ⇒ String
Methods inherited from Base
#estimated_latency, #recv_async, #recv_sync, #send_async, #send_sync, #synchronize!
Constructor Details
#initialize(local_addr:, remote_addr:) ⇒ NetworkDirectTransport
Returns a new instance of NetworkDirectTransport.
154 155 156 157 158 159 160 |
# File 'lib/nvruby/collective/transport/rdma_transports.rb', line 154 def initialize(local_addr:, remote_addr:) super(src_device: 0, dst_device: 0) @local_addr = local_addr @remote_addr = remote_addr @initialized = false raise TransportError, "NetworkDirect RDMA not available" unless self.class.available? end |
Class Method Details
.available? ⇒ Boolean
Check if NetworkDirect is available
146 147 148 149 150 |
# File 'lib/nvruby/collective/transport/rdma_transports.rb', line 146 def self.available? # Check for NetworkDirect provider # Requires RoCE or iWARP capable NIC check_nd_provider end |
.check_nd_provider ⇒ Object
205 206 207 208 209 |
# File 'lib/nvruby/collective/transport/rdma_transports.rb', line 205 def self.check_nd_provider # Would check Windows registry for NetworkDirect providers # HKLM\SYSTEM\CurrentControlSet\Services\NDKPI false # Not available by default end |
.transport_type ⇒ Symbol
Returns Transport type.
140 141 142 |
# File 'lib/nvruby/collective/transport/rdma_transports.rb', line 140 def self.transport_type :network_direct end |
Instance Method Details
#destroy! ⇒ void
This method returns an undefined value.
Clean up
194 195 196 |
# File 'lib/nvruby/collective/transport/rdma_transports.rb', line 194 def destroy! @initialized = false end |
#estimated_bandwidth ⇒ Float
Estimated bandwidth in GB/s
188 189 190 |
# File 'lib/nvruby/collective/transport/rdma_transports.rb', line 188 def estimated_bandwidth 12.5 # 100 Gbps typical for RDMA NIC end |
#initialize! ⇒ void
This method returns an undefined value.
Initialize NetworkDirect transport
164 165 166 |
# File 'lib/nvruby/collective/transport/rdma_transports.rb', line 164 def initialize! raise NotImplementedError, "NetworkDirect requires specialized RDMA hardware" end |
#ready? ⇒ Boolean
Check if ready
170 171 172 |
# File 'lib/nvruby/collective/transport/rdma_transports.rb', line 170 def ready? @initialized end |
#recv(dst_ptr, size, stream: nil) ⇒ Integer
Receive data
182 183 184 |
# File 'lib/nvruby/collective/transport/rdma_transports.rb', line 182 def recv(dst_ptr, size, stream: nil) raise NotImplementedError, "NetworkDirect not implemented" end |
#send(src_ptr, size, stream: nil) ⇒ Boolean
Send data
176 177 178 |
# File 'lib/nvruby/collective/transport/rdma_transports.rb', line 176 def send(src_ptr, size, stream: nil) raise NotImplementedError, "NetworkDirect not implemented" end |
#to_s ⇒ String
199 200 201 |
# File 'lib/nvruby/collective/transport/rdma_transports.rb', line 199 def to_s "NetworkDirectTransport[#{@local_addr} <-> #{@remote_addr}]" end |