sweet: remove bleve-query, fogleman-fauxgl, fogleman-pt

These three benchmarks have been fairly low signal and noisy.
Furthermore the fogleman-* benchmarks have some portability issues.

Fixes #58533.
For #58534.

Change-Id: I98b028a61eff2531fa4921852c40aab05f0af2d7
Reviewed-on: https://go-review.googlesource.com/c/benchmarks/+/468556
Run-TryBot: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
Auto-Submit: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
pull/5/head
Michael Anthony Knyszek 2023-02-15 19:14:25 +00:00 committed by Gopher Robot
parent 2874b5b824
commit a30118b749
13 changed files with 2 additions and 724 deletions

View File

@ -1,8 +0,0 @@
# bleve-query Benchmark
This directory contains a benchmark that queries a pre-built Bleve search index
containing a small subset of Wikipedia.
The benchmark is a heavily modified derivative of the
[bleve-bench](https://github.com/blevesearch/bleve-bench) repository and thus
partially retains its copyright as well as its Apache 2.0 license.

View File

@ -1,65 +0,0 @@
// Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//go:build !aix && !plan9
// +build !aix,!plan9
package main
import (
"flag"
"fmt"
"os"
"golang.org/x/benchmarks/sweet/benchmarks/internal/driver"
"github.com/blevesearch/bleve"
_ "github.com/blevesearch/bleve/analysis/analyzer/keyword"
)
var iterations int
func init() {
flag.IntVar(&iterations, "iterations", 50, "number of times to iterate over the list of query terms")
}
func parseFlags() error {
flag.Parse()
if flag.NArg() != 1 {
return fmt.Errorf("expected bleve index directory as input")
}
return nil
}
func run(idxdir string, iterations int) error {
index, err := bleve.Open(idxdir)
if err != nil {
return err
}
return driver.RunBenchmark("BleveQuery", func(_ *driver.B) error {
for j := 0; j < iterations; j++ {
for _, term := range terms {
query := bleve.NewTermQuery(term)
query.SetField("Text")
_, err := index.Search(bleve.NewSearchRequest(query))
if err != nil {
return err
}
}
}
return nil
}, driver.InProcessMeasurementOptions...)
}
func main() {
driver.SetFlags(flag.CommandLine)
if err := parseFlags(); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
if err := run(flag.Arg(0), iterations); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
}

View File

@ -1,302 +0,0 @@
// Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//go:build !aix && !plan9
// +build !aix,!plan9
package main
// TODO(mknyszek): Add more terms, approximately 50x more if possible.
var terms = []string{
"water",
"education",
"time",
"pillar",
"genetics",
"philosophy",
"architecture",
"chemistry",
"literature",
"flower",
"oil",
"airplane",
"knowledge",
"technology",
"web",
"programming",
"physics",
"economics",
"garbage",
"television",
"history",
"war",
"earth",
"postage",
"moon",
"1962",
"basketball",
"soccer",
"waves",
"ocean",
"route",
"infrastructure",
"benchmark",
"helmet",
"bone",
"corn",
"taxi",
"corner",
"coroner",
"1981",
"1555",
"converse",
"organization",
"linear",
"correspondance",
"growth",
"capitalism",
"communism",
"show",
"passion",
"banana",
"monday",
"march",
"robot",
"work",
"email",
"collection",
"stamps",
"1886",
"providence",
"intelligence",
"alien",
"survival",
"fear",
"joy",
"accordion",
"tambourine",
"whale",
"dance",
"organism",
"beautiful",
"grace",
"winter",
"path",
"strawberry",
"scarf",
"head",
"snow",
"fall",
"rss",
"atomic",
"hiss",
"snake",
"ornery",
"tedious",
"interface",
"application",
"wikipedia",
"dictionary",
"thesaurus",
"dinosaur",
"meteor",
"island",
"climate",
"nuclear",
"fallout",
"orange",
"disagreement",
"shock",
"lightning",
"thunder",
"elemental",
"substantial",
"disagreement",
"agreement",
"dreams",
"muscle",
"apple",
"trouble",
"clash",
"quarrel",
"quiver",
"appearance",
"scarecrow",
"different",
"jar",
"form",
"style",
"tin",
"awkward",
"sound",
"june",
"rubbish",
"canine",
"teeth",
"aquatic",
"fish",
"riddance",
"good",
"bad",
"morality",
"quality",
"nonsense",
"dump",
"superlative",
"comparison",
"horrendous",
"fantastic",
"excellent",
"go",
"return",
"string",
"qubit",
"bit",
"nibble",
"standard",
"colloquial",
"critic",
"disparage",
"denounce",
"origin",
"exceed",
"expect",
"brain",
"context",
"abstract",
"syntax",
"tree",
"arbor",
"ogre",
"monster",
"sweater",
"clothing",
"apparel",
"shoe",
"foot",
"meter",
"metric",
"ordinary",
"artificer",
"stone",
"granite",
"composite",
"gopher",
"gobble",
"turkey",
"cranberry",
"egg",
"red",
"green",
"yellow",
"blue",
"purple",
"spectrum",
"light",
"luigi",
"space",
"deep",
"extravagant",
"order",
"prime",
"optimal",
"transformer",
"vehicle",
"halo",
"sword",
"shield",
"border",
"land",
"lord",
"rent",
"restore",
"curative",
"herb",
"horror",
"love",
"first",
"dirt",
"rescue",
"volcano",
"avalanche",
"tornado",
"disaster",
"relief",
"terror",
"rehabilitation",
"globe",
"second",
"third",
"direction",
"honey",
"bee",
"thing",
"escape",
"hive",
"horde",
"heavy",
"soft",
"star",
"sun",
"gas",
"astronomy",
"astrology",
"distant",
"speed",
"velocity",
"acceleration",
"mass",
"delta",
"alpha",
"beta",
"gamma",
"omega",
"ray",
"resistance",
"revolution",
"volt",
"electron",
"proton",
"quark",
"ignite",
"collide",
"colloid",
"suspension",
"mechanical",
"force",
"torsion",
"centripetal",
"centrifugal",
"orbit",
"jupiter",
"quantum",
"quantitative",
"state",
"vector",
"matrix",
"tensor",
"calculus",
"lambda",
"machine",
"revolve",
"spin",
"superposition",
"impose",
"crater",
"trench",
"ice",
"iceberg",
"arctic",
"cold",
"hot",
"degree",
"extent",
"span",
"molten",
"core",
"surge",
"tectonic",
"plate",
"fascinate",
}

View File

@ -1,5 +0,0 @@
# fogleman-fauxgl Benchmark
This directory contains a benchmark of Michael Fogleman's FauxGL library which
is an OpenGL-esque software rendering pipeline implemented in pure Go. It
renders a given input mesh 72 times, rotating it by 5 degrees each time.

View File

@ -1,54 +0,0 @@
// Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package main
import (
"flag"
"fmt"
"image"
"os"
"runtime"
"golang.org/x/benchmarks/sweet/benchmarks/internal/driver"
animatebench "golang.org/x/benchmarks/third_party/fogleman-fauxgl"
)
var im image.Image
var imagesPerRotation int
func init() {
flag.IntVar(&imagesPerRotation, "images-per-rotation", 72, "number of images per rotation to generate")
}
func main() {
driver.SetFlags(flag.CommandLine)
flag.Parse()
if flag.NArg() != 1 {
fmt.Fprintln(os.Stderr, "expected input STL file")
os.Exit(1)
}
inc := 360 / imagesPerRotation
// Load mesh into animation structure.
anim, err := animatebench.Load(flag.Arg(0))
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
err = driver.RunBenchmark("FoglemanFauxGLRenderRotateBoat", func(b *driver.B) error {
runtime.GC()
b.ResetTimer()
for i := 0; i < 360; i += inc {
im = anim.RenderNext()
}
return nil
}, driver.InProcessMeasurementOptions...)
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
}

View File

@ -1,5 +0,0 @@
# fogleman-fauxgl Benchmark
This directory contains a benchmark of Michael Fogleman's `pt` library which
is a pure-Go path tracing rendering library. It performs a given number of
rendering iterations on the input mesh (which is expected to be a Go Gopher).

View File

@ -1,58 +0,0 @@
// Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package main
import (
"flag"
"fmt"
"image"
"os"
"runtime"
"golang.org/x/benchmarks/sweet/benchmarks/internal/driver"
ptbench "golang.org/x/benchmarks/third_party/fogleman-pt"
)
var (
iter int
im image.Image
)
func init() {
flag.Usage = func() {
fmt.Fprintf(flag.CommandLine.Output(), "Usage: %s [flags] <gopher.obj>\n", os.Args[0])
flag.PrintDefaults()
}
driver.SetFlags(flag.CommandLine)
flag.IntVar(&iter, "iter", 2, "number of iterations to run renderer for")
}
func main() {
flag.Parse()
if flag.NArg() != 1 {
fmt.Fprintln(os.Stderr, "expected one argument: gopher.obj")
os.Exit(1)
}
// load and transform gopher mesh
gopher, err := ptbench.Load(flag.Arg(0))
if err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
os.Exit(1)
}
name := fmt.Sprintf("FoglemanPathTraceRenderGopherIter%d", iter)
err = driver.RunBenchmark(name, func(b *driver.B) error {
runtime.GC()
b.ResetTimer()
im = gopher.Render(iter)
return nil
}, driver.InProcessMeasurementOptions...)
if err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
os.Exit(1)
}
}

View File

@ -39,24 +39,6 @@ var allBenchmarks = []benchmark{
harness: harnesses.BleveIndex(),
generator: generators.BleveIndex(),
},
{
name: "bleve-query",
description: "Queries a pre-built search index with keywords",
harness: harnesses.BleveQuery(),
generator: generators.BleveQuery{},
},
{
name: "fogleman-fauxgl",
description: "Renders a rotating boat via an OpenGL-like software rendering pipeline",
harness: harnesses.FoglemanFauxGL(),
generator: generators.FoglemanFauxGL(),
},
{
name: "fogleman-pt",
description: "Renders a Go gopher via path tracing",
harness: harnesses.FoglemanPT(),
generator: generators.FoglemanPT(),
},
{
name: "go-build",
description: "Go build command",
@ -104,8 +86,6 @@ var benchmarkGroups = func() map[string][]*benchmark {
allBenchmarksMap["biogo-igor"],
allBenchmarksMap["biogo-krishna"],
allBenchmarksMap["bleve-index"],
allBenchmarksMap["bleve-query"],
allBenchmarksMap["fogleman-pt"],
allBenchmarksMap["go-build"],
allBenchmarksMap["gopher-lua"],
// TODO(go.dev/issue/51445): Enable once gVisor builds with Go 1.19.
@ -113,19 +93,9 @@ var benchmarkGroups = func() map[string][]*benchmark {
allBenchmarksMap["markdown"],
allBenchmarksMap["tile38"],
}
if runtime.GOARCH != "arm64" {
// TODO(go.dev/issue/54760): fogleman-fauxgl hangs on arm64.
m["default"] = append(m["default"], allBenchmarksMap["fogleman-fauxgl"])
}
for i := range allBenchmarks {
switch allBenchmarks[i].name {
case "fogleman-fauxgl":
if runtime.GOARCH == "arm64" {
// TODO(go.dev/issue/54760): fogleman-fauxgl
// hangs on arm64.
continue
}
case "gvisor":
// TODO(go.dev/issue/51445): Include in "all"
// once gVisor builds with Go 1.19.

View File

@ -167,10 +167,10 @@ func TestSweetEndToEnd(t *testing.T) {
sema := semaphore.NewWeighted(2)
var wg sync.WaitGroup
for i, shard := range []string{
"tile38", "go-build", "biogo-igor", "biogo-krishna", "bleve-query",
"tile38", "go-build", "biogo-igor", "biogo-krishna",
// TODO(go.dev/issue/51445): Enable once gVisor builds with Go 1.19.
// "gvisor",
"fogleman-pt", "bleve-index,fogleman-fauxgl,gopher-lua,markdown",
"bleve-index,gopher-lua,markdown",
} {
sema.Acquire(context.Background(), 1)
wg.Add(1)

View File

@ -1,110 +0,0 @@
// Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//go:build !aix && !plan9
// +build !aix,!plan9
package generators
import (
"compress/bzip2"
"io"
"os"
"path/filepath"
"github.com/blevesearch/bleve"
_ "github.com/blevesearch/bleve/analysis/analyzer/keyword"
wikiparse "github.com/dustin/go-wikiparse"
"golang.org/x/benchmarks/sweet/common"
blevebench "golang.org/x/benchmarks/third_party/bleve-bench"
)
// documents is the number of documents to index.
const documents = 25000
// wikiDumpPath is a path to the static asset from
// which we'll build our index.
var wikiDumpPath = filepath.Join("..", "bleve-index", wikiDumpName)
// BleveQuery is a dynamic assets Generator for the bleve-query benchmark.
type BleveQuery struct{}
// Generate creates a persistent index for the Bleve search engine for
// the bleve-query benchmark. It generates this index from a subset of
// the static assets for the bleve-index benchmark, a dump of wikipedia
// from 2008.
func (_ BleveQuery) Generate(cfg *common.GenConfig) (err error) {
// Copy README.md over.
if err := copyFiles(cfg.OutputDir, cfg.AssetsDir, []string{"README.md"}); err != nil {
return err
}
f, err := os.Open(filepath.Join(cfg.AssetsDir, wikiDumpPath))
if err != nil {
return err
}
defer f.Close()
z := bzip2.NewReader(f)
parser, err := wikiparse.NewParser(z)
if err != nil {
return err
}
// Create a new Bleve index with on-disk
// storage in the output directory.
mapping := blevebench.ArticleMapping()
outputDir := filepath.Join(cfg.OutputDir, "index")
index, err := bleve.New(outputDir, mapping)
if err != nil {
return err
}
defer func() {
// Make sure we close the index so the data
// persists to disk.
cerr := index.Close()
if err == nil {
err = cerr
}
}()
todo := ^uint64(0)
if documents >= 0 {
todo = uint64(documents)
}
// Create batches of wikipedia articles
// and index them.
const batchSize = 256
b := index.NewBatch()
for i := uint64(0); i < todo; i++ {
p, err := parser.Next()
if err == io.EOF {
break
} else if err != nil {
return err
}
if len(p.Revisions) == 0 {
continue
}
b.Index(p.Title, blevebench.Article{
Title: p.Title,
Text: p.Revisions[0].Text,
})
if b.Size() >= batchSize {
if err := index.Batch(b); err != nil {
return err
}
b = index.NewBatch()
}
}
if b.Size() != 0 {
if err := index.Batch(b); err != nil {
return err
}
}
return nil
}

View File

@ -1,23 +0,0 @@
// Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//go:build aix || plan9
// +build aix plan9
package generators
import (
"fmt"
"runtime"
"golang.org/x/benchmarks/sweet/common"
)
// BleveQuery is a dynamic assets Generator for the bleve-query benchmark.
type BleveQuery struct{}
// Generate cannot run on these platforms.
func (_ BleveQuery) Generate(_ *common.GenConfig) (err error) {
return fmt.Errorf("platform %s/%s unsupported", runtime.GOOS, runtime.GOARCH)
}

View File

@ -68,23 +68,6 @@ func BleveIndex() common.Generator {
}}
}
func FoglemanFauxGL() common.Generator {
return &copyStatic{assets: []string{
"3dbenchy.stl",
"README.md",
"LICENSE",
}}
}
func FoglemanPT() common.Generator {
return &copyStatic{assets: []string{
"gopher.mtl",
"gopher.obj",
"README.md",
"LICENSE",
}}
}
func GopherLua() common.Generator {
return &copyStatic{
assets: []string{

View File

@ -91,51 +91,6 @@ func BleveIndex() common.Harness {
}
}
func BleveQuery() common.Harness {
return &localBenchHarness{
binName: "bleve-query-bench",
genArgs: func(cfg *common.Config, rcfg *common.RunConfig) []string {
args := []string{filepath.Join(rcfg.AssetsDir, "index")}
if rcfg.Short {
args = append([]string{"-iterations", "1"}, args...)
}
return args
},
beforeRun: func(cfg *common.Config, rcfg *common.RunConfig) error {
// Make sure all the index passed to the benchmark is writeable.
indexPath := filepath.Join(rcfg.AssetsDir, "index")
return makeWriteable(indexPath)
},
}
}
func FoglemanFauxGL() common.Harness {
return &localBenchHarness{
binName: "fogleman-fauxgl-bench",
genArgs: func(cfg *common.Config, rcfg *common.RunConfig) []string {
args := []string{filepath.Join(rcfg.AssetsDir, "3dbenchy.stl")}
if rcfg.Short {
args = append([]string{"-images-per-rotation", "1"}, args...)
}
return args
},
noStdout: true,
}
}
func FoglemanPT() common.Harness {
return &localBenchHarness{
binName: "fogleman-pt-bench",
genArgs: func(cfg *common.Config, rcfg *common.RunConfig) []string {
return []string{
"-iter", "1",
filepath.Join(rcfg.AssetsDir, "gopher.obj"),
}
},
noStdout: true,
}
}
func GopherLua() common.Harness {
return &localBenchHarness{
binName: "gopher-lua-bench",