Skip to content

Commit

Permalink
fix(blobnode): fix blobnode hot change background mbps limit, it shou…
Browse files Browse the repository at this point in the history
…ld less normal mbps

. #22759812

Signed-off-by: mawei029 <[email protected]>
  • Loading branch information
mawei029 authored and sejust committed Nov 12, 2024
1 parent 7653daa commit 4224c19
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 7 deletions.
15 changes: 12 additions & 3 deletions blobstore/blobnode/base/qos/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,17 @@ func InitAndFixQosConfig(raw *Config) {
defaulter.LessOrEqual(&raw.ReadDiscard, int32(defaultDiscardPercent))
defaulter.LessOrEqual(&raw.WriteDiscard, int32(defaultDiscardPercent))

// fix background
if raw.BackgroundMBPS > raw.WriteMBPS {
raw.BackgroundMBPS = raw.WriteMBPS
// fix background, it should be the minimum
raw.BackgroundMBPS = fixBackgroundMBPS(raw.BackgroundMBPS, raw.WriteMBPS, raw.ReadMBPS)
}

func fixBackgroundMBPS(background, writeMBPS, readMBPS int64) int64 {
return min(background, min(writeMBPS, readMBPS))
}

func min(a, b int64) int64 {
if a < b {
return a
}
return b
}
1 change: 1 addition & 0 deletions blobstore/blobnode/base/qos/qos.go
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,7 @@ func (qos *IoQueueQos) Close() {
func (qos *IoQueueQos) ResetQosLimit(conf Config) {
qos.resetConfLimiter(qos.bpsLimiters[LimitTypeRead], conf.ReadMBPS, &qos.conf.ReadMBPS)
qos.resetConfLimiter(qos.bpsLimiters[LimitTypeWrite], conf.WriteMBPS, &qos.conf.WriteMBPS)
conf.BackgroundMBPS = fixBackgroundMBPS(conf.BackgroundMBPS, qos.conf.WriteMBPS, qos.conf.ReadMBPS)
qos.resetConfLimiter(qos.bpsLimiters[LimitTypeBack], conf.BackgroundMBPS, &qos.conf.BackgroundMBPS)
qos.resetReadDiscard(conf.ReadDiscard, &qos.conf.ReadDiscard)
qos.resetWriteDiscard(conf.WriteDiscard, &qos.conf.WriteDiscard)
Expand Down
15 changes: 15 additions & 0 deletions blobstore/blobnode/base/qos/qos_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,21 @@ func TestNewQosManager(t *testing.T) {
require.Equal(t, int64(defaultReadBandwidthMBPS*humanize.MiByte), int64(lmts[LimitTypeRead].Limit()))
}

{
// reset background
conf = Config{
ReadMBPS: 0,
WriteMBPS: 0,
BackgroundMBPS: 300,
ReadDiscard: 0,
WriteDiscard: 0,
}
qos.ResetQosLimit(conf)
lmts := qos.(*IoQueueQos).bpsLimiters
require.Equal(t, int64(defaultWriteBandwidthMBPS*humanize.MiByte), int64(lmts[LimitTypeBack].Limit()))

}

{
// reset discard
conf.ReadDiscard = 70
Expand Down
9 changes: 5 additions & 4 deletions blobstore/blobnode/svr_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -898,10 +898,10 @@ func TestService_ConfigReload(t *testing.T) {
lmt := q1.(*qos.IoQueueQos).GetBpsLimiter()
require.NotEqual(t, 0, lmt[0].Burst())
require.Equal(t, 4*1024*1024*2, lmt[qos.LimitTypeWrite].Burst())
require.Equal(t, 10*1024*1024*2, lmt[qos.LimitTypeBack].Burst())
require.Equal(t, 4*1024*1024*2, lmt[qos.LimitTypeBack].Burst())
require.Equal(t, 4*1024*1024, int(q2.(*qos.IoQueueQos).GetBpsLimiter()[qos.LimitTypeRead].Limit()))
require.Equal(t, 4*1024*1024, int(q2.(*qos.IoQueueQos).GetBpsLimiter()[qos.LimitTypeWrite].Limit()))
require.Equal(t, 10*1024*1024, int(q2.(*qos.IoQueueQos).GetBpsLimiter()[qos.LimitTypeBack].Limit()))
require.Equal(t, 4*1024*1024, int(q2.(*qos.IoQueueQos).GetBpsLimiter()[qos.LimitTypeBack].Limit()))
}

{
Expand All @@ -919,13 +919,14 @@ func TestService_ConfigReload(t *testing.T) {
lmt1 := q1.(*qos.IoQueueQos).GetBpsLimiter()
lmt2 := q2.(*qos.IoQueueQos).GetBpsLimiter()
require.Equal(t, int(svr.Conf.DiskConfig.DataQos.WriteMBPS*1024*1024), lmt1[qos.LimitTypeWrite].Burst()/2)
require.Equal(t, int(10*1024*1024), lmt1[qos.LimitTypeBack].Burst()/2)
require.Equal(t, int(2*1024*1024), lmt1[qos.LimitTypeBack].Burst()/2)
require.Equal(t, int(svr.Conf.DiskConfig.DataQos.WriteMBPS*1024*1024), lmt2[qos.LimitTypeWrite].Burst()/2)
require.Equal(t, int(10*1024*1024), lmt2[qos.LimitTypeBack].Burst()/2)
require.Equal(t, int(2*1024*1024), lmt2[qos.LimitTypeBack].Burst()/2)
}

{
// write_mbps
svr.Conf.DiskConfig.DataQos.ReadMBPS = 10
ds1.EXPECT().GetIoQos().Return(q1).Times(1)
ds2.EXPECT().GetIoQos().Return(q2).Times(1)
totalUrl := testServer.URL + "/config/reload?key=write_mbps&value=20"
Expand Down

0 comments on commit 4224c19

Please sign in to comment.