milvus/internal/datanode/io_pool.go
smellthemoon 4b0ec156b3
Set channel work pool size in datanode (#27728)
Signed-off-by: lixinguo <xinguo.li@zilliz.com>
Co-authored-by: lixinguo <xinguo.li@zilliz.com>
2023-10-19 08:28:08 +08:00

60 lines
1.3 KiB
Go

package datanode
import (
"runtime"
"sync"
"github.com/milvus-io/milvus/pkg/util/conc"
)
var (
ioPool *conc.Pool[any]
ioPoolInitOnce sync.Once
)
var (
statsPool *conc.Pool[any]
statsPoolInitOnce sync.Once
)
func initIOPool() {
capacity := Params.DataNodeCfg.IOConcurrency.GetAsInt()
if capacity > 32 {
capacity = 32
}
// error only happens with negative expiry duration or with negative pre-alloc size.
ioPool = conc.NewPool[any](capacity)
}
func getOrCreateIOPool() *conc.Pool[any] {
ioPoolInitOnce.Do(initIOPool)
return ioPool
}
func initStatsPool() {
poolSize := Params.DataNodeCfg.ChannelWorkPoolSize.GetAsInt()
if poolSize <= 0 {
poolSize = runtime.GOMAXPROCS(0)
}
statsPool = conc.NewPool[any](poolSize, conc.WithPreAlloc(false), conc.WithNonBlocking(false))
}
func getOrCreateStatsPool() *conc.Pool[any] {
statsPoolInitOnce.Do(initStatsPool)
return statsPool
}
func initMultiReadPool() {
capacity := Params.DataNodeCfg.FileReadConcurrency.GetAsInt()
if capacity > runtime.GOMAXPROCS(0) {
capacity = runtime.GOMAXPROCS(0)
}
// error only happens with negative expiry duration or with negative pre-alloc size.
ioPool = conc.NewPool[any](capacity)
}
func getMultiReadPool() *conc.Pool[any] {
ioPoolInitOnce.Do(initMultiReadPool)
return ioPool
}