优化磁盘速度检查

This commit is contained in:
GoEdgeLab
2023-08-02 11:34:14 +08:00
parent be80256aab
commit 74e64e8717
4 changed files with 60 additions and 14 deletions

View File

@@ -485,7 +485,7 @@ func (this *MemoryStorage) startFlush() {
statCount = 0 statCount = 0
// delay some time to reduce load if needed // delay some time to reduce load if needed
if !fsutils.DiskIsFast { if !fsutils.DiskIsFast() {
loadStat, err := load.Avg() loadStat, err := load.Avg()
if err == nil && loadStat != nil { if err == nil && loadStat != nil {
if loadStat.Load1 > 10 { if loadStat.Load1 > 10 {

View File

@@ -64,11 +64,21 @@ func CheckDiskIsFast() (speedMB float64, isFast bool, err error) {
if err != nil { if err != nil {
return return
} }
isFast = speedMB > 120 isFast = speedMB > 150
if speedMB > 1000 {
DiskSpeed = SpeedExtremelyFast
} else if speedMB > 150 {
DiskSpeed = SpeedFast
} else if speedMB > 60 {
DiskSpeed = SpeedLow
} else {
DiskSpeed = SpeedExtremelySlow
}
calculateDiskMaxWrites()
if speedMB > DiskSpeedMB { if speedMB > DiskSpeedMB {
DiskSpeedMB = speedMB DiskSpeedMB = speedMB
DiskIsFast = isFast
} }
return return

View File

@@ -8,9 +8,33 @@ import (
"time" "time"
) )
type Speed int
func (this Speed) String() string {
switch this {
case SpeedExtremelyFast:
return "extremely fast"
case SpeedFast:
return "fast"
case SpeedLow:
return "low"
case SpeedExtremelySlow:
return "extremely slow"
}
return "unknown"
}
const (
SpeedExtremelyFast Speed = 1
SpeedFast Speed = 2
SpeedLow Speed = 3
SpeedExtremelySlow Speed = 4
)
var ( var (
DiskIsFast bool DiskSpeed = SpeedLow
DiskSpeedMB float64 DiskMaxWrites int32 = 32
DiskSpeedMB float64
) )
func init() { func init() {
@@ -38,17 +62,14 @@ func init() {
}() }()
} }
func DiskIsFast() bool {
return DiskSpeed == SpeedExtremelyFast || DiskSpeed == SpeedFast
}
var countWrites int32 = 0 var countWrites int32 = 0
const MaxWrites = 32
const MaxFastWrites = 128
func WriteReady() bool { func WriteReady() bool {
var count = atomic.LoadInt32(&countWrites) return atomic.LoadInt32(&countWrites) < DiskMaxWrites
if DiskIsFast {
return count < MaxFastWrites
}
return count <= MaxWrites
} }
func WriteBegin() { func WriteBegin() {
@@ -58,3 +79,18 @@ func WriteBegin() {
func WriteEnd() { func WriteEnd() {
atomic.AddInt32(&countWrites, -1) atomic.AddInt32(&countWrites, -1)
} }
func calculateDiskMaxWrites() {
switch DiskSpeed {
case SpeedExtremelyFast:
DiskMaxWrites = 256
case SpeedFast:
DiskMaxWrites = 128
case SpeedLow:
DiskMaxWrites = 32
case SpeedExtremelySlow:
DiskMaxWrites = 16
default:
DiskMaxWrites = 16
}
}

View File

@@ -11,7 +11,7 @@ import (
func TestWrites(t *testing.T) { func TestWrites(t *testing.T) {
var a = assert.NewAssertion(t) var a = assert.NewAssertion(t)
for i := 0; i < fsutils.MaxWrites+1; i++ { for i := 0; i < int(fsutils.DiskMaxWrites); i++ {
fsutils.WriteBegin() fsutils.WriteBegin()
} }
a.IsFalse(fsutils.WriteReady()) a.IsFalse(fsutils.WriteReady())