You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-07-30 19:23:07 +03:00
MCOL-5044 This patch replaces PriorityThreadPool with FairThreadPool that uses a simple
operations + morsel size weight model to equally allocate CPU b/w parallel query morsels. This patch delivers better parallel query timings distribution(timings graph resembles normal distribution with a bigger left side thus more queries runs faster comparing with PrioThreadPool-based single-node installation). See changes in batchprimitiveprocessor-jl.h and comments in fair_threadpool.h for important implementation details
This commit is contained in:
committed by
Roman Nozdrin
parent
0f0b3a2bed
commit
fd8ba33f21
@ -1274,6 +1274,10 @@ void BatchPrimitiveProcessorJL::runBPP(ByteStream& bs, uint32_t pmNum)
|
||||
bs << uniqueID;
|
||||
bs << _priority;
|
||||
|
||||
// The weight is used by PrimProc thread pool algo
|
||||
uint32_t weight = calculateBPPWeight();
|
||||
bs << weight;
|
||||
|
||||
bs << dbRoot;
|
||||
bs << count;
|
||||
|
||||
|
@ -252,8 +252,27 @@ class BatchPrimitiveProcessorJL
|
||||
}
|
||||
|
||||
private:
|
||||
// void setLBIDForScan(uint64_t rid, uint32_t dbroot);
|
||||
const size_t perColumnProjectWeight_ = 10;
|
||||
const size_t perColumnFilteringWeight_ = 10;
|
||||
const size_t fe1Weight_ = 10;
|
||||
const size_t fe2Weight_ = 10;
|
||||
const size_t joinWeight_ = 500;
|
||||
const size_t aggregationWeight_ = 500;
|
||||
|
||||
// This is simple SQL operations-based model leveraged by
|
||||
// FairThreadPool run by PP facility.
|
||||
// Every operation mentioned in this calculation spends
|
||||
// some CPU so the morsel uses this op weights more.
|
||||
uint32_t calculateBPPWeight() const
|
||||
{
|
||||
uint32_t weight = perColumnProjectWeight_ * projectCount;
|
||||
weight += filterCount * perColumnFilteringWeight_;
|
||||
weight += tJoiners.size() * joinWeight_;
|
||||
weight += (aggregatorPM) ? aggregationWeight_ : 0;
|
||||
weight += (fe1) ? fe1Weight_ : 0;
|
||||
weight += (fe2) ? fe2Weight_ : 0;
|
||||
return weight;
|
||||
}
|
||||
BPSOutputType ot;
|
||||
|
||||
bool needToSetLBID;
|
||||
|
@ -20,7 +20,6 @@
|
||||
#include "tuplehashjoin.h"
|
||||
#include "joinpartition.h"
|
||||
#include "threadnaming.h"
|
||||
#include "../../utils/threadpool/prioritythreadpool.h"
|
||||
|
||||
#pragma once
|
||||
|
||||
|
Reference in New Issue
Block a user