In this study, Akamas is tasked with the optimization of Linux1, a Linux-based system (Ubuntu). The study's goal is to maximize the throughput of the computations of the Sysbench CPU benchmark.
Sysbench is a suite of benchmarks for CPU, file system, memory, threads, etc… typically used for testing the performance of databases.
System1 comes with a Node Exporter that collects system metrics that Akamas consumes through a Prometheus provider. Concerning Sysbench metrics, The study uses the CSV provider to make them available to Akamas.
The study uses Sysbench to execute a performance test against System1.
Telemetry
Setup a Prometheus and a Node Exporter to monitor the System
Install the Prometheus provider
Create a provider instance:
provider:"Prometheus"config:address:"linux1"# address of the Prometheus of system1port:9090# port of the Prometheus of system1component:"linux1-linux"
4. Install the CSV File provider.
5. Create a provider instance:
provider:"CSV"config:address:"linux1"authType:"password"username:"ubuntu"auth:"[INSERT PASSWORD HERE]"protocol:scpremoteFilePattern:"/home/ubuntu/benchmark_log.csv"# the remote path of the CSV with the metrics of the benchmarkcomponentColumn:"component"# which column of the CSV should contain the name of the componentcsvFormat:"horizontal"metrics:- metric:"throughput"datasourceMetric:"events_per_second"
Workflow
The study uses a four-task workflow to test System1 with a new configuration:
Task Configure OS, which leverages the LinuxConfigurator operator to apply a new set of Linux configuration parameters
Task Start benchmark, which leverages the Executor operator to launch the benchmark
The following YAML file represents the complete workflow definition:
name:"workflow for linux 1"tasks- name:"Configure OS"operator:"LinuxConfigurator"arguments:component:linux1-linux- name:"Start benchmark"operator:"Executor"arguments:command:"bash /home/ubuntu/benchmark.sh"host:hostname:"linux1"username:"ubuntu"password:"[INSERT_HERE_PASSWORD]"
System
Within Akamas, System1 is modeled by a system of two components:
system1-linux, which represents the actual Linux system with its metrics and parameters and is of type Ubuntu 16.04
system1-bench, which represents the Sysbench with its metrics and is of type Sysbench
The following YAML file represents the definition of the Sysbench component type:
name:"Sysbench"description:"A component-type for Sysbench"metrics:- "throughput"# only one metric
Study
Goal: minimize the throughput of the benchmark
Windowing: take the default (compute the score for the entire duration of a trial)
Parameters selection: select only CPU scheduling parameters
Metrics selection: select only the throughput of the benchmark
Trials: 3
Steps: one baseline and one optimize
The following YAML file represents the definition of the study:
system:"system for linux1"workflow:"workflow ofr linux1"name:"linux optimization with sysbench"description:"Optimizing an Ubuntu instance with a CPU intensive benchmark: sysbench"goal:objective:minimizefunction:formula:"linux1-benchmark.throughput"metricsSelection: - "linux1-benchmark.throughput"parametersSelection: - name:"linux1-linux.os_cpuSchedMinGranularity" - name:"linux1-linux.os_cpuSchedWakeupGranularity" - name:"linux1-linux.os_CPUSchedMigrationCost" - name:"linux1-linux.os_CPUSchedChildRunsFirst" - name:"linux1-linux.os_CPUSchedLatency" - name:"linux1-linux.os_CPUSchedAutogroupEnabled" - name:"linux1-linux.os_CPUSchedNrMigrate"numberOfTrials:3steps: - name:"baseline"type:"baseline"values:linux1-linux.os_cpuSchedMinGranularity:2250000linux1-linux.os_cpuSchedWakeupGranularity:3000000linux1-linux.os_CPUSchedMigrationCost:500000linux1-linux.os_CPUSchedChildRunsFirst:0linux1-linux.os_CPUSchedLatency:18000000linux1-linux.os_CPUSchedAutogroupEnabled:1linux1-linux.os_CPUSchedNrMigrate:32 - name:"optimization"type:"optimize"numberOfExperiments:99maxFailedExperiments:25