Class: Ignis::Collective::NetworkDirect::Adapter
- Inherits:
-
Object
- Object
- Ignis::Collective::NetworkDirect::Adapter
- Defined in:
- lib/nvruby/collective/net/nd_adapter.rb
Overview
RDMA Adapter wrapper for NetworkDirect
Represents a single RDMA-capable NIC (e.g., Mellanox ConnectX-5) and provides methods for creating queue pairs and memory regions.
Instance Attribute Summary collapse
-
#adapter_id ⇒ String
readonly
Adapter identifier.
-
#handle ⇒ FFI::Pointer
readonly
Native adapter handle.
-
#info ⇒ Bindings::ND2AdapterInfo
readonly
Adapter capabilities.
Instance Method Summary collapse
-
#close! ⇒ void
Release all resources.
-
#create_completion_queue(depth: 256) ⇒ CompletionQueue
Create a completion queue.
-
#create_connector ⇒ Connector
Create a connector for connection establishment.
-
#create_queue_pair(send_cq:, recv_cq:, send_depth: 64, recv_depth: 64, sge_count: 1) ⇒ QueuePair
Create a queue pair.
-
#initialize(handle, adapter_id) ⇒ Adapter
constructor
Initialize adapter wrapper.
-
#query ⇒ Hash
Query adapter capabilities.
-
#register_memory(buffer, size, flags: 0) ⇒ MemoryRegion
Register a memory region for RDMA.
Constructor Details
#initialize(handle, adapter_id) ⇒ Adapter
Initialize adapter wrapper
25 26 27 28 29 30 31 32 |
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 25 def initialize(handle, adapter_id) @handle = handle @adapter_id = adapter_id @info = nil @completion_queues = [] @queue_pairs = [] @memory_regions = [] end |
Instance Attribute Details
#adapter_id ⇒ String (readonly)
Returns Adapter identifier.
14 15 16 |
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 14 def adapter_id @adapter_id end |
#handle ⇒ FFI::Pointer (readonly)
Returns Native adapter handle.
17 18 19 |
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 17 def handle @handle end |
#info ⇒ Bindings::ND2AdapterInfo (readonly)
Returns Adapter capabilities.
20 21 22 |
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 20 def info @info end |
Instance Method Details
#close! ⇒ void
This method returns an undefined value.
Release all resources
107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 107 def close! @queue_pairs.each(&:close!) @completion_queues.each(&:close!) @memory_regions.each(&:deregister!) @queue_pairs.clear @completion_queues.clear @memory_regions.clear # Release native handle # In real implementation: IND2Adapter::Release @handle = nil end |
#create_completion_queue(depth: 256) ⇒ CompletionQueue
Create a completion queue
59 60 61 62 63 64 |
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 59 def create_completion_queue(depth: 256) cq = CompletionQueue.new(self, depth) cq.create! @completion_queues << cq cq end |
#create_connector ⇒ Connector
Create a connector for connection establishment
101 102 103 |
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 101 def create_connector Connector.new(self) end |
#create_queue_pair(send_cq:, recv_cq:, send_depth: 64, recv_depth: 64, sge_count: 1) ⇒ QueuePair
Create a queue pair
73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 73 def create_queue_pair(send_cq:, recv_cq:, send_depth: 64, recv_depth: 64, sge_count: 1) qp = QueuePair.new( adapter: self, send_cq: send_cq, recv_cq: recv_cq, send_depth: send_depth, recv_depth: recv_depth, sge_count: sge_count ) qp.create! @queue_pairs << qp qp end |
#query ⇒ Hash
Query adapter capabilities
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 36 def query return @capabilities if @capabilities @info = Bindings::ND2AdapterInfo.new # In real implementation, call IND2Adapter::Query via COM interop @capabilities = { vendor_id: @info[:VendorId], device_id: @info[:DeviceId], max_registration_size: @info[:MaxRegistrationSize], max_sge_count: @info[:MaxSgeCount], max_send_queue_depth: @info[:MaxSendQueueDepth], max_recv_queue_depth: @info[:MaxRecvQueueDepth], max_cq_depth: @info[:MaxCqDepth], max_inline_data: @info[:MaxInlineData], max_outbound_read_limit: @info[:MaxOutboundReadLimit], max_inbound_read_limit: @info[:MaxInboundReadLimit] } end |
#register_memory(buffer, size, flags: 0) ⇒ MemoryRegion
Register a memory region for RDMA
92 93 94 95 96 97 |
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 92 def register_memory(buffer, size, flags: 0) mr = MemoryRegion.new(self, buffer, size, flags) mr.register! @memory_regions << mr mr end |