Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
milvus
milvus
提交
4f3d5fb6
M
milvus
项目概览
milvus
/
milvus
11 个月 前同步成功
通知
260
Star
22476
Fork
2472
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
milvus
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
4f3d5fb6
编写于
3月 11, 2022
作者:
Y
yah01
提交者:
GitHub
3月 11, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Make load operation parallel improve performance (#15928)
Signed-off-by:
N
yah01
<
yang.cen@zilliz.com
>
上级
2256e94e
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
20 addition
and
7 deletion
+20
-7
internal/querynode/segment_loader.go
internal/querynode/segment_loader.go
+18
-6
internal/querynode/segment_loader_test.go
internal/querynode/segment_loader_test.go
+2
-1
未找到文件。
internal/querynode/segment_loader.go
浏览文件 @
4f3d5fb6
...
...
@@ -21,6 +21,7 @@ import (
"errors"
"fmt"
"path"
"runtime"
"strconv"
"sync"
"time"
...
...
@@ -89,7 +90,7 @@ func (loader *segmentLoader) loadSegment(req *querypb.LoadSegmentsRequest, segme
zap
.
Any
(
"loadType"
,
segmentType
),
)
// check memory limit
err
:=
loader
.
checkSegmentSize
(
req
.
CollectionID
,
req
.
Infos
)
err
:=
loader
.
checkSegmentSize
(
req
.
CollectionID
,
req
.
Infos
,
runtime
.
GOMAXPROCS
(
0
)
)
if
err
!=
nil
{
log
.
Error
(
"load failed, OOM if loaded"
,
zap
.
Int64
(
"loadSegmentRequest msgID"
,
req
.
Base
.
MsgID
),
zap
.
Error
(
err
))
return
err
...
...
@@ -127,8 +128,8 @@ func (loader *segmentLoader) loadSegment(req *querypb.LoadSegmentsRequest, segme
newSegments
[
segmentID
]
=
segment
}
// start to load
for
_
,
loadInfo
:=
range
req
.
Infos
{
loadSegmentFunc
:=
func
(
idx
int
)
error
{
loadInfo
:=
req
.
Infos
[
idx
]
collectionID
:=
loadInfo
.
CollectionID
partitionID
:=
loadInfo
.
PartitionID
segmentID
:=
loadInfo
.
SegmentID
...
...
@@ -142,10 +143,18 @@ func (loader *segmentLoader) loadSegment(req *querypb.LoadSegmentsRequest, segme
zap
.
Int64
(
"segmentID"
,
segmentID
),
zap
.
Int32
(
"segment type"
,
int32
(
segmentType
)),
zap
.
Error
(
err
))
segmentGC
()
return
err
}
metrics
.
QueryNodeLoadSegmentLatency
.
WithLabelValues
(
fmt
.
Sprint
(
Params
.
QueryNodeCfg
.
QueryNodeID
))
.
Observe
(
float64
(
tr
.
ElapseSpan
()
.
Milliseconds
()))
return
nil
}
// start to load
err
=
funcutil
.
ProcessFuncParallel
(
len
(
req
.
Infos
),
runtime
.
GOMAXPROCS
(
0
),
loadSegmentFunc
,
"loadSegmentFunc"
)
if
err
!=
nil
{
segmentGC
()
return
err
}
// set segment to meta replica
...
...
@@ -604,9 +613,12 @@ func JoinIDPath(ids ...UniqueID) string {
return
path
.
Join
(
idStr
...
)
}
func
(
loader
*
segmentLoader
)
checkSegmentSize
(
collectionID
UniqueID
,
segmentLoadInfos
[]
*
querypb
.
SegmentLoadInfo
)
error
{
func
(
loader
*
segmentLoader
)
checkSegmentSize
(
collectionID
UniqueID
,
segmentLoadInfos
[]
*
querypb
.
SegmentLoadInfo
,
concurrency
int
)
error
{
usedMem
:=
metricsinfo
.
GetUsedMemoryCount
()
totalMem
:=
metricsinfo
.
GetMemoryCount
()
if
len
(
segmentLoadInfos
)
<
concurrency
{
concurrency
=
len
(
segmentLoadInfos
)
}
if
usedMem
==
0
||
totalMem
==
0
{
return
fmt
.
Errorf
(
"get memory failed when checkSegmentSize, collectionID = %d"
,
collectionID
)
...
...
@@ -623,7 +635,7 @@ func (loader *segmentLoader) checkSegmentSize(collectionID UniqueID, segmentLoad
}
// when load segment, data will be copied from go memory to c++ memory
if
uint64
(
usedMemAfterLoad
+
maxSegmentSize
)
>
uint64
(
float64
(
totalMem
)
*
Params
.
QueryNodeCfg
.
OverloadedMemoryThresholdPercentage
)
{
if
uint64
(
usedMemAfterLoad
+
maxSegmentSize
*
int64
(
concurrency
)
)
>
uint64
(
float64
(
totalMem
)
*
Params
.
QueryNodeCfg
.
OverloadedMemoryThresholdPercentage
)
{
return
fmt
.
Errorf
(
"load segment failed, OOM if load, collectionID = %d, maxSegmentSize = %d, usedMemAfterLoad = %d, totalMem = %d, thresholdFactor = %f"
,
collectionID
,
maxSegmentSize
,
usedMemAfterLoad
,
totalMem
,
Params
.
QueryNodeCfg
.
OverloadedMemoryThresholdPercentage
)
}
...
...
internal/querynode/segment_loader_test.go
浏览文件 @
4f3d5fb6
...
...
@@ -19,6 +19,7 @@ package querynode
import
(
"context"
"math/rand"
"runtime"
"testing"
"github.com/stretchr/testify/assert"
...
...
@@ -315,7 +316,7 @@ func TestSegmentLoader_checkSegmentSize(t *testing.T) {
loader
:=
node
.
loader
assert
.
NotNil
(
t
,
loader
)
err
=
loader
.
checkSegmentSize
(
defaultSegmentID
,
[]
*
querypb
.
SegmentLoadInfo
{{
SegmentID
:
defaultSegmentID
,
SegmentSize
:
1024
}})
err
=
loader
.
checkSegmentSize
(
defaultSegmentID
,
[]
*
querypb
.
SegmentLoadInfo
{{
SegmentID
:
defaultSegmentID
,
SegmentSize
:
1024
}}
,
runtime
.
GOMAXPROCS
(
0
)
)
assert
.
NoError
(
t
,
err
)
//totalMem, err := getTotalMemory()
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录