diff options
| author | Dan Engelbrecht <[email protected]> | 2025-09-10 16:38:33 +0200 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2025-09-10 16:38:33 +0200 |
| commit | 339668ac935f781c06225d2d685642e27348772b (patch) | |
| tree | a5552d166eef9b5c72a2f9a6903e584dfc8968d7 /src/zenstore/cas.cpp | |
| parent | faster oplog entries with referenceset (#488) (diff) | |
| download | zen-339668ac935f781c06225d2d685642e27348772b.tar.xz zen-339668ac935f781c06225d2d685642e27348772b.zip | |
add EMode to WorkerTheadPool to avoid thread starvation (#492)
- Improvement: Add a new mode to worker thread pools to avoid starvation of workers which could cause long stalls due to other work begin queued up. UE-305498
Diffstat (limited to 'src/zenstore/cas.cpp')
| -rw-r--r-- | src/zenstore/cas.cpp | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/zenstore/cas.cpp b/src/zenstore/cas.cpp index 6b89beb3d..49d24c21e 100644 --- a/src/zenstore/cas.cpp +++ b/src/zenstore/cas.cpp @@ -132,13 +132,18 @@ CasImpl::Initialize(const CidStoreConfiguration& InConfig) WorkerThreadPool& WorkerPool = GetMediumWorkerPool(EWorkloadType::Burst); std::vector<std::future<void>> Work; Work.emplace_back( - WorkerPool.EnqueueTask(std::packaged_task<void()>{[&]() { m_LargeStrategy.Initialize(m_Config.RootDirectory, IsNewStore); }})); - Work.emplace_back(WorkerPool.EnqueueTask(std::packaged_task<void()>{[&]() { - m_TinyStrategy.Initialize(m_Config.RootDirectory, "tobs", 1u << 28, 16, IsNewStore); // 256 Mb per block - }})); - Work.emplace_back(WorkerPool.EnqueueTask(std::packaged_task<void()>{[&]() { - m_SmallStrategy.Initialize(m_Config.RootDirectory, "sobs", 1u << 30, 4096, IsNewStore); // 1 Gb per block - }})); + WorkerPool.EnqueueTask(std::packaged_task<void()>{[&]() { m_LargeStrategy.Initialize(m_Config.RootDirectory, IsNewStore); }}, + WorkerThreadPool::EMode::DisableBacklog)); + Work.emplace_back(WorkerPool.EnqueueTask( + std::packaged_task<void()>{[&]() { + m_TinyStrategy.Initialize(m_Config.RootDirectory, "tobs", 1u << 28, 16, IsNewStore); // 256 Mb per block + }}, + WorkerThreadPool::EMode::DisableBacklog)); + Work.emplace_back(WorkerPool.EnqueueTask( + std::packaged_task<void()>{[&]() { + m_SmallStrategy.Initialize(m_Config.RootDirectory, "sobs", 1u << 30, 4096, IsNewStore); // 1 Gb per block + }}, + WorkerThreadPool::EMode::DisableBacklog)); for (std::future<void>& Result : Work) { if (Result.valid()) |