Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
milvus
milvus
提交
9b91519c
M
milvus
项目概览
milvus
/
milvus
大约 1 年 前同步成功
通知
261
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,发现更多精彩内容 >>
未验证
提交
9b91519c
编写于
6月 27, 2023
作者:
W
wei liu
提交者:
GitHub
6月 27, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix search cost metrics on replica selection (#25059)
Signed-off-by:
N
Wei Liu
<
wei.liu@zilliz.com
>
上级
b3362c29
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
30 addition
and
11 deletion
+30
-11
internal/proxy/look_aside_balancer.go
internal/proxy/look_aside_balancer.go
+16
-8
internal/proxy/look_aside_balancer_test.go
internal/proxy/look_aside_balancer_test.go
+13
-1
internal/querynodev2/services.go
internal/querynodev2/services.go
+1
-1
internal/querynodev2/tasks/scheduler.go
internal/querynodev2/tasks/scheduler.go
+0
-1
未找到文件。
internal/proxy/look_aside_balancer.go
浏览文件 @
9b91519c
...
...
@@ -110,12 +110,14 @@ func (b *LookAsideBalancer) SelectNode(ctx context.Context, availableNodes []int
}
}
if
targetNode
!=
-
1
{
// update executing task cost
totalNQ
,
_
:=
b
.
executingTaskTotalNQ
.
Get
(
targetNode
)
totalNQ
.
Add
(
cost
)
if
targetNode
==
-
1
{
return
-
1
,
merr
.
WrapErrNoAvailableNode
(
"all available nodes are unreachable"
)
}
// update executing task cost
totalNQ
,
_
:=
b
.
executingTaskTotalNQ
.
Get
(
targetNode
)
totalNQ
.
Add
(
cost
)
return
targetNode
,
nil
}
...
...
@@ -137,14 +139,20 @@ func (b *LookAsideBalancer) UpdateCostMetrics(node int64, cost *internalpb.CostA
// calculateScore compute the query node's workload score
// https://www.usenix.org/conference/nsdi15/technical-sessions/presentation/suresh
func
(
b
*
LookAsideBalancer
)
calculateScore
(
cost
*
internalpb
.
CostAggregation
,
executingNQ
int64
)
float64
{
if
cost
==
nil
||
cost
.
ResponseTime
==
0
{
return
float64
(
executingNQ
)
if
cost
==
nil
||
cost
.
ResponseTime
==
0
||
cost
.
ServiceTime
==
0
{
return
math
.
Pow
(
float64
(
1
+
executingNQ
),
3.0
)
}
executeSpeed
:=
float64
(
cost
.
ResponseTime
)
-
float64
(
1
)
/
float64
(
cost
.
ServiceTime
)
workload
:=
math
.
Pow
(
float64
(
1
+
cost
.
TotalNQ
+
executingNQ
),
3.0
)
/
float64
(
cost
.
ServiceTime
)
if
workload
<
0.0
{
return
math
.
MaxFloat64
}
return
float64
(
cost
.
ResponseTime
)
-
float64
(
1
)
/
float64
(
cost
.
ServiceTime
)
+
math
.
Pow
(
float64
(
1
+
cost
.
TotalNQ
+
executingNQ
),
3.0
)
/
float64
(
cost
.
ServiceTime
)
return
executeSpeed
+
workload
}
func
(
b
*
LookAsideBalancer
)
checkQueryNodeHealthLoop
(
ctx
context
.
Context
)
{
log
:=
log
.
Ctx
(
c
ontext
.
TODO
()
)
.
WithRateGroup
(
"proxy.LookAsideBalancer"
,
60
,
1
)
log
:=
log
.
Ctx
(
c
tx
)
.
WithRateGroup
(
"proxy.LookAsideBalancer"
,
60
,
1
)
defer
b
.
wg
.
Done
()
ticker
:=
time
.
NewTicker
(
checkQueryNodeHealthInterval
)
...
...
internal/proxy/look_aside_balancer_test.go
浏览文件 @
9b91519c
...
...
@@ -18,6 +18,7 @@ package proxy
import
(
"context"
"math"
"testing"
"time"
...
...
@@ -26,6 +27,7 @@ import (
"github.com/milvus-io/milvus-proto/go-api/v2/milvuspb"
"github.com/milvus-io/milvus/internal/proto/internalpb"
"github.com/milvus-io/milvus/internal/types"
"github.com/milvus-io/milvus/pkg/util/merr"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/suite"
"go.uber.org/atomic"
...
...
@@ -108,6 +110,16 @@ func (suite *LookAsideBalancerSuite) TestCalculateScore() {
suite
.
Equal
(
float64
(
176
),
score6
)
suite
.
Equal
(
float64
(
352
),
score7
)
suite
.
Equal
(
float64
(
220
),
score8
)
// test score overflow
costMetrics5
:=
&
internalpb
.
CostAggregation
{
ResponseTime
:
5
,
ServiceTime
:
1
,
TotalNQ
:
math
.
MaxInt64
,
}
score9
:=
suite
.
balancer
.
calculateScore
(
costMetrics5
,
math
.
MaxInt64
)
suite
.
Equal
(
math
.
MaxFloat64
,
score9
)
}
func
(
suite
*
LookAsideBalancerSuite
)
TestSelectNode
()
{
...
...
@@ -283,7 +295,7 @@ func (suite *LookAsideBalancerSuite) TestCheckHealthLoop() {
return
suite
.
balancer
.
unreachableQueryNodes
.
Contain
(
1
)
},
2
*
time
.
Second
,
100
*
time
.
Millisecond
)
targetNode
,
err
:=
suite
.
balancer
.
SelectNode
(
context
.
Background
(),
[]
int64
{
1
},
1
)
suite
.
NoError
(
err
)
suite
.
ErrorIs
(
err
,
merr
.
ErrNoAvailableNode
)
suite
.
Equal
(
int64
(
-
1
),
targetNode
)
suite
.
Eventually
(
func
()
bool
{
...
...
internal/querynodev2/services.go
浏览文件 @
9b91519c
...
...
@@ -746,7 +746,7 @@ func (node *QueryNode) SearchSegments(ctx context.Context, req *querypb.SearchRe
result
:=
task
.
Result
()
if
result
.
CostAggregation
!=
nil
{
// update channel's response time
result
.
CostAggregation
.
ResponseTime
=
int64
(
latency
)
result
.
CostAggregation
.
ResponseTime
=
latency
.
Milliseconds
(
)
}
return
result
,
nil
}
...
...
internal/querynodev2/tasks/scheduler.go
浏览文件 @
9b91519c
...
...
@@ -179,7 +179,6 @@ func (s *Scheduler) mergeTasks(t Task) {
merged
:=
false
for
_
,
task
:=
range
s
.
mergingSearchTasks
{
if
task
.
Merge
(
t
)
{
s
.
waitingTaskTotalNQ
.
Sub
(
t
.
nq
)
merged
=
true
break
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录