mirror of
https://github.com/minio/minio.git
synced 2025-11-07 21:02:58 -05:00
use fadvise to control Linux page-cache (#13312)
This PR brings two optimizations mainly for page-cache build-up and how to avoid getting OOM killed in the process. Although these memories are reclaimable Linux is not fast enough to reclaim them as needed on a very busy system. fadvise is a system call implemented in Linux to advise page-cache to avoid overload as we get significant amount of requests on the server. - FADV_SEQUENTIAL tells that all I/O from now is going to be sequential, allowing for more resposive throughput. - FADV_NOREUSE tells kernel to start removing things for this 'fd' from page-cache.
This commit is contained in:
@@ -23,6 +23,8 @@ package disk
|
||||
import (
|
||||
"os"
|
||||
"syscall"
|
||||
|
||||
"golang.org/x/sys/unix"
|
||||
)
|
||||
|
||||
// Fdatasync - fdatasync() is similar to fsync(), but does not flush modified metadata
|
||||
@@ -38,3 +40,15 @@ import (
|
||||
func Fdatasync(f *os.File) error {
|
||||
return syscall.Fdatasync(int(f.Fd()))
|
||||
}
|
||||
|
||||
// fdavise advice constants
|
||||
const (
|
||||
FadvSequential = unix.FADV_SEQUENTIAL
|
||||
FadvNoReuse = unix.FADV_NOREUSE
|
||||
)
|
||||
|
||||
// Fadvise implements possibility of choosing
|
||||
// offset: 0, length: 0
|
||||
func Fadvise(f *os.File, advice int) error {
|
||||
return unix.Fadvise(int(f.Fd()), 0, 0, advice)
|
||||
}
|
||||
|
||||
@@ -29,3 +29,15 @@ import (
|
||||
func Fdatasync(f *os.File) error {
|
||||
return syscall.Fsync(int(f.Fd()))
|
||||
}
|
||||
|
||||
// fdavise advice constants
|
||||
const (
|
||||
FadvSequential = 0
|
||||
FadvNoReuse = 0
|
||||
)
|
||||
|
||||
// Fadvise implements possibility of choosing
|
||||
// offset: 0, length: 0
|
||||
func Fadvise(f *os.File, advice int) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -28,3 +28,15 @@ import (
|
||||
func Fdatasync(f *os.File) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// fdavise advice constants
|
||||
const (
|
||||
FadvSequential = 0
|
||||
FadvNoReuse = 0
|
||||
)
|
||||
|
||||
// Fadvise implements possibility of choosing
|
||||
// offset: 0, length: 0
|
||||
func Fadvise(f *os.File, advice int) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user