Skip to content

Commit

Permalink
enhance: limit the max pool size to 16 (#30371) (#30415)
Browse files Browse the repository at this point in the history
according to our benchmark, concurrency level 16 is enough to fully
utilize the object storage network bandwidth
pr: #30371

Signed-off-by: yah01 <yang.cen@zilliz.com>
  • Loading branch information
yah01 committed Feb 20, 2024
1 parent 4b7c5ba commit 52ac071
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 5 deletions.
11 changes: 7 additions & 4 deletions internal/core/src/storage/ThreadPool.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,13 @@ class ThreadPool {
max_threads_size_ = CPU_NUM * thread_core_coefficient;

// only IO pool will set large limit, but the CPU helps nothing to IO operations,
// we need to limit the max thread num, each thread will download 16 MiB data,
// it should be not greater than 256 (4GiB data) to avoid OOM and send too many requests to object storage
if (max_threads_size_ > 256) {
max_threads_size_ = 256;
// we need to limit the max thread num, each thread will download 16~64 MiB data,
// according to our benchmark, 16 threads is enough to saturate the network bandwidth.
if (min_threads_size_ > 16) {
min_threads_size_ = 16;
}
if (max_threads_size_ > 16) {
max_threads_size_ = 16;
}
LOG_SEGCORE_INFO_ << "Init thread pool:" << name_
<< " with min worker num:" << min_threads_size_
Expand Down
7 changes: 6 additions & 1 deletion internal/querynodev2/segments/pool.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,13 @@ func initDynamicPool() {

func initLoadPool() {
loadOnce.Do(func() {
pt := paramtable.Get()
poolSize := hardware.GetCPUNum() * pt.CommonCfg.MiddlePriorityThreadCoreCoefficient.GetAsInt()
if poolSize > 16 {
poolSize = 16
}
pool := conc.NewPool[any](
hardware.GetCPUNum()*paramtable.Get().CommonCfg.MiddlePriorityThreadCoreCoefficient.GetAsInt(),
poolSize,
conc.WithPreAlloc(false),
conc.WithDisablePurge(false),
conc.WithPreHandler(runtime.LockOSThread), // lock os thread for cgo thread disposal
Expand Down

0 comments on commit 52ac071

Please sign in to comment.