mirror of
https://github.com/minio/minio.git
synced 2025-11-07 21:02:58 -05:00
Reuse buffers when writing metadata (#13040)
Simplify returning buffers. Tested using `warp mixed --duration=1m --obj.size=100K`: ``` Operation: DELETE Operations: 7148 -> 7642 * Average: +6.77% (+8.1) obj/s ------------------- Operation: GET Operations: 32200 -> 34403 * Average: +6.74% (+3.5 MiB/s) throughput, +6.74% (+36.2) obj/s * First Byte: Average: -105.403µs (-3%), Median: -309µs (-11%), Best: -2.7µs (-0%), Worst: +3.5637ms (+3%) ------------------- Operation: PUT Operations: 10741 -> 11475 * Average: +6.78% (+1.2 MiB/s) throughput, +6.78% (+12.1) obj/s ------------------- Operation: STAT Operations: 21465 -> 22927 * Average: +6.71% (+24.0) obj/s ```
This commit is contained in:
@@ -1437,6 +1437,19 @@ const metaDataReadDefault = 4 << 10
|
||||
// Return used metadata byte slices here.
|
||||
var metaDataPool = sync.Pool{New: func() interface{} { return make([]byte, 0, metaDataReadDefault) }}
|
||||
|
||||
// metaDataPoolGet will return a byte slice with capacity at least metaDataReadDefault.
|
||||
// It will be length 0.
|
||||
func metaDataPoolGet() []byte {
|
||||
return metaDataPool.Get().([]byte)[:0]
|
||||
}
|
||||
|
||||
// metaDataPoolPut will put an unused small buffer back into the pool.
|
||||
func metaDataPoolPut(buf []byte) {
|
||||
if cap(buf) >= metaDataReadDefault && cap(buf) < metaDataReadDefault*4 {
|
||||
metaDataPool.Put(buf)
|
||||
}
|
||||
}
|
||||
|
||||
// readXLMetaNoData will load the metadata, but skip data segments.
|
||||
// This should only be used when data is never interesting.
|
||||
// If data is not xlv2, it is returned in full.
|
||||
@@ -1448,9 +1461,7 @@ func readXLMetaNoData(r io.Reader, size int64) ([]byte, error) {
|
||||
hasFull = false
|
||||
}
|
||||
|
||||
buf := metaDataPool.Get().([]byte)
|
||||
buf = buf[:initial]
|
||||
|
||||
buf := metaDataPoolGet()[:initial]
|
||||
_, err := io.ReadFull(r, buf)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("readXLMetaNoData.ReadFull: %w", err)
|
||||
|
||||
Reference in New Issue
Block a user