Line data Source code
1 : // Copyright 2021 The LevelDB-Go and Pebble Authors. All rights reserved. Use 2 : // of this source code is governed by a BSD-style license that can be found in 3 : // the LICENSE file. 4 : 5 : // mkbench is a utility for processing the raw nightly benchmark data in JSON 6 : // data that can be visualized by docs/js/app.js. The raw data is expected to 7 : // be stored in dated directories underneath the "data/" directory: 8 : // 9 : // data/YYYYMMDD/.../<file> 10 : // 11 : // The files are expected to be bzip2 compressed. Within each file mkbench 12 : // looks for Go-bench-style lines of the form: 13 : // 14 : // Benchmark<name> %d %f ops/sec %d read %d write %f r-amp %f w-amp 15 : // 16 : // The output is written to "data.js". In order to avoid reading all of the raw 17 : // data to regenerate "data.js" on every run, mkbench first reads "data.js", 18 : // noting which days have already been processed and exluding files in those 19 : // directories from being read. This has the additional effect of merging the 20 : // existing "data.js" with new raw data, which avoids needing to have all of 21 : // the raw data present to construct a new "data.js" (only the new raw data is 22 : // necessary). 23 : // 24 : // The nightly Pebble benchmarks are orchestrated from the CockroachDB 25 : // repo: 26 : // 27 : // https://github.com/cockroachdb/cockroach/blob/master/build/teamcity-nightly-pebble.sh 28 : package main 29 : 30 : import ( 31 : "os" 32 : 33 : "github.com/spf13/cobra" 34 : ) 35 : 36 : var rootCmd = &cobra.Command{ 37 : Use: "mkbench", 38 : Short: "pebble benchmark data tools", 39 : } 40 : 41 1 : func init() { 42 1 : y := getYCSBCommand() 43 1 : rootCmd.AddCommand(getYCSBCommand()) 44 1 : rootCmd.AddCommand(getWriteCommand()) 45 1 : rootCmd.SilenceUsage = true 46 1 : 47 1 : // For backwards compatability, the YCSB command is run, with the same 48 1 : // flags, if a subcommand is not specified. 49 1 : // TODO(travers): Remove this after updating the call site in the 50 1 : // nightly-pebble script in cockroach. 51 1 : *rootCmd.Flags() = *y.Flags() 52 1 : rootCmd.RunE = y.RunE 53 1 : } 54 : 55 0 : func main() { 56 0 : if err := rootCmd.Execute(); err != nil { 57 0 : // Cobra has already printed the error message. 58 0 : os.Exit(1) 59 0 : } 60 : }