|
20 | 20 | #include <cstdint> |
21 | 21 | #include <future> |
22 | 22 | #include <memory> |
| 23 | +#include <optional> |
23 | 24 | #include <string> |
24 | 25 | #include <vector> |
25 | 26 |
|
26 | 27 | #include "arrow/api.h" |
| 28 | +#include "cachinglayer/LoadingOverheadTracker.h" |
27 | 29 | #include <folly/CancellationToken.h> |
28 | 30 | #include "folly/ScopeGuard.h" |
29 | 31 | #include "common/EasyAssert.h" |
@@ -209,6 +211,52 @@ TEST(FieldDataLoadBatchSplitTargetBytes, CapsTargetByConfiguredBudget) { |
209 | 211 | EXPECT_EQ(FieldDataLoadBatchSplitTargetBytes(), 8 * MB); |
210 | 212 | } |
211 | 213 |
|
| 214 | +TEST(FieldDataLoadingOverheadUpperBound, UsesUnlimitedWhenBudgetDisabled) { |
| 215 | + auto& budget = |
| 216 | + milvus::storage::TransientMemoryBudget::GetLoadTransientBudget(); |
| 217 | + auto old_capacity = budget.CapacityBytes(); |
| 218 | + auto cleanup = folly::makeGuard( |
| 219 | + [&budget, old_capacity]() { budget.SetCapacityBytes(old_capacity); }); |
| 220 | + |
| 221 | + budget.SetCapacityBytes(0); |
| 222 | + |
| 223 | + auto upper_bound = |
| 224 | + FieldDataLoadingOverheadUpperBound(/*max_memory_overhead=*/128); |
| 225 | + |
| 226 | + EXPECT_EQ( |
| 227 | + upper_bound.memory_bytes, |
| 228 | + milvus::cachinglayer::LoadingOverheadTracker::kUnlimited.memory_bytes); |
| 229 | + EXPECT_EQ( |
| 230 | + upper_bound.file_bytes, |
| 231 | + milvus::cachinglayer::LoadingOverheadTracker::kUnlimited.file_bytes); |
| 232 | +} |
| 233 | + |
| 234 | +TEST(FieldDataLoadingOverheadUpperBound, UsesBudgetWithMaxOverheadFloor) { |
| 235 | + constexpr int64_t MB = 1 << 20; |
| 236 | + auto& budget = |
| 237 | + milvus::storage::TransientMemoryBudget::GetLoadTransientBudget(); |
| 238 | + auto old_capacity = budget.CapacityBytes(); |
| 239 | + auto cleanup = folly::makeGuard( |
| 240 | + [&budget, old_capacity]() { budget.SetCapacityBytes(old_capacity); }); |
| 241 | + |
| 242 | + budget.SetCapacityBytes(8 * MB); |
| 243 | + |
| 244 | + auto memory_only = |
| 245 | + FieldDataLoadingOverheadUpperBound(/*max_memory_overhead=*/16 * MB); |
| 246 | + EXPECT_EQ(memory_only.memory_bytes, 16 * MB); |
| 247 | + EXPECT_EQ(memory_only.file_bytes, 0); |
| 248 | + |
| 249 | + auto mmap_smaller_overhead = FieldDataLoadingOverheadUpperBound( |
| 250 | + /*max_memory_overhead=*/4 * MB, std::optional<int64_t>{2 * MB}); |
| 251 | + EXPECT_EQ(mmap_smaller_overhead.memory_bytes, 8 * MB); |
| 252 | + EXPECT_EQ(mmap_smaller_overhead.file_bytes, 8 * MB); |
| 253 | + |
| 254 | + auto mmap_larger_file_overhead = FieldDataLoadingOverheadUpperBound( |
| 255 | + /*max_memory_overhead=*/4 * MB, std::optional<int64_t>{32 * MB}); |
| 256 | + EXPECT_EQ(mmap_larger_file_overhead.memory_bytes, 8 * MB); |
| 257 | + EXPECT_EQ(mmap_larger_file_overhead.file_bytes, 32 * MB); |
| 258 | +} |
| 259 | + |
212 | 260 | // ---- LoadCellBatchAsync tests ---- |
213 | 261 |
|
214 | 262 | namespace { |
|
0 commit comments