mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2025-02-19 15:30:17 +00:00
app/vmselect/netstorage: move MustAdviseSequentialRead to lib/fs
This commit is contained in:
parent
44f886cc9c
commit
6358cf3d47
6 changed files with 37 additions and 40 deletions
|
@ -1,9 +0,0 @@
|
||||||
package netstorage
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
)
|
|
||||||
|
|
||||||
func mustFadviseSequentialRead(f *os.File) {
|
|
||||||
// Do nothing :)
|
|
||||||
}
|
|
|
@ -1,15 +0,0 @@
|
||||||
package netstorage
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
|
|
||||||
"github.com/VictoriaMetrics/VictoriaMetrics/lib/logger"
|
|
||||||
"golang.org/x/sys/unix"
|
|
||||||
)
|
|
||||||
|
|
||||||
func mustFadviseSequentialRead(f *os.File) {
|
|
||||||
fd := int(f.Fd())
|
|
||||||
if err := unix.Fadvise(int(fd), 0, 0, unix.FADV_SEQUENTIAL|unix.FADV_WILLNEED); err != nil {
|
|
||||||
logger.Panicf("FATAL: error returned from unix.Fadvise(SEQUENTIAL|WILLNEED): %s", err)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,15 +0,0 @@
|
||||||
package netstorage
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
|
|
||||||
"github.com/VictoriaMetrics/VictoriaMetrics/lib/logger"
|
|
||||||
"golang.org/x/sys/unix"
|
|
||||||
)
|
|
||||||
|
|
||||||
func mustFadviseSequentialRead(f *os.File) {
|
|
||||||
fd := int(f.Fd())
|
|
||||||
if err := unix.Fadvise(int(fd), 0, 0, unix.FADV_SEQUENTIAL|unix.FADV_WILLNEED); err != nil {
|
|
||||||
logger.Panicf("FATAL: error returned from unix.Fadvise(SEQUENTIAL|WILLNEED): %s", err)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -128,7 +128,7 @@ func (tbf *tmpBlocksFile) Finalize() error {
|
||||||
// Hint the OS that the file is read almost sequentiallly.
|
// Hint the OS that the file is read almost sequentiallly.
|
||||||
// This should reduce the number of disk seeks, which is important
|
// This should reduce the number of disk seeks, which is important
|
||||||
// for HDDs.
|
// for HDDs.
|
||||||
mustFadviseSequentialRead(tbf.f)
|
fs.MustFadviseSequentialRead(tbf.f, true)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
12
lib/fs/fadvise_darwin.go
Normal file
12
lib/fs/fadvise_darwin.go
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
package fs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
// MustFadviseSequentialRead hints the OS that f is read mostly sequentially.
|
||||||
|
//
|
||||||
|
// if prefetch is set, then the OS is hinted to prefetch f data.
|
||||||
|
func MustFadviseSequentialRead(f *os.File, prefetch bool) {
|
||||||
|
// TODO: implement this properly
|
||||||
|
}
|
24
lib/fs/fadvise_unix.go
Normal file
24
lib/fs/fadvise_unix.go
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
// +buid linux freebsd
|
||||||
|
|
||||||
|
package fs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/logger"
|
||||||
|
"golang.org/x/sys/unix"
|
||||||
|
)
|
||||||
|
|
||||||
|
// MustFadviseSequentialRead hints the OS that f is read mostly sequentially.
|
||||||
|
//
|
||||||
|
// if prefetch is set, then the OS is hinted to prefetch f data.
|
||||||
|
func MustFadviseSequentialRead(f *os.File, prefetch bool) {
|
||||||
|
fd := int(f.Fd())
|
||||||
|
mode := unix.FADV_SEQUENTIAL
|
||||||
|
if prefetch {
|
||||||
|
mode |= unix.FADV_WILLNEED
|
||||||
|
}
|
||||||
|
if err := unix.Fadvise(int(fd), 0, 0, mode); err != nil {
|
||||||
|
logger.Panicf("FATAL: error returned from unix.Fadvise(%d): %s", mode, err)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue