Skip to content

Commit db64188

Browse files
authored
KV cache module optimization and bug fix for rdma. (#1984)
Signed-off-by: vegetableysm <[email protected]>
1 parent bbdb41e commit db64188

File tree

9 files changed

+64
-9
lines changed

9 files changed

+64
-9
lines changed

modules/llm-cache/ds/vineyard_file.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,7 @@ std::shared_ptr<Object> VineyardFileBuilder::SealAndPersist(
273273
ObjectMeta blob_meta;
274274
if (ipc_client.Connected()) {
275275
std::shared_ptr<Object> object;
276+
writer_->Shrink(ipc_client, writer_->size());
276277
writer_->Seal(ipc_client, object);
277278
blob_meta = object->meta();
278279
ipc_client.Persist(blob_meta.GetId());
@@ -282,6 +283,7 @@ std::shared_ptr<Object> VineyardFileBuilder::SealAndPersist(
282283
}
283284
vineyardFile->meta_.AddMember("buffer", blob_meta);
284285
vineyardFile->meta_.AddKeyValue("path", path_);
286+
vineyardFile->meta_.AddKeyValue("size", Size());
285287
vineyardFile->meta_.SetTypeName(type_name<VineyardFile>());
286288

287289
auto access_time = std::chrono::system_clock::now().time_since_epoch();
@@ -312,6 +314,7 @@ std::vector<std::shared_ptr<Object>> VineyardFileBuilder::BatchedSealAndPersist(
312314
if (ipc_client.Connected()) {
313315
for (auto builder : builders) {
314316
std::shared_ptr<Object> object;
317+
builder->writer_->Shrink(ipc_client, builder->writer_->size());
315318
builder->writer_->Seal(ipc_client, object);
316319
blob_metas.push_back(object->meta());
317320
}
@@ -334,6 +337,7 @@ std::vector<std::shared_ptr<Object>> VineyardFileBuilder::BatchedSealAndPersist(
334337
}
335338
vineyard_file->meta_.AddMember("buffer", blob_metas[i]);
336339
vineyard_file->meta_.AddKeyValue("path", builders[i]->path_);
340+
vineyard_file->meta_.AddKeyValue("size", builders[i]->Size());
337341
vineyard_file->meta_.SetTypeName(type_name<VineyardFile>());
338342

339343
auto access_time = std::chrono::system_clock::now().time_since_epoch();

modules/llm-cache/storage/file_storage.cc

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,12 @@ Status FileStorage::Update(
9595
" should be multiple of batch size " +
9696
std::to_string(chunkSize) + "!");
9797
}
98+
if (tokenList.size() > MAX_CACHE_TOKEN_LENGTH) {
99+
LOG(WARNING)
100+
<< "The token list size is larger than the maximum cache token "
101+
"length. This token list will be ignored!";
102+
return Status::OK();
103+
}
98104

99105
std::vector<std::string> pathList;
100106
std::set<std::string> createFileSet;
@@ -281,6 +287,12 @@ Status FileStorage::Update(
281287
" should be multiple of batch size " +
282288
std::to_string(chunkSize) + "!");
283289
}
290+
if (tokenList.size() > MAX_CACHE_TOKEN_LENGTH) {
291+
LOG(WARNING)
292+
<< "The token list size is larger than the maximum cache token "
293+
"length. This token list will be ignored!";
294+
return Status::OK();
295+
}
284296

285297
std::vector<std::string> pathList;
286298
std::set<std::string> createFileSet;
@@ -427,6 +439,12 @@ Status FileStorage::BatchedUpdate(
427439
" should be multiple of batch size " +
428440
std::to_string(chunkSize) + "!");
429441
}
442+
if (tokenList.size() > MAX_CACHE_TOKEN_LENGTH) {
443+
LOG(WARNING)
444+
<< "The token list size is larger than the maximum cache token "
445+
"length. This token list will be ignored!";
446+
return Status::OK();
447+
}
430448

431449
std::vector<std::string> pathList;
432450
std::set<std::string> createFileSet;

modules/llm-cache/storage/file_storage.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ limitations under the License.
3434
#define SECOND_TO_MICROSECOND 1000000
3535
#define SECOND_TO_NANOSECOND 1000000000
3636

37+
#define MAX_CACHE_TOKEN_LENGTH 65536
38+
3739
namespace vineyard {
3840

3941
struct FileDescriptor {};

modules/llm-cache/storage/vineyard_file_storage.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ class VineyardFileStorage : public FileStorage {
6262
this->globalGCInterval = std::chrono::seconds(globalGCInterval);
6363
this->globalFileTTL = std::chrono::seconds(globalTTL);
6464
this->enableGlobalGC = enableGlobalGC;
65-
this->max_file_size_ =
66-
tensorNBytes * 2 * layer * chunkSize + 65536 * sizeof(int);
65+
this->max_file_size_ = tensorNBytes * 2 * layer * chunkSize +
66+
MAX_CACHE_TOKEN_LENGTH * sizeof(int);
6767
}
6868

6969
~VineyardFileStorage() = default;

src/client/rpc_client.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ Status RPCClient::RDMAReleaseMemInfo(RegisterMemInfo& remote_info) {
258258
void* buffer;
259259
RETURN_ON_ERROR(this->rdma_client_->GetTXFreeMsgBuffer(buffer));
260260
VineyardMsg* msg = reinterpret_cast<VineyardMsg*>(buffer);
261-
msg->type = VINEYARD_RELEASE_MEM;
261+
msg->type = VINEYARD_MSG_RELEASE_MEM;
262262
msg->remoteMemInfo.remote_address = (uint64_t) remote_info.address;
263263
msg->remoteMemInfo.len = remote_info.size;
264264
msg->remoteMemInfo.mr_desc = remote_info.mr_desc;

src/common/rdma/util.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,11 @@ namespace vineyard {
5151
#endif // defined(__linux__)
5252

5353
enum VINEYARD_MSG_OPT {
54+
VINEYARD_MSG_EMPTY = 1,
5455
VINEYARD_MSG_CONNECT,
5556
VINEYARD_MSG_EXCHANGE_KEY,
5657
VINEYARD_MSG_REQUEST_MEM,
57-
VINEYARD_RELEASE_MEM,
58+
VINEYARD_MSG_RELEASE_MEM,
5859
VINEYARD_MSG_CLOSE,
5960
};
6061

src/server/async/rpc_server.cc

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -245,11 +245,11 @@ void RPCServer::doVineyardRequestMemory(VineyardRecvContext* recv_context,
245245
send_msg->remoteMemInfo.len = 0;
246246

247247
VineyardSendContext* send_context = new VineyardSendContext();
248-
memset(&send_context->attr, 0, sizeof(send_context->attr));
248+
memset(send_context, 0, sizeof(VineyardSendContext));
249249
send_context->attr.msg_buffer = msg;
250250
rdma_server_->Send(recv_context->rdma_conn_id,
251251
recv_context->attr.msg_buffer, sizeof(VineyardMsg),
252-
recv_context);
252+
send_context);
253253
return;
254254
}
255255

@@ -272,7 +272,7 @@ void RPCServer::doVineyardRequestMemory(VineyardRecvContext* recv_context,
272272
send_msg->remoteMemInfo.mr_desc = remote_request_mem_info.mr_desc;
273273

274274
VineyardSendContext* send_context = new VineyardSendContext();
275-
memset(&send_context->attr, 0, sizeof(send_context->attr));
275+
memset(send_context, 0, sizeof(VineyardSendContext));
276276
send_context->attr.msg_buffer = msg;
277277

278278
std::lock_guard<std::recursive_mutex> scope_lock(this->rdma_mutex_);
@@ -358,6 +358,24 @@ void RPCServer::doPrepareRecv(uint64_t rdma_conn_id) {
358358
rdma_server_->Recv(rdma_conn_id, msg, sizeof(VineyardMsg), context);
359359
}
360360

361+
void RPCServer::doNothing(VineyardRecvContext* recv_context) {
362+
void* msg = nullptr;
363+
rdma_server_->GetTXFreeMsgBuffer(msg);
364+
VineyardMsg* send_msg = reinterpret_cast<VineyardMsg*>(msg);
365+
send_msg->type = VINEYARD_MSG_REQUEST_MEM;
366+
367+
send_msg->remoteMemInfo.remote_address = 0;
368+
send_msg->remoteMemInfo.key = 0;
369+
send_msg->remoteMemInfo.len = 0;
370+
send_msg->remoteMemInfo.mr_desc = 0;
371+
372+
VineyardSendContext* send_context = new VineyardSendContext();
373+
memset(send_context, 0, sizeof(VineyardSendContext));
374+
send_context->attr.msg_buffer = msg;
375+
rdma_server_->Send(recv_context->rdma_conn_id, msg, sizeof(VineyardMsg),
376+
send_context);
377+
}
378+
361379
void RPCServer::doRDMARecv() {
362380
while (1) {
363381
void* context = nullptr;
@@ -415,7 +433,7 @@ void RPCServer::doRDMARecv() {
415433
rdma_server_->Recv(
416434
recv_context->rdma_conn_id, reinterpret_cast<void*>(recv_msg),
417435
sizeof(VineyardMsg), reinterpret_cast<void*>(recv_context));
418-
} else if (recv_msg->type == VINEYARD_RELEASE_MEM) {
436+
} else if (recv_msg->type == VINEYARD_MSG_RELEASE_MEM) {
419437
boost::asio::post(
420438
vs_ptr_->GetIOContext(), [this, recv_context_tmp, recv_msg_tmp] {
421439
doVineyardReleaseMemory(recv_context_tmp, recv_msg_tmp);
@@ -425,6 +443,16 @@ void RPCServer::doRDMARecv() {
425443
rdma_server_->Recv(
426444
recv_context->rdma_conn_id, reinterpret_cast<void*>(recv_msg),
427445
sizeof(VineyardMsg), reinterpret_cast<void*>(recv_context));
446+
} else if (recv_msg->type == VINEYARD_MSG_EMPTY) {
447+
boost::asio::post(vs_ptr_->GetIOContext(),
448+
[this, recv_context_tmp, recv_msg_tmp] {
449+
doNothing(recv_context_tmp);
450+
delete recv_msg_tmp;
451+
delete recv_context_tmp;
452+
});
453+
rdma_server_->Recv(
454+
recv_context->rdma_conn_id, reinterpret_cast<void*>(recv_msg),
455+
sizeof(VineyardMsg), reinterpret_cast<void*>(recv_context));
428456
} else {
429457
LOG(ERROR) << "Unknown message type: " << recv_msg->type;
430458
rdma_server_->Recv(

src/server/async/rpc_server.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ class RPCServer : public SocketServer,
8585

8686
void doPrepareRecv(uint64_t rdma_conn_id);
8787

88+
void doNothing(VineyardRecvContext* recv_context);
89+
8890
const json rpc_spec_;
8991
asio::ip::tcp::acceptor acceptor_;
9092
asio::ip::tcp::socket socket_;

src/server/util/remote.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ Status RemoteClient::RDMAReleaseMemInfo(RegisterMemInfo& remote_info) {
144144
void* buffer;
145145
this->rdma_client_->GetTXFreeMsgBuffer(buffer);
146146
VineyardMsg* msg = reinterpret_cast<VineyardMsg*>(buffer);
147-
msg->type = VINEYARD_RELEASE_MEM;
147+
msg->type = VINEYARD_MSG_RELEASE_MEM;
148148
msg->remoteMemInfo.remote_address = (uint64_t) remote_info.address;
149149
msg->remoteMemInfo.len = remote_info.size;
150150
VLOG(100) << "Send remote addr: "

0 commit comments

Comments
 (0)