Convert PageCacheRecycler settings
This commit is contained in:
parent
856883fcc5
commit
aa5f9d5158
|
@ -25,7 +25,9 @@ import org.elasticsearch.common.inject.Inject;
|
||||||
import org.elasticsearch.common.lease.Releasable;
|
import org.elasticsearch.common.lease.Releasable;
|
||||||
import org.elasticsearch.common.recycler.AbstractRecyclerC;
|
import org.elasticsearch.common.recycler.AbstractRecyclerC;
|
||||||
import org.elasticsearch.common.recycler.Recycler;
|
import org.elasticsearch.common.recycler.Recycler;
|
||||||
|
import org.elasticsearch.common.settings.Setting;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
|
import org.elasticsearch.common.unit.ByteSizeValue;
|
||||||
import org.elasticsearch.common.util.BigArrays;
|
import org.elasticsearch.common.util.BigArrays;
|
||||||
import org.elasticsearch.common.util.concurrent.EsExecutors;
|
import org.elasticsearch.common.util.concurrent.EsExecutors;
|
||||||
import org.elasticsearch.threadpool.ThreadPool;
|
import org.elasticsearch.threadpool.ThreadPool;
|
||||||
|
@ -41,9 +43,13 @@ import static org.elasticsearch.common.recycler.Recyclers.none;
|
||||||
/** A recycler of fixed-size pages. */
|
/** A recycler of fixed-size pages. */
|
||||||
public class PageCacheRecycler extends AbstractComponent implements Releasable {
|
public class PageCacheRecycler extends AbstractComponent implements Releasable {
|
||||||
|
|
||||||
public static final String TYPE = "recycler.page.type";
|
public static final Setting<Type> TYPE_SETTING = new Setting<>("cache.recycler.page.type", Type.CONCURRENT.name(), Type::parse, false, Setting.Scope.CLUSTER);
|
||||||
public static final String LIMIT_HEAP = "recycler.page.limit.heap";
|
public static final Setting<ByteSizeValue> LIMIT_HEAP_SETTING = Setting.byteSizeSetting("cache.recycler.page.limit.heap", "10%", false, Setting.Scope.CLUSTER);
|
||||||
public static final String WEIGHT = "recycler.page.weight";
|
public static final Setting<Double> WEIGHT_BYTES_SETTING = Setting.doubleSetting("cache.recycler.page.weight.bytes", 1d, 0d, false, Setting.Scope.CLUSTER);
|
||||||
|
public static final Setting<Double> WEIGHT_LONG_SETTING = Setting.doubleSetting("cache.recycler.page.weight.longs", 1d, 0d, false, Setting.Scope.CLUSTER);
|
||||||
|
public static final Setting<Double> WEIGHT_INT_SETTING = Setting.doubleSetting("cache.recycler.page.weight.ints", 1d, 0d, false, Setting.Scope.CLUSTER);
|
||||||
|
// object pages are less useful to us so we give them a lower weight by default
|
||||||
|
public static final Setting<Double> WEIGHT_OBJECTS_SETTING = Setting.doubleSetting("cache.recycler.page.weight.objects", 0.1d, 0d, false, Setting.Scope.CLUSTER);
|
||||||
|
|
||||||
private final Recycler<byte[]> bytePage;
|
private final Recycler<byte[]> bytePage;
|
||||||
private final Recycler<int[]> intPage;
|
private final Recycler<int[]> intPage;
|
||||||
|
@ -73,8 +79,8 @@ public class PageCacheRecycler extends AbstractComponent implements Releasable {
|
||||||
@Inject
|
@Inject
|
||||||
public PageCacheRecycler(Settings settings, ThreadPool threadPool) {
|
public PageCacheRecycler(Settings settings, ThreadPool threadPool) {
|
||||||
super(settings);
|
super(settings);
|
||||||
final Type type = Type.parse(settings.get(TYPE));
|
final Type type = TYPE_SETTING .get(settings);
|
||||||
final long limit = settings.getAsMemory(LIMIT_HEAP, "10%").bytes();
|
final long limit = LIMIT_HEAP_SETTING .get(settings).bytes();
|
||||||
final int availableProcessors = EsExecutors.boundedNumberOfProcessors(settings);
|
final int availableProcessors = EsExecutors.boundedNumberOfProcessors(settings);
|
||||||
final int searchThreadPoolSize = maximumSearchThreadPoolSize(threadPool, settings);
|
final int searchThreadPoolSize = maximumSearchThreadPoolSize(threadPool, settings);
|
||||||
|
|
||||||
|
@ -91,11 +97,10 @@ public class PageCacheRecycler extends AbstractComponent implements Releasable {
|
||||||
// to direct ByteBuffers or sun.misc.Unsafe on a byte[] but this would have other issues
|
// to direct ByteBuffers or sun.misc.Unsafe on a byte[] but this would have other issues
|
||||||
// that would need to be addressed such as garbage collection of native memory or safety
|
// that would need to be addressed such as garbage collection of native memory or safety
|
||||||
// of Unsafe writes.
|
// of Unsafe writes.
|
||||||
final double bytesWeight = settings.getAsDouble(WEIGHT + ".bytes", 1d);
|
final double bytesWeight = WEIGHT_BYTES_SETTING .get(settings);
|
||||||
final double intsWeight = settings.getAsDouble(WEIGHT + ".ints", 1d);
|
final double intsWeight = WEIGHT_INT_SETTING .get(settings);
|
||||||
final double longsWeight = settings.getAsDouble(WEIGHT + ".longs", 1d);
|
final double longsWeight = WEIGHT_LONG_SETTING .get(settings);
|
||||||
// object pages are less useful to us so we give them a lower weight by default
|
final double objectsWeight = WEIGHT_OBJECTS_SETTING .get(settings);
|
||||||
final double objectsWeight = settings.getAsDouble(WEIGHT + ".objects", 0.1d);
|
|
||||||
|
|
||||||
final double totalWeight = bytesWeight + intsWeight + longsWeight + objectsWeight;
|
final double totalWeight = bytesWeight + intsWeight + longsWeight + objectsWeight;
|
||||||
final int maxPageCount = (int) Math.min(Integer.MAX_VALUE, limit / BigArrays.PAGE_SIZE_IN_BYTES);
|
final int maxPageCount = (int) Math.min(Integer.MAX_VALUE, limit / BigArrays.PAGE_SIZE_IN_BYTES);
|
||||||
|
@ -190,7 +195,7 @@ public class PageCacheRecycler extends AbstractComponent implements Releasable {
|
||||||
return recycler;
|
return recycler;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static enum Type {
|
public enum Type {
|
||||||
QUEUE {
|
QUEUE {
|
||||||
@Override
|
@Override
|
||||||
<T> Recycler<T> build(Recycler.C<T> c, int limit, int estimatedThreadPoolSize, int availableProcessors) {
|
<T> Recycler<T> build(Recycler.C<T> c, int limit, int estimatedThreadPoolSize, int availableProcessors) {
|
||||||
|
@ -211,9 +216,6 @@ public class PageCacheRecycler extends AbstractComponent implements Releasable {
|
||||||
};
|
};
|
||||||
|
|
||||||
public static Type parse(String type) {
|
public static Type parse(String type) {
|
||||||
if (Strings.isNullOrEmpty(type)) {
|
|
||||||
return CONCURRENT;
|
|
||||||
}
|
|
||||||
try {
|
try {
|
||||||
return Type.valueOf(type.toUpperCase(Locale.ROOT));
|
return Type.valueOf(type.toUpperCase(Locale.ROOT));
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
|
|
|
@ -22,6 +22,7 @@ import org.elasticsearch.action.admin.indices.close.TransportCloseIndexAction;
|
||||||
import org.elasticsearch.action.support.AutoCreateIndex;
|
import org.elasticsearch.action.support.AutoCreateIndex;
|
||||||
import org.elasticsearch.action.support.DestructiveOperations;
|
import org.elasticsearch.action.support.DestructiveOperations;
|
||||||
import org.elasticsearch.action.support.master.TransportMasterNodeReadAction;
|
import org.elasticsearch.action.support.master.TransportMasterNodeReadAction;
|
||||||
|
import org.elasticsearch.cache.recycler.PageCacheRecycler;
|
||||||
import org.elasticsearch.client.Client;
|
import org.elasticsearch.client.Client;
|
||||||
import org.elasticsearch.client.transport.TransportClientNodesService;
|
import org.elasticsearch.client.transport.TransportClientNodesService;
|
||||||
import org.elasticsearch.cluster.ClusterModule;
|
import org.elasticsearch.cluster.ClusterModule;
|
||||||
|
@ -346,6 +347,12 @@ public final class ClusterSettings extends AbstractScopedSettings {
|
||||||
FsService.REFRESH_INTERVAL_SETTING,
|
FsService.REFRESH_INTERVAL_SETTING,
|
||||||
JvmGcMonitorService.ENABLED_SETTING,
|
JvmGcMonitorService.ENABLED_SETTING,
|
||||||
JvmGcMonitorService.REFRESH_INTERVAL_SETTING,
|
JvmGcMonitorService.REFRESH_INTERVAL_SETTING,
|
||||||
JvmGcMonitorService.GC_SETTING
|
JvmGcMonitorService.GC_SETTING,
|
||||||
|
PageCacheRecycler.LIMIT_HEAP_SETTING,
|
||||||
|
PageCacheRecycler.WEIGHT_BYTES_SETTING,
|
||||||
|
PageCacheRecycler.WEIGHT_INT_SETTING,
|
||||||
|
PageCacheRecycler.WEIGHT_LONG_SETTING,
|
||||||
|
PageCacheRecycler.WEIGHT_OBJECTS_SETTING,
|
||||||
|
PageCacheRecycler.TYPE_SETTING
|
||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue