From 63a71e247aaa4ce5cabbf653c58d1645b2b55925 Mon Sep 17 00:00:00 2001 From: yah01 Date: Thu, 24 Mar 2022 13:39:25 +0800 Subject: [PATCH] Loading segments concurrency level fallbacks to the value that won't cause OOM (#16172) Signed-off-by: yah01 --- internal/querynode/segment_loader.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/internal/querynode/segment_loader.go b/internal/querynode/segment_loader.go index cd2eee8211..7094b093f0 100644 --- a/internal/querynode/segment_loader.go +++ b/internal/querynode/segment_loader.go @@ -87,7 +87,15 @@ func (loader *segmentLoader) loadSegment(req *querypb.LoadSegmentsRequest, segme zap.Any("loadType", segmentType), ) // check memory limit - err := loader.checkSegmentSize(req.CollectionID, req.Infos, runtime.GOMAXPROCS(0)) + concurrencyLevel := runtime.GOMAXPROCS(0) + for ; concurrencyLevel > 1; concurrencyLevel /= 2 { + err := loader.checkSegmentSize(req.CollectionID, req.Infos, concurrencyLevel) + if err == nil { + break + } + } + + err := loader.checkSegmentSize(req.CollectionID, req.Infos, concurrencyLevel) if err != nil { log.Error("load failed, OOM if loaded", zap.Int64("loadSegmentRequest msgID", req.Base.MsgID), zap.Error(err)) return err @@ -148,7 +156,7 @@ func (loader *segmentLoader) loadSegment(req *querypb.LoadSegmentsRequest, segme return nil } // start to load - err = funcutil.ProcessFuncParallel(len(req.Infos), runtime.GOMAXPROCS(0), loadSegmentFunc, "loadSegmentFunc") + err = funcutil.ProcessFuncParallel(len(req.Infos), concurrencyLevel, loadSegmentFunc, "loadSegmentFunc") if err != nil { segmentGC() return err