-
Notifications
You must be signed in to change notification settings - Fork 3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
enhance: record memory size (uncompressed) item for index
- Current milvus use a serialized index size(compressed) for estimate resource for loading. - Add a new field MemSize (before compressing) for index to estimate resource. Signed-off-by: chyezh <[email protected]>
- Loading branch information
Showing
67 changed files
with
1,683 additions
and
1,324 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
// Copyright (C) 2019-2020 Zilliz. All rights reserved. | ||
// | ||
// 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 "common/protobuf_utils.h" | ||
#include "common/protobuf_utils_c.h" | ||
|
||
// Make a static_assert to ensure that the size and alignment of the C++ and C | ||
static_assert( | ||
sizeof(milvus::ProtoLayout) == sizeof(ProtoLayout), | ||
"Size of milvus::ProtoLayout is not equal to size of ProtoLayoutInterface"); | ||
|
||
// Make a static_assert to ensure that the size and alignment of the C++ and C | ||
static_assert(alignof(milvus::ProtoLayout) == alignof(ProtoLayout), | ||
"Alignment of milvus::ProtoLayout is not equal to alignment of " | ||
"ProtoLayoutInterface"); | ||
|
||
ProtoLayoutInterface | ||
CreateProtoLayout() { | ||
auto ptr = new milvus::ProtoLayout(); | ||
return reinterpret_cast<ProtoLayoutInterface>(ptr); | ||
} | ||
|
||
void | ||
ReleaseProtoLayout(ProtoLayoutInterface proto) { | ||
delete reinterpret_cast<milvus::ProtoLayout*>(proto); | ||
} | ||
|
||
namespace milvus { | ||
ProtoLayout::ProtoLayout() : blob_(nullptr), size_(0) { | ||
} | ||
|
||
ProtoLayout::~ProtoLayout() { | ||
if (blob_ != nullptr) { | ||
delete[] static_cast<uint8_t*>(blob_); | ||
} | ||
} | ||
} // namespace milvus |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
// Copyright (C) 2019-2020 Zilliz. All rights reserved. | ||
// | ||
// 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 | ||
|
||
#pragma once | ||
#ifdef __cplusplus | ||
extern "C" { | ||
#endif | ||
|
||
// ProtoLayout is a common ffi type for cgo call with serialized protobuf message. | ||
// It's always keep same memory layout with milvus::ProtoLayout at C++ side. | ||
typedef struct ProtoLayout { | ||
void* blob; | ||
size_t size; | ||
} ProtoLayout; | ||
|
||
// ProtoLayoutInterface is the pointer alias for ProtoLayout. | ||
// It should always created by CreateProtoLayout and released by ReleaseProtoLayout. | ||
typedef struct ProtoLayout* ProtoLayoutInterface; | ||
|
||
// CreateProtoLayout is used to create an empty ProtoLayout. | ||
// When you want to create a ProtoLayout at go-side, and return some data from C-side. | ||
// You should use this API. | ||
ProtoLayoutInterface | ||
CreateProtoLayout(); | ||
|
||
void | ||
ReleaseProtoLayout(ProtoLayoutInterface proto); | ||
|
||
#ifdef __cplusplus | ||
} | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
// Copyright (C) 2019-2020 Zilliz. All rights reserved. | ||
// | ||
// 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 "index/CreateIndexResult.h" | ||
|
||
namespace milvus::index { | ||
|
||
CreateIndexResultPtr | ||
CreateIndexResult::New( | ||
int64_t mem_size, | ||
std::vector<SerializedIndexFileInfo>&& serialized_index_infos) { | ||
return std::unique_ptr<CreateIndexResult>( | ||
new CreateIndexResult(mem_size, std::move(serialized_index_infos))); | ||
} | ||
|
||
CreateIndexResult::CreateIndexResult( | ||
int64_t mem_size, | ||
std::vector<SerializedIndexFileInfo>&& serialized_index_infos) | ||
: mem_size_(mem_size), serialized_index_infos_(serialized_index_infos) { | ||
} | ||
|
||
void | ||
CreateIndexResult::AppendSerializedIndexFileInfo( | ||
SerializedIndexFileInfo&& info) { | ||
serialized_index_infos_.push_back(std::move(info)); | ||
} | ||
|
||
void | ||
CreateIndexResult::SerializeAt(milvus::ProtoLayout* layout) { | ||
milvus::proto::cgo::CreateIndexResult result; | ||
result.set_mem_size(mem_size_); | ||
for (auto& info : serialized_index_infos_) { | ||
auto serialized_info = result.add_serialized_index_infos(); | ||
serialized_info->set_file_name(info.file_name); | ||
serialized_info->set_file_size(info.file_size); | ||
} | ||
AssertInfo(layout->SerializeAndHoldProto(result), | ||
"marshal CreateIndexResult failed"); | ||
} | ||
|
||
std::vector<std::string> | ||
CreateIndexResult::GetIndexFiles() const { | ||
std::vector<std::string> files; | ||
for (auto& info : serialized_index_infos_) { | ||
files.push_back(info.file_name); | ||
} | ||
return files; | ||
} | ||
|
||
int64_t | ||
CreateIndexResult::GetMemSize() const { | ||
return mem_size_; | ||
} | ||
|
||
int64_t | ||
CreateIndexResult::GetSerializedSize() const { | ||
int64_t size = 0; | ||
for (auto& info : serialized_index_infos_) { | ||
size += info.file_size; | ||
} | ||
return size; | ||
} | ||
|
||
} // namespace milvus::index |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
// Copyright (C) 2019-2020 Zilliz. All rights reserved. | ||
// | ||
// 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 | ||
|
||
#pragma once | ||
|
||
#include <string> | ||
#include <vector> | ||
#include "common/protobuf_utils.h" | ||
#include "pb/cgo_msg.pb.h" | ||
|
||
namespace milvus::index { | ||
|
||
class SerializedIndexFileInfo { | ||
public: | ||
SerializedIndexFileInfo(const std::string& file_name, int64_t file_size) | ||
: file_name(file_name), file_size(file_size) { | ||
} | ||
|
||
std::string file_name; | ||
int64_t file_size; | ||
}; | ||
|
||
class CreateIndexResult; | ||
|
||
using CreateIndexResultPtr = std::unique_ptr<CreateIndexResult>; | ||
|
||
class CreateIndexResult { | ||
public: | ||
// Create a new CreateIndexResult instance. | ||
static CreateIndexResultPtr | ||
New(int64_t mem_size, | ||
std::vector<SerializedIndexFileInfo>&& serialized_index_infos); | ||
|
||
CreateIndexResult(const CreateIndexResult&) = delete; | ||
|
||
CreateIndexResult(CreateIndexResult&&) = delete; | ||
|
||
CreateIndexResult& | ||
operator=(const CreateIndexResult&) = delete; | ||
|
||
CreateIndexResult& | ||
operator=(CreateIndexResult&&) = delete; | ||
|
||
// Append a new serialized index file info into the result. | ||
void | ||
AppendSerializedIndexFileInfo(SerializedIndexFileInfo&& info); | ||
|
||
// Serialize the result into the target proto layout. | ||
void | ||
SerializeAt(milvus::ProtoLayout* layout); | ||
|
||
std::vector<std::string> | ||
GetIndexFiles() const; | ||
|
||
int64_t | ||
GetMemSize() const; | ||
|
||
int64_t | ||
GetSerializedSize() const; | ||
|
||
private: | ||
CreateIndexResult( | ||
int64_t mem_size, | ||
std::vector<SerializedIndexFileInfo>&& serialized_index_infos); | ||
|
||
int64_t mem_size_; | ||
std::vector<SerializedIndexFileInfo> serialized_index_infos_; | ||
}; | ||
} // namespace milvus::index |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.