fix: get rid of large buffers (#19549)

these lead to run-away usage of memory
beyond which the Go's GC can handle, we
have to re-visit this differently, remove
this for now.
This commit is contained in:
Harshavardhana 2024-04-19 04:26:59 -07:00 committed by GitHub
parent 108e6f92d4
commit 03767d26da
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 2 additions and 24 deletions

View File

@ -2124,14 +2124,6 @@ func (s *xlStorage) writeAllDirect(ctx context.Context, filePath string, fileSiz
var bufp *[]byte
switch {
case fileSize > 0 && fileSize >= xioutil.XXLargeBlock*2:
// use a larger 8MiB buffer for a really really large streamsx.
bufp = xioutil.ODirectPoolXXLarge.Get().(*[]byte)
defer xioutil.ODirectPoolXXLarge.Put(bufp)
case fileSize > 0 && fileSize >= xioutil.XLargeBlock:
// use a larger 4MiB buffer for a really large streams.
bufp = xioutil.ODirectPoolXLarge.Get().(*[]byte)
defer xioutil.ODirectPoolXLarge.Put(bufp)
case fileSize <= xioutil.SmallBlock:
bufp = xioutil.ODirectPoolSmall.Get().(*[]byte)
defer xioutil.ODirectPoolSmall.Put(bufp)

View File

@ -34,26 +34,12 @@ import (
// Block sizes constant.
const (
SmallBlock = 32 * humanize.KiByte // Default r/w block size for smaller objects.
LargeBlock = 1 * humanize.MiByte // Default r/w block size for normal objects.
XLargeBlock = 4 * humanize.MiByte // Default r/w block size for very large objects.
XXLargeBlock = 8 * humanize.MiByte // Default r/w block size for very very large objects.
SmallBlock = 32 * humanize.KiByte // Default r/w block size for smaller objects.
LargeBlock = 1 * humanize.MiByte // Default r/w block size for normal objects.
)
// aligned sync.Pool's
var (
ODirectPoolXXLarge = sync.Pool{
New: func() interface{} {
b := disk.AlignedBlock(XXLargeBlock)
return &b
},
}
ODirectPoolXLarge = sync.Pool{
New: func() interface{} {
b := disk.AlignedBlock(XLargeBlock)
return &b
},
}
ODirectPoolLarge = sync.Pool{
New: func() interface{} {
b := disk.AlignedBlock(LargeBlock)