Q1. When I tried to start bestconfig by executing start.sh, an exception of “can’t find the class of bestconf” occured?

You need to move bestconf.jar to deploy directory. And remember to move the data directory to the deploy directory.

Q2. Why an exception of “connection refused” occured?

You need to modify the ssh_config file located in /etc/ssh/ directory. Set the value of “PermitRootLogin” to yes and then restart the ssh service.

Q3. In production environment, the scale of hadoop cluster is considerably large, for example, the number of nodes in hadoop cluster may reach 1500, so the overhead of staring and stopping the cluster is significantly huge. In that case, is BestConfig still applicable?

No problem. This just depends on how long you can put up with the tuning process. If you can bear a long waiting time, then you can use Bestconfig to obtain a best configuration setting.

Q4. Can BestConfig only be used for software system tuning? Can it also be able to tune hardware system?

Now, BestConfig can tune both software and hardware systems. Given the set of parameters of system (software / hardware) under tune and their valid ranges, then BestConfig is able to generate a best configuration setting.

Q5. Can BestConfig only be used to tune a certain system such as MySQL or Hadoop? Is it able to tune other systems such as database systems or big data systems.

Yes! BestConfig is a general system tuning tool and able to tune the widely used systems including MySQL, Tomcat, JVM, Hadoop(Hive),Spark, Cassandra, etc.

Q6. Is BestConfig tuning process based on the online real system and workload?

No, the tuning process of BestConfig is run on the staging environment which is a mirror of the production environment, using the same actual deployment settings (e.g. hardware, clustering, software, etc.).

It is mainly for a final test, using live data, of the system before production. And, implementing the real application workload in the workload generator is possible for the system in the staging environment, e.g., by log replay.

When the tuning process on the staging systems ends, the best configuration setting is obtained. Then we apply the best configuration setting to the real system. In this way, samples can be collected without affecting applications on the real system deployment.

Q7. The workloads generated by large number of users on the online systems are constantly changing. Can the workloads applied in the staging environment exactly simulate the real online workloads?

The application workloads can be classified into two types. One is periodic workload, the other is non-periodic workload. As for periodic workload, we can apply log replay to implement the real application workload. As for non-periodic workload, we can use benchmark to simulate a workload that highly similar to real application workload.

Q8. How to build BestConfig project from source?

It’s easy for users to build BestConfig project from source. You only need to import the whole Bestconfig project into eclipse and then build it.

Q9. How to use BestConfig?

You can use BestConfig by the following steps.

Step 1. Download the latest release of BestConfig and then unzip it. After that, enter the directory of bestconf-master/deploy.

Step 2. Set up a system for tuning. In the project, we offer deployable examples for 6 systems, including Spark, Hive+Hadoop, Cassandra, MySQL, and Tomcat. We also specify the workload generators to be used for tuning the systems.
The detailed steps for setting up BestConfig for you own systems are presented in QuickStart.

Step 3. Run BestConfig.
As for linux system, firstly, you need to update all system and deployment related scripts accordingly and move them to the correct path on the servers. Next, you need to move the system-specific jar file to lib. (For example, move deploy/4BI/bestconfBI.jar to deploy/lib). At last, you enter the directory of deploy and run the shell of “start.sh”.

Q10. Why did I encounter a system exception of “java.lang.ClassNotFoundException” when I tried to run BestConfig for tomcat system?

Firstly, you need to implement the ConfigReadin and ConfigWrite interfaces as TomcatConfigReadin and TomcatConfigWrite.

Next, you need to compile TomcatConfigReadin and TomcatconfigWrite to bytecodes. After that, the location(path) of compiled bytecodes need to be added to classpath of BestConfig project.

Q11. How can I get the detailed information of of BestConfig’s implementation mechanism?

You can read the following two papers to get all the information that you need.

[1] Yuqing ZHU, Jianxun Liu, Mengying Guo, Yungang Bao, Wenlong Ma, Zhuoyue Liu, Kunpeng Song, Yingchun Yang. BestConfig: Tapping the Performance Potential of Systems via Automatic Configuration Tuning. Proceedings of the ACM Symposium on Cloud Computing 2017 (SoCC’17) [pdf_Socc2017] [slides_Socc2017]

[2] Yuqing ZHU, Jianxun Liu, Mengying Guo, Yungang Bao. ACTS in Need: Automatic Configuration Tuning with Scalability. Proceedings of the 8th ACM SIGOPS Asia-Pacific Workshop on Systems (APSys’17) [pdf_APSys2017]