diff --git a/client/fs/super.go b/client/fs/super.go index 2cb30786c..e3e537198 100644 --- a/client/fs/super.go +++ b/client/fs/super.go @@ -230,7 +230,6 @@ func NewSuper(opt *proto.MountOptions) (s *Super, err error) { ReadRate: opt.ReadRate, WriteRate: opt.WriteRate, BcacheEnable: opt.EnableBcache, - BcacheOnlyForCold: opt.BcacheOnlyForCold, BcacheDir: opt.BcacheDir, MaxStreamerLimit: opt.MaxStreamerLimit, VerReadSeq: opt.VerReadSeq, @@ -252,7 +251,8 @@ func NewSuper(opt *proto.MountOptions) (s *Super, err error) { VolCacheDpStorageClass: s.cacheDpStorageClass, OnForbiddenMigration: s.mw.ForbiddenMigration, - OnGetInodeInfo: s.InodeGet, + OnGetInodeInfo: s.InodeGet, + BcacheOnlyForNotSSD: opt.BcacheOnlyForNotSSD, } s.ec, err = stream.NewExtentClient(extentConfig) diff --git a/client/fuse.go b/client/fuse.go index 13a4c8d65..d2e22559d 100644 --- a/client/fuse.go +++ b/client/fuse.go @@ -532,7 +532,7 @@ func main() { defer super.Close() syslog.Printf("enable bcache %v", opt.EnableBcache) - syslog.Printf("bcache only for cold %v", opt.BcacheOnlyForCold) + syslog.Printf("bcache only for not ssd %v", opt.BcacheOnlyForNotSSD) if cfg.GetString(exporter.ConfigKeyPushAddr) == "" { pushAddr, err := getPushAddrFromMaster(opt.Master) @@ -946,7 +946,7 @@ func parseMountOption(cfg *config.Config) (*proto.MountOptions, error) { opt.EnableBcache = true } - opt.BcacheOnlyForCold = GlobalMountOptions[proto.BcacheOnlyForCold].GetBool() + opt.BcacheOnlyForNotSSD = GlobalMountOptions[proto.BcacheOnlyForNotSSD].GetBool() if opt.Rdonly { verReadSeq := GlobalMountOptions[proto.SnapshotReadVerSeq].GetInt64() diff --git a/proto/mount_options.go b/proto/mount_options.go index dade726c4..488761c1d 100644 --- a/proto/mount_options.go +++ b/proto/mount_options.go @@ -78,7 +78,7 @@ const ( DisableMountSubtype StreamRetryTimeOut BufferChanSize - BcacheOnlyForCold + BcacheOnlyForNotSSD MaxMountOption ) @@ -175,7 +175,7 @@ func InitMountOptions(opts []MountOption) { opts[SnapshotReadVerSeq] = MountOption{"snapshotReadSeq", "Snapshot read seq", "", int64(0)} // default false opts[DisableMountSubtype] = MountOption{"disableMountSubtype", "Disable Mount Subtype", "", false} opts[StreamRetryTimeOut] = MountOption{"streamRetryTimeout", "max stream retry timeout, s", "", int64(0)} - opts[BcacheOnlyForCold] = MountOption{"enableBcacheOnlyForCold", "Enable block cache only for cold data", "", false} + opts[BcacheOnlyForNotSSD] = MountOption{"enableBcacheOnlyForNotSSD", "Enable block cache only for not ssd", "", false} for i := 0; i < MaxMountOption; i++ { flag.StringVar(&opts[i].cmdlineValue, opts[i].keyword, "", opts[i].description) @@ -318,7 +318,7 @@ type MountOptions struct { CacheThreshold int EbsBlockSize int EnableBcache bool - BcacheOnlyForCold bool + BcacheOnlyForNotSSD bool BcacheDir string BcacheFilterFiles string BcacheCheckIntervalS int64 diff --git a/sdk/data/stream/extent_client.go b/sdk/data/stream/extent_client.go index fd1b5aaf5..c128678e6 100644 --- a/sdk/data/stream/extent_client.go +++ b/sdk/data/stream/extent_client.go @@ -129,7 +129,6 @@ type ExtentConfig struct { ReadRate int64 WriteRate int64 BcacheEnable bool - BcacheOnlyForCold bool BcacheDir string MaxStreamerLimit int64 VerReadSeq uint64 @@ -153,7 +152,8 @@ type ExtentConfig struct { VolAllowedStorageClass []uint32 VolCacheDpStorageClass uint32 - OnGetInodeInfo GetInodeInfoFunc + OnGetInodeInfo GetInodeInfoFunc + BcacheOnlyForNotSSD bool } type MultiVerMgr struct { @@ -176,7 +176,6 @@ type ExtentClient struct { volumeType int volumeName string bcacheEnable bool - bcacheOnlyForCold bool bcacheDir string BcacheHealth bool preload bool @@ -198,6 +197,7 @@ type ExtentClient struct { forbiddenMigration ForbiddenMigrationFunc CacheDpStorageClass uint32 getInodeInfo GetInodeInfoFunc + bcacheOnlyForNotSSD bool } func (client *ExtentClient) UidIsLimited(uid uint32) bool { @@ -315,7 +315,7 @@ retry: client.evictBcache = config.OnEvictBcache client.volumeName = config.Volume client.bcacheEnable = config.BcacheEnable - client.bcacheOnlyForCold = config.BcacheOnlyForCold + client.bcacheOnlyForNotSSD = config.BcacheOnlyForNotSSD client.bcacheDir = config.BcacheDir client.multiVerMgr.verReadSeq = client.dataWrapper.GetReadVerSeq() client.BcacheHealth = true diff --git a/sdk/data/stream/stream_reader.go b/sdk/data/stream/stream_reader.go index d0d3f5143..cc7ca80b5 100644 --- a/sdk/data/stream/stream_reader.go +++ b/sdk/data/stream/stream_reader.go @@ -205,8 +205,8 @@ func (s *Streamer) read(data []byte, offset int, size int, storageClass uint32) } // skip hole,ek is not nil,read block cache firstly - log.LogDebugf("Stream read: ino(%v) req(%v) s.client.bcacheEnable(%v) s.client.bcacheOnlyForCold(%v) s.needBCache(%v)", - s.inode, req, s.client.bcacheEnable, s.client.bcacheOnlyForCold, s.needBCache) + log.LogDebugf("Stream read: ino(%v) req(%v) s.client.bcacheEnable(%v) s.client.bcacheOnlyForNotSSD(%v) s.needBCache(%v)", + s.inode, req, s.client.bcacheEnable, s.client.bcacheOnlyForNotSSD, s.needBCache) cacheKey := util.GenerateRepVolKey(s.client.volumeName, s.inode, req.ExtentKey.PartitionId, req.ExtentKey.ExtentId, req.ExtentKey.FileOffset) if s.client.bcacheEnable && s.needBCache && filesize <= bcache.MaxFileSize { inodeInfo, err := s.client.getInodeInfo(s.inode) @@ -214,7 +214,9 @@ func (s *Streamer) read(data []byte, offset int, size int, storageClass uint32) log.LogErrorf("Streamer read: getInodeInfo failed. ino(%v) req(%v) err(%v)", s.inode, req, err) return 0, err } - if !s.client.bcacheOnlyForCold || (s.client.bcacheOnlyForCold && inodeInfo.StorageClass != proto.StorageClass_Replica_SSD) { + if !s.client.bcacheOnlyForNotSSD || (s.client.bcacheOnlyForNotSSD && inodeInfo.StorageClass != proto.StorageClass_Replica_SSD) { + log.LogDebugf("Streamer read from bcache, ino(%v) storageClass(%v) s.client.bcacheEnable(%v) bcacheOnlyForNotSSD(%v)", + s.inode, proto.StorageClassString(inodeInfo.StorageClass), s.client.bcacheEnable, s.client.bcacheOnlyForNotSSD) offset := req.FileOffset - int(req.ExtentKey.FileOffset) if s.client.loadBcache != nil { readBytes, err = s.client.loadBcache(cacheKey, req.Data, uint64(offset), uint32(req.Size)) @@ -228,6 +230,9 @@ func (s *Streamer) read(data []byte, offset int, size int, storageClass uint32) } } log.LogDebugf("TRACE Stream read. miss blockCache cacheKey(%v) loadBcache(%v)", cacheKey, s.client.loadBcache) + } else { + log.LogDebugf("Streamer not read from bcache, ino(%v) storageClass(%v) s.client.bcacheEnable(%v) bcacheOnlyForNotSSD(%v)", + s.inode, proto.StorageClassString(inodeInfo.StorageClass), s.client.bcacheEnable, s.client.bcacheOnlyForNotSSD) } } @@ -252,7 +257,7 @@ func (s *Streamer) read(data []byte, offset int, size int, storageClass uint32) // limit big block cache if s.exceedBlockSize(req.ExtentKey.Size) && atomic.LoadInt32(&s.client.inflightL1BigBlock) > 10 { // do nothing - } else if !s.client.bcacheOnlyForCold || (s.client.bcacheOnlyForCold && inodeInfo.StorageClass != proto.StorageClass_Replica_SSD) { + } else if !s.client.bcacheOnlyForNotSSD || (s.client.bcacheOnlyForNotSSD && inodeInfo.StorageClass != proto.StorageClass_Replica_SSD) { select { case s.pendingCache <- bcacheKey{cacheKey: cacheKey, extentKey: req.ExtentKey, storageClass: storageClass}: if s.exceedBlockSize(req.ExtentKey.Size) {