aboutsummaryrefslogtreecommitdiff
path: root/src/zenstore/gc.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2025-03-06 17:27:59 +0100
committerStefan Boberg <[email protected]>2025-03-06 17:27:59 +0100
commit66e5d1f4e288e0c32f854ebe3b63584b42b83554 (patch)
treed67e9d358419b5baccd429d54988414e0d7cd7a6 /src/zenstore/gc.cpp
parentreduced memory churn using fixed_xxx containers (#236) (diff)
downloadzen-66e5d1f4e288e0c32f854ebe3b63584b42b83554.tar.xz
zen-66e5d1f4e288e0c32f854ebe3b63584b42b83554.zip
switched std::vector -> eastl::vector
Diffstat (limited to 'src/zenstore/gc.cpp')
-rw-r--r--src/zenstore/gc.cpp142
1 files changed, 71 insertions, 71 deletions
diff --git a/src/zenstore/gc.cpp b/src/zenstore/gc.cpp
index 7ac10d613..258ec80ca 100644
--- a/src/zenstore/gc.cpp
+++ b/src/zenstore/gc.cpp
@@ -536,7 +536,7 @@ CompareForGC(const IoHash& Lhs, const IoHash& Rhs)
}
bool
-FilterReferences(GcCtx& Ctx, std::string_view Context, std::vector<IoHash>& InOutReferences)
+FilterReferences(GcCtx& Ctx, std::string_view Context, eastl::vector<IoHash>& InOutReferences)
{
if (InOutReferences.empty())
{
@@ -564,7 +564,7 @@ FilterReferences(GcCtx& Ctx, std::string_view Context, std::vector<IoHash>& InOu
if (Filter)
{
- std::erase_if(InOutReferences, [&Ctx](const IoHash& Key) {
+ zen::erase_if(InOutReferences, [&Ctx](const IoHash& Key) {
return ((Ctx.Settings.AttachmentRangeMax < Key) || (Key < Ctx.Settings.AttachmentRangeMin));
});
RemovedCount = TotalCount - InOutReferences.size();
@@ -651,7 +651,7 @@ void
GcManager::RemoveGcReferencer(GcReferencer& Referencer)
{
RwLock::ExclusiveLockScope _(m_Lock);
- std::erase_if(m_GcReferencers, [&](GcReferencer* $) { return $ == &Referencer; });
+ zen::erase_if(m_GcReferencers, [&](GcReferencer* $) { return $ == &Referencer; });
}
void
@@ -666,7 +666,7 @@ GcManager::RemoveGcReferenceLocker(GcReferenceLocker& ReferenceLocker)
{
ZEN_MEMSCOPE(GetGcTag());
RwLock::ExclusiveLockScope _(m_Lock);
- std::erase_if(m_GcReferencerLockers, [&](GcReferenceLocker* $) { return $ == &ReferenceLocker; });
+ zen::erase_if(m_GcReferencerLockers, [&](GcReferenceLocker* $) { return $ == &ReferenceLocker; });
}
void
@@ -680,7 +680,7 @@ void
GcManager::RemoveGcReferenceStore(GcReferenceStore& ReferenceStore)
{
RwLock::ExclusiveLockScope _(m_Lock);
- std::erase_if(m_GcReferenceStores, [&](GcReferenceStore* $) { return $ == &ReferenceStore; });
+ zen::erase_if(m_GcReferenceStores, [&](GcReferenceStore* $) { return $ == &ReferenceStore; });
}
#define SCOPED_TIMER(closure) \
@@ -892,7 +892,7 @@ GcManager::CollectGarbage(const GcSettings& Settings)
auto _ = MakeGuard([&WorkLeft]() { WorkLeft.CountDown(); });
// The Referencer will create a reference checker that guarantees that the references do not change
// as long as it lives
- std::vector<GcReferenceChecker*> Checkers;
+ eastl::vector<GcReferenceChecker*> Checkers;
try
{
{
@@ -973,8 +973,8 @@ GcManager::CollectGarbage(const GcSettings& Settings)
&ReferenceValidators]() {
ZEN_MEMSCOPE(GetGcTag());
- auto _ = MakeGuard([&WorkLeft]() { WorkLeft.CountDown(); });
- std::vector<GcReferenceValidator*> Validators;
+ auto _ = MakeGuard([&WorkLeft]() { WorkLeft.CountDown(); });
+ eastl::vector<GcReferenceValidator*> Validators;
try
{
{
@@ -1069,7 +1069,7 @@ GcManager::CollectGarbage(const GcSettings& Settings)
WorkerThreadPool& LockedPhaseThreadPool =
Settings.SingleThread ? GetSyncWorkerPool() : GetMediumWorkerPool(EWorkloadType::Background);
- std::vector<RwLock::SharedLockScope> LockerScopes;
+ eastl::vector<RwLock::SharedLockScope> LockerScopes;
SCOPED_TIMER(uint64_t ElapsedMS = Timer.GetElapsedTimeMs(); Result.WriteBlockMS = std::chrono::milliseconds(ElapsedMS););
{
if (!ReferenceCheckers.empty())
@@ -1093,7 +1093,7 @@ GcManager::CollectGarbage(const GcSettings& Settings)
});
for (GcReferenceLocker* ReferenceLocker : m_GcReferencerLockers)
{
- std::vector<RwLock::SharedLockScope> LockScopes = ReferenceLocker->LockState(Ctx);
+ eastl::vector<RwLock::SharedLockScope> LockScopes = ReferenceLocker->LockState(Ctx);
for (auto It = std::make_move_iterator(LockScopes.begin());
It != std::make_move_iterator(LockScopes.end());
It++)
@@ -1373,7 +1373,7 @@ void
GcManager::RemoveGcStorage(GcStorage* Storage)
{
RwLock::ExclusiveLockScope _(m_Lock);
- std::erase_if(m_GcStorage, [&](GcStorage* $) { return $ == Storage; });
+ zen::erase_if(m_GcStorage, [&](GcStorage* $) { return $ == Storage; });
}
void
@@ -1442,13 +1442,13 @@ DiskUsageWindow::KeepRange(GcClock::Tick StartTick, GcClock::Tick EndTick)
}
}
-std::vector<uint64_t>
+eastl::vector<uint64_t>
DiskUsageWindow::GetDiskDeltas(GcClock::Tick StartTick, GcClock::Tick EndTick, GcClock::Tick DeltaWidth, uint64_t& OutMaxDelta) const
{
ZEN_ASSERT(StartTick != -1);
ZEN_ASSERT(DeltaWidth > 0);
- std::vector<uint64_t> Result;
+ eastl::vector<uint64_t> Result;
Result.reserve((EndTick - StartTick + DeltaWidth - 1) / DeltaWidth);
size_t WindowSize = m_LogWindow.size();
@@ -1729,7 +1729,7 @@ GcScheduler::AppendGCLog(std::string_view Id, GcClock::TimePoint StartTime, cons
ZEN_MEMSCOPE(GetGcTag());
try
{
- std::vector<uint8_t> Blob;
+ eastl::vector<uint8_t> Blob;
{
CbObjectWriter Writer;
Writer.BeginObject(Id);
@@ -2055,7 +2055,7 @@ GcScheduler::SchedulerThread()
const int64_t PressureGraphLength = 30;
const std::chrono::duration LoadGraphTime = PressureGraphLength * m_Config.MonitorInterval;
- std::vector<uint64_t> DiskDeltas;
+ eastl::vector<uint64_t> DiskDeltas;
uint64_t MaxLoad = 0;
{
@@ -2721,7 +2721,7 @@ TEST_CASE("gc.diskusagewindow")
{
uint64_t MaxDelta = 0;
// 0-10, 10-20, 20-30, 30-40, 40-50, 50-60, 60-70, 70-80
- std::vector<uint64_t> DiskDeltas = Stats.GetDiskDeltas(0, 80, 10, MaxDelta);
+ eastl::vector<uint64_t> DiskDeltas = Stats.GetDiskDeltas(0, 80, 10, MaxDelta);
CHECK(DiskDeltas.size() == 8);
CHECK(MaxDelta == 15);
CHECK(DiskDeltas[0] == 0);
@@ -2736,8 +2736,8 @@ TEST_CASE("gc.diskusagewindow")
SUBCASE("Sub range")
{
- uint64_t MaxDelta = 0;
- std::vector<uint64_t> DiskDeltas = Stats.GetDiskDeltas(20, 40, 10, MaxDelta);
+ uint64_t MaxDelta = 0;
+ eastl::vector<uint64_t> DiskDeltas = Stats.GetDiskDeltas(20, 40, 10, MaxDelta);
CHECK(DiskDeltas.size() == 2);
CHECK(MaxDelta == 10);
CHECK(DiskDeltas[0] == 10); // [20:30]
@@ -2745,8 +2745,8 @@ TEST_CASE("gc.diskusagewindow")
}
SUBCASE("Unaligned sub range 1")
{
- uint64_t MaxDelta = 0;
- std::vector<uint64_t> DiskDeltas = Stats.GetDiskDeltas(21, 51, 10, MaxDelta);
+ uint64_t MaxDelta = 0;
+ eastl::vector<uint64_t> DiskDeltas = Stats.GetDiskDeltas(21, 51, 10, MaxDelta);
CHECK(DiskDeltas.size() == 3);
CHECK(MaxDelta == 10);
CHECK(DiskDeltas[0] == 0); // [21:31]
@@ -2755,8 +2755,8 @@ TEST_CASE("gc.diskusagewindow")
}
SUBCASE("Unaligned end range")
{
- uint64_t MaxDelta = 0;
- std::vector<uint64_t> DiskDeltas = Stats.GetDiskDeltas(29, 79, 10, MaxDelta);
+ uint64_t MaxDelta = 0;
+ eastl::vector<uint64_t> DiskDeltas = Stats.GetDiskDeltas(29, 79, 10, MaxDelta);
CHECK(DiskDeltas.size() == 5);
CHECK(MaxDelta == 15);
CHECK(DiskDeltas[0] == 0); // [29:39]
@@ -2767,8 +2767,8 @@ TEST_CASE("gc.diskusagewindow")
}
SUBCASE("Ahead of window")
{
- uint64_t MaxDelta = 0;
- std::vector<uint64_t> DiskDeltas = Stats.GetDiskDeltas(-40, 0, 10, MaxDelta);
+ uint64_t MaxDelta = 0;
+ eastl::vector<uint64_t> DiskDeltas = Stats.GetDiskDeltas(-40, 0, 10, MaxDelta);
CHECK(DiskDeltas.size() == 4);
CHECK(MaxDelta == 0);
CHECK(DiskDeltas[0] == 0); // [-40:-30]
@@ -2778,8 +2778,8 @@ TEST_CASE("gc.diskusagewindow")
}
SUBCASE("After of window")
{
- uint64_t MaxDelta = 0;
- std::vector<uint64_t> DiskDeltas = Stats.GetDiskDeltas(90, 120, 10, MaxDelta);
+ uint64_t MaxDelta = 0;
+ eastl::vector<uint64_t> DiskDeltas = Stats.GetDiskDeltas(90, 120, 10, MaxDelta);
CHECK(DiskDeltas.size() == 3);
CHECK(MaxDelta == 0);
CHECK(DiskDeltas[0] == 0); // [90:100]
@@ -2788,8 +2788,8 @@ TEST_CASE("gc.diskusagewindow")
}
SUBCASE("Encapsulating window")
{
- uint64_t MaxDelta = 0;
- std::vector<uint64_t> DiskDeltas = Stats.GetDiskDeltas(-20, 100, 10, MaxDelta);
+ uint64_t MaxDelta = 0;
+ eastl::vector<uint64_t> DiskDeltas = Stats.GetDiskDeltas(-20, 100, 10, MaxDelta);
CHECK(DiskDeltas.size() == 12);
CHECK(MaxDelta == 15);
CHECK(DiskDeltas[0] == 0); // [-20:-10]
@@ -2808,8 +2808,8 @@ TEST_CASE("gc.diskusagewindow")
SUBCASE("Full range half stride")
{
- uint64_t MaxDelta = 0;
- std::vector<uint64_t> DiskDeltas = Stats.GetDiskDeltas(0, 80, 20, MaxDelta);
+ uint64_t MaxDelta = 0;
+ eastl::vector<uint64_t> DiskDeltas = Stats.GetDiskDeltas(0, 80, 20, MaxDelta);
CHECK(DiskDeltas.size() == 4);
CHECK(MaxDelta == 20);
CHECK(DiskDeltas[0] == 10); // [0:20]
@@ -2820,8 +2820,8 @@ TEST_CASE("gc.diskusagewindow")
SUBCASE("Partial odd stride")
{
- uint64_t MaxDelta = 0;
- std::vector<uint64_t> DiskDeltas = Stats.GetDiskDeltas(13, 67, 18, MaxDelta);
+ uint64_t MaxDelta = 0;
+ eastl::vector<uint64_t> DiskDeltas = Stats.GetDiskDeltas(13, 67, 18, MaxDelta);
CHECK(DiskDeltas.size() == 3);
CHECK(MaxDelta == 15);
CHECK(DiskDeltas[0] == 10); // [13:31]
@@ -2850,72 +2850,72 @@ TEST_CASE("gc.keepunusedreferences")
IoHash::FromHexString("ab3917854bfef7e7af2c372d795bb907a15cab15"),
IoHash::FromHexString("d1df59fcab06793a5f2c372d795bb907a15cab15")};
{
- std::vector<IoHash> UsedReferences;
- std::vector<IoHash> References;
- std::span<IoHash> UnusedReferences = KeepUnusedReferences(UsedReferences, References);
+ eastl::vector<IoHash> UsedReferences;
+ eastl::vector<IoHash> References;
+ std::span<IoHash> UnusedReferences = KeepUnusedReferences(UsedReferences, References);
CHECK(UnusedReferences.empty());
}
{
- std::vector<IoHash> UsedReferences{Hashes[0], Hashes[1], Hashes[2], Hashes[3], Hashes[4]};
- std::vector<IoHash> References;
- std::span<IoHash> UnusedReferences = KeepUnusedReferences(UsedReferences, References);
+ eastl::vector<IoHash> UsedReferences{Hashes[0], Hashes[1], Hashes[2], Hashes[3], Hashes[4]};
+ eastl::vector<IoHash> References;
+ std::span<IoHash> UnusedReferences = KeepUnusedReferences(UsedReferences, References);
CHECK(UnusedReferences.empty());
}
{
- std::vector<IoHash> UsedReferences{};
- std::vector<IoHash> References{Hashes[0], Hashes[1], Hashes[2], Hashes[3], Hashes[4]};
- std::span<IoHash> UnusedReferences = KeepUnusedReferences(UsedReferences, References);
+ eastl::vector<IoHash> UsedReferences{};
+ eastl::vector<IoHash> References{Hashes[0], Hashes[1], Hashes[2], Hashes[3], Hashes[4]};
+ std::span<IoHash> UnusedReferences = KeepUnusedReferences(UsedReferences, References);
CHECK(UnusedReferences.size() == 5);
}
{
- std::vector<IoHash> UsedReferences{Hashes[0], Hashes[1], Hashes[2], Hashes[3], Hashes[4]};
- std::vector<IoHash> References{Hashes[0], Hashes[1], Hashes[2], Hashes[3], Hashes[4]};
- std::span<IoHash> UnusedReferences = KeepUnusedReferences(UsedReferences, References);
+ eastl::vector<IoHash> UsedReferences{Hashes[0], Hashes[1], Hashes[2], Hashes[3], Hashes[4]};
+ eastl::vector<IoHash> References{Hashes[0], Hashes[1], Hashes[2], Hashes[3], Hashes[4]};
+ std::span<IoHash> UnusedReferences = KeepUnusedReferences(UsedReferences, References);
CHECK(UnusedReferences.empty());
}
{
- std::vector<IoHash> UsedReferences{Hashes[0], Hashes[2], Hashes[4]};
- std::vector<IoHash> References{Hashes[0], Hashes[1], Hashes[2], Hashes[3], Hashes[4]};
- std::span<IoHash> UnusedReferences = KeepUnusedReferences(UsedReferences, References);
+ eastl::vector<IoHash> UsedReferences{Hashes[0], Hashes[2], Hashes[4]};
+ eastl::vector<IoHash> References{Hashes[0], Hashes[1], Hashes[2], Hashes[3], Hashes[4]};
+ std::span<IoHash> UnusedReferences = KeepUnusedReferences(UsedReferences, References);
CHECK(UnusedReferences.size() == 2);
CHECK(UnusedReferences[0] == Hashes[1]);
CHECK(UnusedReferences[1] == Hashes[3]);
}
{
- std::vector<IoHash> UsedReferences{Hashes[2], Hashes[3], Hashes[4]};
- std::vector<IoHash> References{Hashes[0], Hashes[1], Hashes[2], Hashes[3], Hashes[4]};
- std::span<IoHash> UnusedReferences = KeepUnusedReferences(UsedReferences, References);
+ eastl::vector<IoHash> UsedReferences{Hashes[2], Hashes[3], Hashes[4]};
+ eastl::vector<IoHash> References{Hashes[0], Hashes[1], Hashes[2], Hashes[3], Hashes[4]};
+ std::span<IoHash> UnusedReferences = KeepUnusedReferences(UsedReferences, References);
CHECK(UnusedReferences.size() == 2);
CHECK(UnusedReferences[0] == Hashes[0]);
CHECK(UnusedReferences[1] == Hashes[1]);
}
{
- std::vector<IoHash> UsedReferences{Hashes[0], Hashes[1], Hashes[2]};
- std::vector<IoHash> References{Hashes[0], Hashes[1], Hashes[2], Hashes[3], Hashes[4]};
- std::span<IoHash> UnusedReferences = KeepUnusedReferences(UsedReferences, References);
+ eastl::vector<IoHash> UsedReferences{Hashes[0], Hashes[1], Hashes[2]};
+ eastl::vector<IoHash> References{Hashes[0], Hashes[1], Hashes[2], Hashes[3], Hashes[4]};
+ std::span<IoHash> UnusedReferences = KeepUnusedReferences(UsedReferences, References);
CHECK(UnusedReferences.size() == 2);
CHECK(UnusedReferences[0] == Hashes[3]);
CHECK(UnusedReferences[1] == Hashes[4]);
}
{
- std::vector<IoHash> UsedReferences{Hashes[0], Hashes[1], Hashes[2], Hashes[4]};
- std::vector<IoHash> References{Hashes[0], Hashes[1], Hashes[2], Hashes[3], Hashes[4]};
- std::span<IoHash> UnusedReferences = KeepUnusedReferences(UsedReferences, References);
+ eastl::vector<IoHash> UsedReferences{Hashes[0], Hashes[1], Hashes[2], Hashes[4]};
+ eastl::vector<IoHash> References{Hashes[0], Hashes[1], Hashes[2], Hashes[3], Hashes[4]};
+ std::span<IoHash> UnusedReferences = KeepUnusedReferences(UsedReferences, References);
CHECK(UnusedReferences.size() == 1);
CHECK(UnusedReferences[0] == Hashes[3]);
}
{
- std::vector<IoHash> UsedReferences{Hashes[1], Hashes[3]};
- std::vector<IoHash> References{Hashes[0], Hashes[1], Hashes[2], Hashes[3], Hashes[4]};
- std::span<IoHash> UnusedReferences = KeepUnusedReferences(UsedReferences, References);
+ eastl::vector<IoHash> UsedReferences{Hashes[1], Hashes[3]};
+ eastl::vector<IoHash> References{Hashes[0], Hashes[1], Hashes[2], Hashes[3], Hashes[4]};
+ std::span<IoHash> UnusedReferences = KeepUnusedReferences(UsedReferences, References);
CHECK(UnusedReferences.size() == 3);
CHECK(UnusedReferences[0] == Hashes[0]);
CHECK(UnusedReferences[1] == Hashes[2]);
@@ -2923,9 +2923,9 @@ TEST_CASE("gc.keepunusedreferences")
}
{
- std::vector<IoHash> UsedReferences{Hashes[0]};
- std::vector<IoHash> References{Hashes[0], Hashes[1], Hashes[2], Hashes[3], Hashes[4]};
- std::span<IoHash> UnusedReferences = KeepUnusedReferences(UsedReferences, References);
+ eastl::vector<IoHash> UsedReferences{Hashes[0]};
+ eastl::vector<IoHash> References{Hashes[0], Hashes[1], Hashes[2], Hashes[3], Hashes[4]};
+ std::span<IoHash> UnusedReferences = KeepUnusedReferences(UsedReferences, References);
CHECK(UnusedReferences.size() == 4);
CHECK(UnusedReferences[0] == Hashes[1]);
CHECK(UnusedReferences[1] == Hashes[2]);
@@ -2934,9 +2934,9 @@ TEST_CASE("gc.keepunusedreferences")
}
{
- std::vector<IoHash> UsedReferences{Hashes[1]};
- std::vector<IoHash> References{Hashes[0], Hashes[1], Hashes[2], Hashes[3], Hashes[4]};
- std::span<IoHash> UnusedReferences = KeepUnusedReferences(UsedReferences, References);
+ eastl::vector<IoHash> UsedReferences{Hashes[1]};
+ eastl::vector<IoHash> References{Hashes[0], Hashes[1], Hashes[2], Hashes[3], Hashes[4]};
+ std::span<IoHash> UnusedReferences = KeepUnusedReferences(UsedReferences, References);
CHECK(UnusedReferences.size() == 4);
CHECK(UnusedReferences[0] == Hashes[0]);
CHECK(UnusedReferences[1] == Hashes[2]);
@@ -2945,9 +2945,9 @@ TEST_CASE("gc.keepunusedreferences")
}
{
- std::vector<IoHash> UsedReferences{Hashes[3]};
- std::vector<IoHash> References{Hashes[0], Hashes[1], Hashes[2], Hashes[3], Hashes[4]};
- std::span<IoHash> UnusedReferences = KeepUnusedReferences(UsedReferences, References);
+ eastl::vector<IoHash> UsedReferences{Hashes[3]};
+ eastl::vector<IoHash> References{Hashes[0], Hashes[1], Hashes[2], Hashes[3], Hashes[4]};
+ std::span<IoHash> UnusedReferences = KeepUnusedReferences(UsedReferences, References);
CHECK(UnusedReferences.size() == 4);
CHECK(UnusedReferences[0] == Hashes[0]);
CHECK(UnusedReferences[1] == Hashes[1]);
@@ -2956,9 +2956,9 @@ TEST_CASE("gc.keepunusedreferences")
}
{
- std::vector<IoHash> UsedReferences{Hashes[4]};
- std::vector<IoHash> References{Hashes[0], Hashes[1], Hashes[2], Hashes[3], Hashes[4]};
- std::span<IoHash> UnusedReferences = KeepUnusedReferences(UsedReferences, References);
+ eastl::vector<IoHash> UsedReferences{Hashes[4]};
+ eastl::vector<IoHash> References{Hashes[0], Hashes[1], Hashes[2], Hashes[3], Hashes[4]};
+ std::span<IoHash> UnusedReferences = KeepUnusedReferences(UsedReferences, References);
CHECK(UnusedReferences.size() == 4);
CHECK(UnusedReferences[0] == Hashes[0]);
CHECK(UnusedReferences[1] == Hashes[1]);