MFV 286546:
5661 ZFS: "compression = on" should use lz4 if feature is enabled Reviewed by: Matthew Ahrens <mahrens@delphix.com> Reviewed by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net> Reviewed by: Xin LI <delphij@freebsd.org> Approved by: Robert Mustacchi <rm@joyent.com> Author: Justin T. Gibbs <justing@spectralogic.com> illumos/illumos-gate@db1741f555
This commit is contained in:
parent
9834135947
commit
4ff9527edc
@ -939,7 +939,23 @@ Disabling checksums is
|
||||
.Em NOT
|
||||
a recommended practice.
|
||||
.It Sy compression Ns = Ns Cm on | off | lzjb | gzip | gzip- Ns Ar N | Cm zle | Cm lz4
|
||||
Controls the compression algorithm used for this dataset. The
|
||||
Controls the compression algorithm used for this dataset.
|
||||
Setting compression to
|
||||
.Cm on
|
||||
indicates that the current default compression algorithm should be used.
|
||||
The default balances compression and decompression speed, with compression
|
||||
ratio and is expected to work well on a wide variety of workloads.
|
||||
Unlike all other settings for this property, on does not select a fixed
|
||||
compression type.
|
||||
As new compression algorithms are added to ZFS and enabled on a pool, the
|
||||
default compression algorithm may change.
|
||||
The current default compression algorthm is either
|
||||
.Cm lzjb
|
||||
or, if the
|
||||
.Sy lz4_compress
|
||||
feature is enabled,
|
||||
.Cm lz4 .
|
||||
The
|
||||
.Cm lzjb
|
||||
compression algorithm is optimized for performance while providing decent data
|
||||
compression. Setting compression to
|
||||
|
@ -1783,19 +1783,15 @@ dmu_write_policy(objset_t *os, dnode_t *dn, int level, int wp, zio_prop_t *zp)
|
||||
* 3. all other level 0 blocks
|
||||
*/
|
||||
if (ismd) {
|
||||
/*
|
||||
* XXX -- we should design a compression algorithm
|
||||
* that specializes in arrays of bps.
|
||||
*/
|
||||
boolean_t lz4_ac = spa_feature_is_active(os->os_spa,
|
||||
SPA_FEATURE_LZ4_COMPRESS);
|
||||
|
||||
if (zfs_mdcomp_disable) {
|
||||
compress = ZIO_COMPRESS_EMPTY;
|
||||
} else if (lz4_ac) {
|
||||
compress = ZIO_COMPRESS_LZ4;
|
||||
} else {
|
||||
compress = ZIO_COMPRESS_LZJB;
|
||||
/*
|
||||
* XXX -- we should design a compression algorithm
|
||||
* that specializes in arrays of bps.
|
||||
*/
|
||||
compress = zio_compress_select(os->os_spa,
|
||||
ZIO_COMPRESS_ON, ZIO_COMPRESS_ON);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1828,7 +1824,8 @@ dmu_write_policy(objset_t *os, dnode_t *dn, int level, int wp, zio_prop_t *zp)
|
||||
compress = ZIO_COMPRESS_OFF;
|
||||
checksum = ZIO_CHECKSUM_NOPARITY;
|
||||
} else {
|
||||
compress = zio_compress_select(dn->dn_compress, compress);
|
||||
compress = zio_compress_select(os->os_spa, dn->dn_compress,
|
||||
compress);
|
||||
|
||||
checksum = (dedup_checksum == ZIO_CHECKSUM_OFF) ?
|
||||
zio_checksum_select(dn->dn_checksum, checksum) :
|
||||
|
@ -151,7 +151,8 @@ compression_changed_cb(void *arg, uint64_t newval)
|
||||
*/
|
||||
ASSERT(newval != ZIO_COMPRESS_INHERIT);
|
||||
|
||||
os->os_compress = zio_compress_select(newval, ZIO_COMPRESS_ON_VALUE);
|
||||
os->os_compress = zio_compress_select(os->os_spa, newval,
|
||||
ZIO_COMPRESS_ON);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -408,7 +409,7 @@ dmu_objset_open_impl(spa_t *spa, dsl_dataset_t *ds, blkptr_t *bp,
|
||||
} else {
|
||||
/* It's the meta-objset. */
|
||||
os->os_checksum = ZIO_CHECKSUM_FLETCHER_4;
|
||||
os->os_compress = ZIO_COMPRESS_LZJB;
|
||||
os->os_compress = ZIO_COMPRESS_ON;
|
||||
os->os_copies = spa_max_replication(spa);
|
||||
os->os_dedup_checksum = ZIO_CHECKSUM_OFF;
|
||||
os->os_dedup_verify = B_FALSE;
|
||||
|
@ -125,15 +125,19 @@ enum zio_compress {
|
||||
*/
|
||||
#define ZIO_COMPRESS_LEGACY_FUNCTIONS ZIO_COMPRESS_LZ4
|
||||
|
||||
/* N.B. when altering this value, also change BOOTFS_COMPRESS_VALID below */
|
||||
#define ZIO_COMPRESS_ON_VALUE ZIO_COMPRESS_LZJB
|
||||
#define ZIO_COMPRESS_DEFAULT ZIO_COMPRESS_OFF
|
||||
/*
|
||||
* The meaning of "compress = on" selected by the compression features enabled
|
||||
* on a given pool.
|
||||
*/
|
||||
#define ZIO_COMPRESS_LEGACY_ON_VALUE ZIO_COMPRESS_LZJB
|
||||
#define ZIO_COMPRESS_LZ4_ON_VALUE ZIO_COMPRESS_LZ4
|
||||
|
||||
#define ZIO_COMPRESS_DEFAULT ZIO_COMPRESS_OFF
|
||||
|
||||
#define BOOTFS_COMPRESS_VALID(compress) \
|
||||
((compress) == ZIO_COMPRESS_LZJB || \
|
||||
(compress) == ZIO_COMPRESS_LZ4 || \
|
||||
((compress) == ZIO_COMPRESS_ON && \
|
||||
ZIO_COMPRESS_ON_VALUE == ZIO_COMPRESS_LZJB) || \
|
||||
(compress) == ZIO_COMPRESS_ON || \
|
||||
(compress) == ZIO_COMPRESS_OFF)
|
||||
|
||||
#define ZIO_FAILURE_MODE_WAIT 0
|
||||
@ -578,8 +582,8 @@ extern enum zio_checksum zio_checksum_select(enum zio_checksum child,
|
||||
enum zio_checksum parent);
|
||||
extern enum zio_checksum zio_checksum_dedup_select(spa_t *spa,
|
||||
enum zio_checksum child, enum zio_checksum parent);
|
||||
extern enum zio_compress zio_compress_select(enum zio_compress child,
|
||||
enum zio_compress parent);
|
||||
extern enum zio_compress zio_compress_select(spa_t *spa,
|
||||
enum zio_compress child, enum zio_compress parent);
|
||||
|
||||
extern void zio_suspend(spa_t *spa, zio_t *zio);
|
||||
extern int zio_resume(spa_t *spa);
|
||||
|
@ -35,6 +35,7 @@
|
||||
#include <sys/compress.h>
|
||||
#include <sys/kstat.h>
|
||||
#include <sys/spa.h>
|
||||
#include <sys/zfeature.h>
|
||||
#include <sys/zio.h>
|
||||
#include <sys/zio_compress.h>
|
||||
|
||||
@ -81,19 +82,27 @@ zio_compress_info_t zio_compress_table[ZIO_COMPRESS_FUNCTIONS] = {
|
||||
};
|
||||
|
||||
enum zio_compress
|
||||
zio_compress_select(enum zio_compress child, enum zio_compress parent)
|
||||
zio_compress_select(spa_t *spa, enum zio_compress child,
|
||||
enum zio_compress parent)
|
||||
{
|
||||
enum zio_compress result;
|
||||
|
||||
ASSERT(child < ZIO_COMPRESS_FUNCTIONS);
|
||||
ASSERT(parent < ZIO_COMPRESS_FUNCTIONS);
|
||||
ASSERT(parent != ZIO_COMPRESS_INHERIT && parent != ZIO_COMPRESS_ON);
|
||||
ASSERT(parent != ZIO_COMPRESS_INHERIT);
|
||||
|
||||
if (child == ZIO_COMPRESS_INHERIT)
|
||||
return (parent);
|
||||
result = child;
|
||||
if (result == ZIO_COMPRESS_INHERIT)
|
||||
result = parent;
|
||||
|
||||
if (child == ZIO_COMPRESS_ON)
|
||||
return (ZIO_COMPRESS_ON_VALUE);
|
||||
if (result == ZIO_COMPRESS_ON) {
|
||||
if (spa_feature_is_active(spa, SPA_FEATURE_LZ4_COMPRESS))
|
||||
result = ZIO_COMPRESS_LZ4_ON_VALUE;
|
||||
else
|
||||
result = ZIO_COMPRESS_LEGACY_ON_VALUE;
|
||||
}
|
||||
|
||||
return (child);
|
||||
return (result);
|
||||
}
|
||||
|
||||
size_t
|
||||
|
Loading…
Reference in New Issue
Block a user