Mooncake/mooncake-transfer-engine/tent/src/transfer_engine.cpp

179 lines
6.1 KiB
C++

// Copyright 2024 KVCache.AI
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "tent/transfer_engine.h"
#include "tent/common/config.h"
#include "tent/runtime/transfer_engine_impl.h"
#include <glog/logging.h>
namespace mooncake {
namespace tent {
TransferEngine::TransferEngine()
: impl_(std::make_unique<TransferEngineImpl>()) {}
TransferEngine::TransferEngine(const std::string config_path) {
auto conf = std::make_shared<Config>();
auto status = conf->loadFile(config_path);
if (!status.ok()) {
LOG(WARNING) << "Failed to read config file " << config_path;
}
impl_ = std::make_unique<TransferEngineImpl>(conf);
}
TransferEngine::TransferEngine(std::shared_ptr<Config> conf)
: impl_(std::make_unique<TransferEngineImpl>(conf)) {}
TransferEngine::~TransferEngine() {}
bool TransferEngine::available() const { return impl_->available(); }
const std::string TransferEngine::getSegmentName() const {
return impl_->getSegmentName();
}
const std::string TransferEngine::getRpcServerAddress() const {
return impl_->getRpcServerAddress();
}
uint16_t TransferEngine::getRpcServerPort() const {
return impl_->getRpcServerPort();
}
Status TransferEngine::exportLocalSegment(std::string& shared_handle) {
return impl_->exportLocalSegment(shared_handle);
}
Status TransferEngine::importRemoteSegment(SegmentID& handle,
const std::string& shared_handle) {
return impl_->importRemoteSegment(handle, shared_handle);
}
Status TransferEngine::openSegment(SegmentID& handle,
const std::string& segment_name) {
return impl_->openSegment(handle, segment_name);
}
Status TransferEngine::closeSegment(SegmentID handle) {
return impl_->closeSegment(handle);
}
Status TransferEngine::getSegmentInfo(SegmentID handle, SegmentInfo& info) {
return impl_->getSegmentInfo(handle, info);
}
Status TransferEngine::allocateLocalMemory(void** addr, size_t size,
Location location) {
return impl_->allocateLocalMemory(addr, size, location);
}
Status TransferEngine::allocateLocalMemory(void** addr, size_t size,
MemoryOptions& options) {
return impl_->allocateLocalMemory(addr, size, options);
}
Status TransferEngine::freeLocalMemory(void* addr) {
return impl_->freeLocalMemory(addr);
}
Status TransferEngine::registerLocalMemory(void* addr, size_t size,
Permission permission) {
return impl_->registerLocalMemory({addr}, {size}, permission);
}
Status TransferEngine::registerLocalMemory(void* addr, size_t size,
MemoryOptions& options) {
return impl_->registerLocalMemory({addr}, {size}, options);
}
Status TransferEngine::registerLocalMemory(std::vector<void*> addr_list,
std::vector<size_t> size_list,
Permission permission) {
return impl_->registerLocalMemory(addr_list, size_list, permission);
}
Status TransferEngine::registerLocalMemory(std::vector<void*> addr_list,
std::vector<size_t> size_list,
MemoryOptions& options) {
return impl_->registerLocalMemory(addr_list, size_list, options);
}
Status TransferEngine::unregisterLocalMemory(void* addr, size_t size) {
if (size == 0)
return impl_->unregisterLocalMemory({addr});
else
return impl_->unregisterLocalMemory({addr}, {size});
}
Status TransferEngine::unregisterLocalMemory(std::vector<void*> addr_list,
std::vector<size_t> size_list) {
return impl_->unregisterLocalMemory(addr_list, size_list);
}
BatchID TransferEngine::allocateBatch(size_t batch_size) {
return impl_->allocateBatch(batch_size);
}
Status TransferEngine::freeBatch(BatchID batch_id) {
return impl_->freeBatch(batch_id);
}
Status TransferEngine::submitTransfer(
BatchID batch_id, const std::vector<Request>& request_list) {
return impl_->submitTransfer(batch_id, request_list);
}
Status TransferEngine::submitTransfer(BatchID batch_id,
const std::vector<Request>& request_list,
const Notification& notifi) {
return impl_->submitTransfer(batch_id, request_list, notifi);
}
Status TransferEngine::sendNotification(SegmentID target_id,
const Notification& notifi) {
return impl_->sendNotification(target_id, notifi);
}
Status TransferEngine::receiveNotification(
std::vector<Notification>& notifi_list) {
return impl_->receiveNotification(notifi_list);
}
Status TransferEngine::probePeerAliveByID(SegmentID target_id) {
return impl_->probePeerAliveByID(target_id);
}
Status TransferEngine::getTransferStatus(BatchID batch_id, size_t task_id,
TransferStatus& task_status) {
return impl_->getTransferStatus(batch_id, task_id, task_status);
}
Status TransferEngine::getTransferStatus(
BatchID batch_id, std::vector<TransferStatus>& status_list) {
return impl_->getTransferStatus(batch_id, status_list);
}
Status TransferEngine::getTransferStatus(BatchID batch_id,
TransferStatus& overall_status) {
return impl_->getTransferStatus(batch_id, overall_status);
}
Status TransferEngine::progressBatch(BatchID batch_id,
TransferStatus& overall_status) {
return impl_->progressBatch(batch_id, overall_status);
}
} // namespace tent
} // namespace mooncake