aboutsummaryrefslogtreecommitdiffstats
path: root/examples/cmd/perf-bench/perf-bench.go
diff options
context:
space:
mode:
authorOndrej Fabry <ofabry@cisco.com>2019-02-08 01:16:32 +0100
committerOndrej Fabry <ofabry@cisco.com>2019-02-08 01:16:32 +0100
commitfa21c9d726ebb807895a8571af9a16dab5cd8d6e (patch)
tree4597d483f90e374e89f3923324b531a56217a0f9 /examples/cmd/perf-bench/perf-bench.go
parent8ba70a7b13950593aab9863246f830eda450f06b (diff)
Generator improvements and cleanup
- generator now supports include-comments flag (as opt-in) - minor code cleanup in binapi-generator - remove obsolete unit tests - flatten examples from examples/cmd folder - introduce constant for checking compatibility in future versions Change-Id: I3545f2ba4b869a3b51d6d0de7e742f3f1e1be392 Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
Diffstat (limited to 'examples/cmd/perf-bench/perf-bench.go')
-rw-r--r--examples/cmd/perf-bench/perf-bench.go126
1 files changed, 0 insertions, 126 deletions
diff --git a/examples/cmd/perf-bench/perf-bench.go b/examples/cmd/perf-bench/perf-bench.go
deleted file mode 100644
index 664f046..0000000
--- a/examples/cmd/perf-bench/perf-bench.go
+++ /dev/null
@@ -1,126 +0,0 @@
-// Copyright (c) 2017 Cisco and/or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at:
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Binary simple-client is an example VPP management application that exercises the
-// govpp API on real-world use-cases.
-package main
-
-import (
- "flag"
- "fmt"
- "log"
- "time"
-
- "github.com/pkg/profile"
- "github.com/sirupsen/logrus"
-
- "git.fd.io/govpp.git"
- "git.fd.io/govpp.git/api"
- "git.fd.io/govpp.git/core"
- "git.fd.io/govpp.git/examples/bin_api/vpe"
-)
-
-const (
- defaultSyncRequestCount = 1000
- defaultAsyncRequestCount = 10000
-)
-
-func main() {
- // parse optional flags
- var sync, prof bool
- var cnt int
- flag.BoolVar(&sync, "sync", false, "run synchronous perf test")
- flag.IntVar(&cnt, "count", 0, "count of requests to be sent to VPP")
- flag.BoolVar(&prof, "prof", false, "generate profile data")
- flag.Parse()
-
- if cnt == 0 {
- // no specific count defined - use defaults
- if sync {
- cnt = defaultSyncRequestCount
- } else {
- cnt = defaultAsyncRequestCount
- }
- }
-
- if prof {
- defer profile.Start().Stop()
- }
-
- // log only errors
- core.SetLogger(&logrus.Logger{Level: logrus.ErrorLevel})
-
- // connect to VPP
- conn, err := govpp.Connect("")
- if err != nil {
- log.Fatalln("Error:", err)
- }
- defer conn.Disconnect()
-
- // create an API channel
- ch, err := conn.NewAPIChannelBuffered(cnt, cnt)
- if err != nil {
- log.Fatalln("Error:", err)
- }
- defer ch.Close()
-
- // run the test & measure the time
- start := time.Now()
-
- if sync {
- // run synchronous test
- syncTest(ch, cnt)
- } else {
- // run asynchronous test
- asyncTest(ch, cnt)
- }
-
- elapsed := time.Since(start)
- fmt.Println("Test took:", elapsed)
- fmt.Printf("Requests per second: %.0f\n", float64(cnt)/elapsed.Seconds())
-}
-
-func syncTest(ch api.Channel, cnt int) {
- fmt.Printf("Running synchronous perf test with %d requests...\n", cnt)
-
- for i := 0; i < cnt; i++ {
- req := &vpe.ControlPing{}
- reply := &vpe.ControlPingReply{}
-
- if err := ch.SendRequest(req).ReceiveReply(reply); err != nil {
- log.Fatalln("Error in reply:", err)
- }
- }
-}
-
-func asyncTest(ch api.Channel, cnt int) {
- fmt.Printf("Running asynchronous perf test with %d requests...\n", cnt)
-
- ctxChan := make(chan api.RequestCtx, cnt)
-
- go func() {
- for i := 0; i < cnt; i++ {
- ctxChan <- ch.SendRequest(&vpe.ControlPing{})
- }
- close(ctxChan)
- fmt.Printf("Sending asynchronous requests finished\n")
- }()
-
- for ctx := range ctxChan {
- reply := &vpe.ControlPingReply{}
- if err := ctx.ReceiveReply(reply); err != nil {
- log.Fatalln("Error in reply:", err)
- }
- }
-}