134a52e144
Summary: In https://github.com/facebook/rocksdb/pull/3934 we introduced advisor scripts that make suggestions in the config options based on the log file and stats from a run of rocksdb. The optimizer runs the advisor on a benchmark application in a loop and automatically applies the suggested changes until the config options are optimized. This is a work in progress and the patch is the initial skeleton for the optimizer. The sample application that is run in the loop is currently dbbench. Pull Request resolved: https://github.com/facebook/rocksdb/pull/4169 Reviewed By: maysamyabandeh Differential Revision: D9023671 Pulled By: poojam23 fbshipit-source-id: a6192d475c462cf6eb2b316716f97cb400fcb64d
40 lines
1.5 KiB
Python
40 lines
1.5 KiB
Python
# Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
|
|
# This source code is licensed under both the GPLv2 (found in the
|
|
# COPYING file in the root directory) and Apache 2.0 License
|
|
# (found in the LICENSE.Apache file in the root directory).
|
|
|
|
from abc import ABC, abstractmethod
|
|
import re
|
|
|
|
|
|
class BenchmarkRunner(ABC):
|
|
@staticmethod
|
|
@abstractmethod
|
|
def is_metric_better(new_metric, old_metric):
|
|
pass
|
|
|
|
@abstractmethod
|
|
def run_experiment(self):
|
|
# should return a list of DataSource objects
|
|
pass
|
|
|
|
@staticmethod
|
|
def get_info_log_file_name(log_dir, db_path):
|
|
# Example: DB Path = /dev/shm and OPTIONS file has option
|
|
# db_log_dir=/tmp/rocks/, then the name of the log file will be
|
|
# 'dev_shm_LOG' and its location will be /tmp/rocks. If db_log_dir is
|
|
# not specified in the OPTIONS file, then the location of the log file
|
|
# will be /dev/shm and the name of the file will be 'LOG'
|
|
file_name = ''
|
|
if log_dir:
|
|
# refer GetInfoLogPrefix() in rocksdb/util/filename.cc
|
|
# example db_path: /dev/shm/dbbench
|
|
file_name = db_path[1:] # to ignore the leading '/' character
|
|
to_be_replaced = re.compile('[^0-9a-zA-Z\-_\.]')
|
|
for character in to_be_replaced.findall(db_path):
|
|
file_name = file_name.replace(character, '_')
|
|
if not file_name.endswith('_'):
|
|
file_name += '_'
|
|
file_name += 'LOG'
|
|
return file_name
|