Files
EdgeNode/internal/utils/bfs/fs_options.go

49 lines
1.1 KiB
Go
Raw Permalink Normal View History

2024-07-27 15:42:50 +08:00
// Copyright 2024 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cloud .
package bfs
2024-04-27 20:11:50 +08:00
import (
2024-07-27 15:42:50 +08:00
"time"
2024-04-27 20:11:50 +08:00
fsutils "github.com/TeaOSLab/EdgeNode/internal/utils/fs"
memutils "github.com/TeaOSLab/EdgeNode/internal/utils/mem"
)
type FSOptions struct {
2024-04-27 17:29:12 +08:00
MaxOpenFiles int
BytesPerSync int64
SyncTimeout time.Duration
MaxSyncFiles int
}
func (this *FSOptions) EnsureDefaults() {
if this.MaxOpenFiles <= 0 {
2024-04-27 20:11:50 +08:00
// 根据内存计算最大打开文件数
2024-04-30 12:38:43 +08:00
var maxOpenFiles = memutils.SystemMemoryGB() * 128
if maxOpenFiles > (8 << 10) {
maxOpenFiles = 8 << 10
2024-04-27 20:11:50 +08:00
}
this.MaxOpenFiles = maxOpenFiles
}
if this.BytesPerSync <= 0 {
2024-04-27 20:11:50 +08:00
if fsutils.DiskIsFast() {
this.BytesPerSync = 1 << 20 // TODO 根据硬盘实际写入速度进行调整
} else {
this.BytesPerSync = 512 << 10
}
}
if this.SyncTimeout <= 0 {
this.SyncTimeout = 1 * time.Second
}
if this.MaxSyncFiles <= 0 {
this.MaxSyncFiles = 32
}
}
var DefaultFSOptions = &FSOptions{
2024-04-27 20:11:50 +08:00
MaxOpenFiles: 1 << 10,
BytesPerSync: 512 << 10,
SyncTimeout: 1 * time.Second,
MaxSyncFiles: 32,
}