Removed old LHS code from driver (the website already supports running LHS)
This commit is contained in:
parent
fcec765a7c
commit
159e26e1c7
|
@ -1,83 +0,0 @@
|
||||||
[
|
|
||||||
{
|
|
||||||
"name": "SHARED_POOL_SIZE",
|
|
||||||
"tuning_range": {
|
|
||||||
"minval": "500MB",
|
|
||||||
"maxval": "2500MB"
|
|
||||||
},
|
|
||||||
"default": "1500MB",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "DB_CACHE_SIZE",
|
|
||||||
"tuning_range": {
|
|
||||||
"minval": "10GB",
|
|
||||||
"maxval": "24GB"
|
|
||||||
},
|
|
||||||
"default": "14GB",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "LOG_BUFFER",
|
|
||||||
"tuning_range": {
|
|
||||||
"minval": "10MB",
|
|
||||||
"maxval": "1000MB"
|
|
||||||
},
|
|
||||||
"default": "20MB",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "LARGE_POOL_SIZE",
|
|
||||||
"tuning_range": {
|
|
||||||
"minval": "10MB",
|
|
||||||
"maxval": "1000MB"
|
|
||||||
},
|
|
||||||
"default": "100MB",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "STREAMS_POOL_SIZE",
|
|
||||||
"tuning_range": {
|
|
||||||
"minval": "10MB",
|
|
||||||
"maxval": "1000MB"
|
|
||||||
},
|
|
||||||
"default": "100MB",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "bitmap_merge_area_size",
|
|
||||||
"tuning_range": {
|
|
||||||
"minval": "1000000",
|
|
||||||
"maxval": "20000000"
|
|
||||||
},
|
|
||||||
"default": "1MB",
|
|
||||||
"type": "integer"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "create_bitmap_area_size",
|
|
||||||
"tuning_range": {
|
|
||||||
"minval": "1000000",
|
|
||||||
"maxval": "100000000"
|
|
||||||
},
|
|
||||||
"default": "8MB",
|
|
||||||
"type": "integer"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "hash_area_size",
|
|
||||||
"tuning_range": {
|
|
||||||
"minval": "65536",
|
|
||||||
"maxval": "1000000"
|
|
||||||
},
|
|
||||||
"default": "65536",
|
|
||||||
"type": "integer"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "sort_area_size",
|
|
||||||
"tuning_range": {
|
|
||||||
"minval": "128000",
|
|
||||||
"maxval": "2000000"
|
|
||||||
},
|
|
||||||
"default": "128000",
|
|
||||||
"type": "integer"
|
|
||||||
}
|
|
||||||
]
|
|
|
@ -1,110 +0,0 @@
|
||||||
[
|
|
||||||
{
|
|
||||||
"name": "effective_cache_size",
|
|
||||||
"tuning_range": {
|
|
||||||
"minval": "4GB",
|
|
||||||
"maxval": "16GB"
|
|
||||||
},
|
|
||||||
"default": "4GB",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "shared_buffers",
|
|
||||||
"tuning_range": {
|
|
||||||
"minval": "128MB",
|
|
||||||
"maxval": "12GB"
|
|
||||||
},
|
|
||||||
"default": "128MB",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "max_parallel_workers_per_gather",
|
|
||||||
"tuning_range": {
|
|
||||||
"minval": 0,
|
|
||||||
"maxval": 8
|
|
||||||
},
|
|
||||||
"default": 0,
|
|
||||||
"type": "integer"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "default_statistics_target",
|
|
||||||
"tuning_range": {
|
|
||||||
"minval": 100,
|
|
||||||
"maxval": 2048
|
|
||||||
},
|
|
||||||
"default": 100,
|
|
||||||
"type": "integer"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "bgwriter_lru_maxpages",
|
|
||||||
"tuning_range": {
|
|
||||||
"minval": 0,
|
|
||||||
"maxval": 1000
|
|
||||||
},
|
|
||||||
"default": 10,
|
|
||||||
"type": "integer"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "checkpoint_timeout",
|
|
||||||
"tuning_range": {
|
|
||||||
"minval": "10ms",
|
|
||||||
"maxval": "1min"
|
|
||||||
},
|
|
||||||
"default": "200ms",
|
|
||||||
"type": "time"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "random_page_cost",
|
|
||||||
"tuning_range": {
|
|
||||||
"minval": 1,
|
|
||||||
"maxval": 10
|
|
||||||
},
|
|
||||||
"default": 4.0,
|
|
||||||
"type": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "checkpoint_completion_target",
|
|
||||||
"tuning_range": {
|
|
||||||
"minval": 0.1,
|
|
||||||
"maxval": 0.9
|
|
||||||
},
|
|
||||||
"default": 0.5,
|
|
||||||
"type": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "checkpoint_timeout",
|
|
||||||
"tuning_range": {
|
|
||||||
"minval": "1min",
|
|
||||||
"maxval": "30min"
|
|
||||||
},
|
|
||||||
"default": "5min",
|
|
||||||
"type": "time"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "max_wal_size",
|
|
||||||
"tuning_range": {
|
|
||||||
"minval": "256MB",
|
|
||||||
"maxval": "16GB"
|
|
||||||
},
|
|
||||||
"default": "1GB",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "temp_buffers",
|
|
||||||
"tuning_range": {
|
|
||||||
"minval": "8MB",
|
|
||||||
"maxval": "1GB"
|
|
||||||
},
|
|
||||||
"default": "8MB",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "work_mem",
|
|
||||||
"tuning_range": {
|
|
||||||
"minval": "4MB",
|
|
||||||
"maxval": "1GB"
|
|
||||||
},
|
|
||||||
"default": "4MB",
|
|
||||||
"type": "bytes"
|
|
||||||
}
|
|
||||||
]
|
|
|
@ -1,126 +0,0 @@
|
||||||
#
|
|
||||||
# OtterTune - lhs.py
|
|
||||||
#
|
|
||||||
# Copyright (c) 2017-18, Carnegie Mellon University Database Group
|
|
||||||
#
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import json
|
|
||||||
import os
|
|
||||||
import numpy as np
|
|
||||||
from pyDOE import lhs
|
|
||||||
from scipy.stats import uniform
|
|
||||||
from hurry.filesize import size
|
|
||||||
|
|
||||||
|
|
||||||
BYTES_SYSTEM = [
|
|
||||||
(1024 ** 5, 'PB'),
|
|
||||||
(1024 ** 4, 'TB'),
|
|
||||||
(1024 ** 3, 'GB'),
|
|
||||||
(1024 ** 2, 'MB'),
|
|
||||||
(1024 ** 1, 'kB'),
|
|
||||||
(1024 ** 0, 'B'),
|
|
||||||
]
|
|
||||||
|
|
||||||
TIME_SYSTEM = [
|
|
||||||
(1000 * 60 * 60 * 24, 'd'),
|
|
||||||
(1000 * 60 * 60, 'h'),
|
|
||||||
(1000 * 60, 'min'),
|
|
||||||
(1000, 's'),
|
|
||||||
(1, 'ms'),
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
def get_raw_size(value, system):
|
|
||||||
for factor, suffix in system:
|
|
||||||
if value.endswith(suffix):
|
|
||||||
if len(value) == len(suffix):
|
|
||||||
amount = 1
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
amount = int(value[:-len(suffix)])
|
|
||||||
except ValueError:
|
|
||||||
continue
|
|
||||||
return amount * factor
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def get_knob_raw(value, knob_type):
|
|
||||||
if knob_type == 'integer':
|
|
||||||
return int(value)
|
|
||||||
elif knob_type == 'float':
|
|
||||||
return float(value)
|
|
||||||
elif knob_type == 'bytes':
|
|
||||||
return get_raw_size(value, BYTES_SYSTEM)
|
|
||||||
elif knob_type == 'time':
|
|
||||||
return get_raw_size(value, TIME_SYSTEM)
|
|
||||||
else:
|
|
||||||
raise Exception('Knob Type does not support')
|
|
||||||
|
|
||||||
|
|
||||||
def get_knob_readable(value, knob_type):
|
|
||||||
if knob_type == 'integer':
|
|
||||||
return int(round(value))
|
|
||||||
elif knob_type == 'float':
|
|
||||||
return float(value)
|
|
||||||
elif knob_type == 'bytes':
|
|
||||||
value = int(round(value))
|
|
||||||
return size(value, system=BYTES_SYSTEM)
|
|
||||||
elif knob_type == 'time':
|
|
||||||
value = int(round(value))
|
|
||||||
return size(value, system=TIME_SYSTEM)
|
|
||||||
else:
|
|
||||||
raise Exception('Knob Type does not support')
|
|
||||||
|
|
||||||
|
|
||||||
def get_knobs_readable(values, types):
|
|
||||||
result = []
|
|
||||||
for i, value in enumerate(values):
|
|
||||||
result.append(get_knob_readable(value, types[i]))
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
def main(args):
|
|
||||||
|
|
||||||
if (len(sys.argv) != 4):
|
|
||||||
raise Exception("Usage: python3 lhs.py [Samples Count] [Knob Path] [Save Path]")
|
|
||||||
|
|
||||||
knob_path = args[2]
|
|
||||||
save_path = args[3]
|
|
||||||
with open(knob_path, "r") as f:
|
|
||||||
tuning_knobs = json.load(f)
|
|
||||||
|
|
||||||
names = []
|
|
||||||
maxvals = []
|
|
||||||
minvals = []
|
|
||||||
types = []
|
|
||||||
|
|
||||||
for knob in tuning_knobs:
|
|
||||||
names.append(knob['name'])
|
|
||||||
maxvals.append(get_knob_raw(knob['tuning_range']['maxval'], knob['type']))
|
|
||||||
minvals.append(get_knob_raw(knob['tuning_range']['minval'], knob['type']))
|
|
||||||
types.append(knob['type'])
|
|
||||||
|
|
||||||
nsamples = int(args[1])
|
|
||||||
nfeats = len(tuning_knobs)
|
|
||||||
samples = lhs(nfeats, samples=nsamples, criterion='maximin')
|
|
||||||
maxvals = np.array(maxvals)
|
|
||||||
minvals = np.array(minvals)
|
|
||||||
scales = maxvals - minvals
|
|
||||||
for fidx in range(nfeats):
|
|
||||||
samples[:, fidx] = uniform(loc=minvals[fidx], scale=scales[fidx]).ppf(samples[:, fidx])
|
|
||||||
|
|
||||||
samples_readable = []
|
|
||||||
for sample in samples:
|
|
||||||
samples_readable.append(get_knobs_readable(sample, types))
|
|
||||||
|
|
||||||
config = {'recommendation': {}}
|
|
||||||
for sidx in range(nsamples):
|
|
||||||
for fidx in range(nfeats):
|
|
||||||
config["recommendation"][names[fidx]] = samples_readable[sidx][fidx]
|
|
||||||
with open(os.path.join(save_path, 'config_' + str(sidx)), 'w+') as f:
|
|
||||||
f.write(json.dumps(config))
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main(sys.argv)
|
|
|
@ -1 +0,0 @@
|
||||||
sudo -b nohup fab run_lhs > lhs.log 2>&1 < /dev/null
|
|
Loading…
Reference in New Issue