Skip to content

Commit fda07dc

Browse files
committed
storage: use MinLZ by default only on amd64
On other platforms the MinLZ implementation is much slower so it's safer to just stick to Snappy. Epic: none Release note: None
1 parent 1c359f8 commit fda07dc

File tree

1 file changed

+17
-3
lines changed

1 file changed

+17
-3
lines changed

pkg/storage/pebble.go

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"math"
1313
"os"
1414
"path/filepath"
15+
"runtime"
1516
"sort"
1617
"strconv"
1718
"strings"
@@ -224,6 +225,19 @@ func RegisterCompressionAlgorithmClusterSetting(
224225
)
225226
}
226227

228+
var defaultCompressionAlgorithm = func() CompressionAlgorithm {
229+
if runtime.GOARCH == "amd64" {
230+
// We prefer MinLZ on amd64 because it is slightly superior to Snappy in
231+
// almost all cases (both in terms of speed and compression ratio).
232+
//
233+
// Only amd64 has an optimized assembly MinLZ implementation; the Go
234+
// implementation is significantly slower, especially when decompressing;
235+
// see https://github.com/minio/minlz#protobuf-sample
236+
return CompressionAlgorithmMinLZ
237+
}
238+
return CompressionAlgorithmSnappy
239+
}()
240+
227241
// CompressionAlgorithmStorage determines the compression algorithm used to
228242
// compress data blocks when writing sstables for use in a Pebble store (written
229243
// directly, or constructed for ingestion on a remote store via AddSSTable).
@@ -232,7 +246,7 @@ func RegisterCompressionAlgorithmClusterSetting(
232246
var CompressionAlgorithmStorage = RegisterCompressionAlgorithmClusterSetting(
233247
"storage.sstable.compression_algorithm",
234248
`determines the compression algorithm to use when compressing sstable data blocks for use in a Pebble store;`,
235-
CompressionAlgorithmMinLZ, // Default.
249+
defaultCompressionAlgorithm,
236250
)
237251

238252
// CompressionAlgorithmBackupStorage determines the compression algorithm used
@@ -242,7 +256,7 @@ var CompressionAlgorithmStorage = RegisterCompressionAlgorithmClusterSetting(
242256
var CompressionAlgorithmBackupStorage = RegisterCompressionAlgorithmClusterSetting(
243257
"storage.sstable.compression_algorithm_backup_storage",
244258
`determines the compression algorithm to use when compressing sstable data blocks for backup row data storage;`,
245-
CompressionAlgorithmMinLZ, // Default.
259+
defaultCompressionAlgorithm,
246260
)
247261

248262
// CompressionAlgorithmBackupTransport determines the compression algorithm used
@@ -255,7 +269,7 @@ var CompressionAlgorithmBackupStorage = RegisterCompressionAlgorithmClusterSetti
255269
var CompressionAlgorithmBackupTransport = RegisterCompressionAlgorithmClusterSetting(
256270
"storage.sstable.compression_algorithm_backup_transport",
257271
`determines the compression algorithm to use when compressing sstable data blocks for backup transport;`,
258-
CompressionAlgorithmMinLZ, // Default.
272+
defaultCompressionAlgorithm,
259273
)
260274

261275
func getCompressionAlgorithm(

0 commit comments

Comments
 (0)