MCPcopy Create free account
hub / github.com/DeepRec-AI/DeepRec / GetRemoteAddressSync

Method GetRemoteAddressSync

tensorflow/contrib/verbs/grpc_verbs_service.cc:105–154  ·  view source on GitHub ↗

synchronous method

Source from the content-addressed store, hash-verified

103
104// synchronous method
105Status GrpcVerbsService::GetRemoteAddressSync(
106 const GetRemoteAddressRequest* request,
107 GetRemoteAddressResponse* response) {
108 // analyzing request
109 // the channel setting part is redundant.
110 const string remote_host_name = request->host_name();
111 RdmaChannel* rc = rdma_mgr_->FindChannel(remote_host_name);
112 CHECK(rc);
113 RdmaAddress ra;
114 ra.lid = request->channel().lid();
115 ra.qpn = request->channel().qpn();
116 ra.psn = request->channel().psn();
117 ra.snp = request->channel().snp();
118 ra.iid = request->channel().iid();
119 rc->SetRemoteAddress(ra, false);
120 rc->Connect();
121 int i = 0;
122 int idx[] = {1, 0};
123 std::vector<RdmaMessageBuffer*> mb(rc->message_buffers());
124 CHECK_EQ(request->mr_size(), RdmaChannel::kNumMessageBuffers);
125 for (const auto& mr : request->mr()) {
126 // the connections are crossed, i.e.
127 // local tx_message_buffer <---> remote rx_message_buffer_
128 // local rx_message_buffer <---> remote tx_message_buffer_
129 // hence idx[] = {1, 0}.
130 RdmaMessageBuffer* rb = mb[idx[i]];
131 RemoteMR rmr;
132 rmr.remote_addr = mr.remote_addr();
133 rmr.rkey = mr.rkey();
134 rb->SetRemoteMR(rmr, false);
135 i++;
136 }
137 CHECK(i == RdmaChannel::kNumMessageBuffers);
138
139 // setting up response
140 response->set_host_name(
141 worker_env_->session_mgr->LegacySession()->worker_name);
142 Channel* channel_info = response->mutable_channel();
143 channel_info->set_lid(rc->self().lid);
144 channel_info->set_qpn(rc->self().qpn);
145 channel_info->set_psn(rc->self().psn);
146 channel_info->set_snp(rc->self().snp);
147 channel_info->set_iid(rc->self().iid);
148 for (int i = 0; i < RdmaChannel::kNumMessageBuffers; i++) {
149 MemoryRegion* mr = response->add_mr();
150 mr->set_remote_addr(reinterpret_cast<uint64>(mb[i]->buffer()));
151 mr->set_rkey(mb[i]->self()->rkey);
152 }
153 return Status::OK();
154}
155
156// Create a GrpcVerbsService, then assign it to a given handle.
157void SetNewVerbsService(GrpcVerbsService** handle, const WorkerEnv* worker_env,

Callers

nothing calls this directly

Calls 7

FindChannelMethod · 0.80
SetRemoteAddressMethod · 0.80
SetRemoteMRMethod · 0.80
selfMethod · 0.80
ConnectMethod · 0.45
LegacySessionMethod · 0.45
bufferMethod · 0.45

Tested by

no test coverage detected