mirror of
https://gitee.com/milvus-io/milvus.git
synced 2025-12-31 16:05:30 +08:00
114 lines
5.2 KiB
C++
114 lines
5.2 KiB
C++
/*******************************************************************************
|
|
* Copyright 上海赜睿信息科技有限公司(Zilliz) - All Rights Reserved
|
|
* Unauthorized copying of this file, via any medium is strictly prohibited.
|
|
* Proprietary and confidential.
|
|
******************************************************************************/
|
|
|
|
#include "SchedInst.h"
|
|
#include "server/ServerConfig.h"
|
|
#include "ResourceFactory.h"
|
|
#include "knowhere/index/vector_index/gpu_ivf.h"
|
|
|
|
|
|
namespace zilliz {
|
|
namespace milvus {
|
|
namespace engine {
|
|
|
|
ResourceMgrPtr ResMgrInst::instance = nullptr;
|
|
std::mutex ResMgrInst::mutex_;
|
|
|
|
SchedulerPtr SchedInst::instance = nullptr;
|
|
std::mutex SchedInst::mutex_;
|
|
|
|
void
|
|
StartSchedulerService() {
|
|
try {
|
|
server::ConfigNode &config = server::ServerConfig::GetInstance().GetConfig(server::CONFIG_RESOURCE);
|
|
|
|
if (config.GetChildren().empty()) throw "resource_config null exception";
|
|
|
|
auto resources = config.GetChild(server::CONFIG_RESOURCES).GetChildren();
|
|
|
|
if (resources.empty()) throw "Children of resource_config null exception";
|
|
|
|
for (auto &resource : resources) {
|
|
auto &resname = resource.first;
|
|
auto &resconf = resource.second;
|
|
auto type = resconf.GetValue(server::CONFIG_RESOURCE_TYPE);
|
|
// auto memory = resconf.GetInt64Value(server::CONFIG_RESOURCE_MEMORY);
|
|
auto device_id = resconf.GetInt64Value(server::CONFIG_RESOURCE_DEVICE_ID);
|
|
auto enable_loader = resconf.GetBoolValue(server::CONFIG_RESOURCE_ENABLE_LOADER);
|
|
auto enable_executor = resconf.GetBoolValue(server::CONFIG_RESOURCE_ENABLE_EXECUTOR);
|
|
auto pinned_memory = resconf.GetInt64Value(server::CONFIG_RESOURCE_PIN_MEMORY);
|
|
auto temp_memory = resconf.GetInt64Value(server::CONFIG_RESOURCE_TEMP_MEMORY);
|
|
auto resource_num = resconf.GetInt64Value(server::CONFIG_RESOURCE_NUM);
|
|
|
|
auto res = ResMgrInst::GetInstance()->Add(ResourceFactory::Create(resname,
|
|
type,
|
|
device_id,
|
|
enable_loader,
|
|
enable_executor));
|
|
|
|
if (res.lock()->Type() == ResourceType::GPU) {
|
|
auto pinned_memory = resconf.GetInt64Value(server::CONFIG_RESOURCE_PIN_MEMORY, 300);
|
|
auto temp_memory = resconf.GetInt64Value(server::CONFIG_RESOURCE_TEMP_MEMORY, 300);
|
|
auto resource_num = resconf.GetInt64Value(server::CONFIG_RESOURCE_NUM, 2);
|
|
pinned_memory = 1024 * 1024 * pinned_memory;
|
|
temp_memory = 1024 * 1024 * temp_memory;
|
|
knowhere::FaissGpuResourceMgr::GetInstance().InitDevice(device_id,
|
|
pinned_memory,
|
|
temp_memory,
|
|
resource_num);
|
|
}
|
|
|
|
|
|
ResMgrInst::GetInstance()->Add(ResourceFactory::Create(resname,
|
|
type,
|
|
device_id,
|
|
enable_loader,
|
|
enable_executor));
|
|
|
|
pinned_memory = 1024 * 1024 * pinned_memory;
|
|
temp_memory = 1024 * 1024 * temp_memory;
|
|
knowhere::FaissGpuResourceMgr::GetInstance().InitDevice(device_id,
|
|
pinned_memory,
|
|
temp_memory,
|
|
resource_num);
|
|
}
|
|
|
|
knowhere::FaissGpuResourceMgr::GetInstance().InitResource();
|
|
|
|
auto connections = config.GetChild(server::CONFIG_RESOURCE_CONNECTIONS).GetChildren();
|
|
if(connections.empty()) throw "connections config null exception";
|
|
for (auto &conn : connections) {
|
|
auto &connect_name = conn.first;
|
|
auto &connect_conf = conn.second;
|
|
auto connect_speed = connect_conf.GetInt64Value(server::CONFIG_SPEED_CONNECTIONS);
|
|
auto connect_endpoint = connect_conf.GetValue(server::CONFIG_ENDPOINT_CONNECTIONS);
|
|
|
|
std::string delimiter = "===";
|
|
std::string left = connect_endpoint.substr(0, connect_endpoint.find(delimiter));
|
|
std::string right = connect_endpoint.substr(connect_endpoint.find(delimiter) + 3,
|
|
connect_endpoint.length());
|
|
|
|
auto connection = Connection(connect_name, connect_speed);
|
|
ResMgrInst::GetInstance()->Connect(left, right, connection);
|
|
}
|
|
} catch (const char* msg) {
|
|
SERVER_LOG_ERROR << msg;
|
|
exit(-1);
|
|
}
|
|
|
|
ResMgrInst::GetInstance()->Start();
|
|
SchedInst::GetInstance()->Start();
|
|
}
|
|
|
|
void
|
|
StopSchedulerService() {
|
|
ResMgrInst::GetInstance()->Stop();
|
|
SchedInst::GetInstance()->Stop();
|
|
}
|
|
}
|
|
}
|
|
}
|