Class: Ignis::Collective::NetworkDirect::Adapter

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

Constructor Details

#initialize(handle, adapter_id) ⇒ Adapter

Initialize adapter wrapper

Parameters:

  • handle (FFI::Pointer)

    Native IND2Adapter handle

  • adapter_id (String)

    Adapter identifier



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_idString (readonly)

Returns Adapter identifier.

Returns:

  • (String)

    Adapter identifier



14
15
16
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 14

def adapter_id
  @adapter_id
end

#handleFFI::Pointer (readonly)

Returns Native adapter handle.

Returns:

  • (FFI::Pointer)

    Native adapter handle



17
18
19
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 17

def handle
  @handle
end

#infoBindings::ND2AdapterInfo (readonly)

Returns Adapter capabilities.

Returns:



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

Parameters:

  • depth (Integer) (defaults to: 256)

    Number of entries

Returns:



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_connectorConnector

Create a connector for connection establishment

Returns:



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

Parameters:

  • send_cq (CompletionQueue)

    Send completion queue

  • recv_cq (CompletionQueue)

    Receive completion queue

  • send_depth (Integer) (defaults to: 64)

    Send queue depth

  • recv_depth (Integer) (defaults to: 64)

    Receive queue depth

  • sge_count (Integer) (defaults to: 1)

    Max SGE per work request

Returns:



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

#queryHash

Query adapter capabilities

Returns:

  • (Hash)

    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

Parameters:

  • buffer (FFI::Pointer)

    Buffer to register

  • size (Integer)

    Buffer size

  • flags (Integer) (defaults to: 0)

    Registration flags

Returns:



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