github.com/cockroachdb/pebble@v1.1.1-0.20240513155919-3622ade60459/internal/mkbench/main.go (about) 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 func init() { 42 y := getYCSBCommand() 43 rootCmd.AddCommand(getYCSBCommand()) 44 rootCmd.AddCommand(getWriteCommand()) 45 rootCmd.SilenceUsage = true 46 47 // For backwards compatability, the YCSB command is run, with the same 48 // flags, if a subcommand is not specified. 49 // TODO(travers): Remove this after updating the call site in the 50 // nightly-pebble script in cockroach. 51 *rootCmd.Flags() = *y.Flags() 52 rootCmd.RunE = y.RunE 53 } 54 55 func main() { 56 if err := rootCmd.Execute(); err != nil { 57 // Cobra has already printed the error message. 58 os.Exit(1) 59 } 60 }