[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH RFC 10/59] controller: First cut at BenchmarkParams



From: George Dunlap <george.dunlap@xxxxxxxxxx>

Struct for configurable worker sets, as well as a set runtime.

Signed-off-by: George Dunlap <george.dunlap@xxxxxxxxxx>
---
 main.go | 75 ++++++++++++++++++++++++++++++++++++++++++++++-------------------
 1 file changed, 53 insertions(+), 22 deletions(-)

diff --git a/main.go b/main.go
index 89e9cf3..7fbb60a 100644
--- a/main.go
+++ b/main.go
@@ -4,7 +4,7 @@ import (
        "fmt"
        "os"
        "os/signal"
-       
+       "time"
 )
 
 type WorkerReport struct {
@@ -18,6 +18,16 @@ type WorkerParams struct {
        Args []string
 }
 
+type WorkerSet struct {
+       Params WorkerParams
+       Count int
+}
+
+type BenchmarkParams struct {
+       Workers []WorkerSet
+       RuntimeSeconds int
+}
+
 type Worker interface {
        SetId(int)
        Init(WorkerParams) error
@@ -75,29 +85,53 @@ const (
        WorkerXen = iota
 )
 
-func NewWorkerList(count int, workerType int) (ws WorkerList, err error) {
+func NewWorkerList(workers []WorkerSet, workerType int) (ws WorkerList, err 
error) {
+       count := 0
+
+       // wsi: WorkerSet index
+       for wsi := range workers {
+               count += workers[wsi].Count
+       }
+
+       fmt.Println("Making ", count, " total workers")
        ws = WorkerList(make([]WorkerState, count))
 
-       for i := 0; i< count; i++ {
-               switch workerType {
-               case WorkerProcess:
-                       ws[i].w = &ProcessWorker{}
-               case WorkerXen:
-                       ws[i].w = &XenWorker{}
-               default:
-                       err = fmt.Errorf("Unknown type: %d", workerType)
-               }
-               ws[i].w.SetId(i)
+       // wli: WorkerList index
+       wli := 0
+       for wsi := range workers {
+               for i := 0; i < workers[wsi].Count; i, wli = i+1, wli+1 {
+                       switch workerType {
+                       case WorkerProcess:
+                               ws[wli].w = &ProcessWorker{}
+                       case WorkerXen:
+                               ws[wli].w = &XenWorker{}
+                       default:
+                               err = fmt.Errorf("Unknown type: %d", workerType)
+                       }
+                       ws[wli].w.SetId(wli)
                
-               ws[i].w.Init(WorkerParams{[]string{"burnwait", "20", 
"20000000"}})
+                       ws[wli].w.Init(workers[wsi].Params)
+               }
        }
        return
 }
 
 func main() {
-       killed := false
-       
-       count := 2
+       bp :=  BenchmarkParams{
+               Workers:[]WorkerSet{
+                       {Params:WorkerParams{[]string{"burnwait", "20", 
"20000000"}},
+                               Count:2},
+                       {Params:WorkerParams{[]string{"burnwait", "10", 
"30000000"}},
+                               Count:3},
+               },
+               RuntimeSeconds:5,
+       }
+
+       Workers, err := NewWorkerList(bp.Workers, WorkerProcess)
+       if err != nil {
+               fmt.Println("Error creating workers: %v", err)
+               return
+       }
        
        report := make(chan WorkerReport)
        done := make(chan bool)
@@ -105,14 +139,10 @@ func main() {
 
        signal.Notify(signals, os.Interrupt)
        
-       Workers, err := NewWorkerList(count, WorkerProcess)
-       if err != nil {
-               fmt.Println("Error creating workers: %v", err)
-               return
-       }
-       
        i := Workers.Start(report, done)
 
+       timeout := time.After(time.Duration(bp.RuntimeSeconds) * time.Second);
+       killed := false
        for i > 0 {
                select {
                case r := <-report:
@@ -121,6 +151,7 @@ func main() {
                        i--;
                        fmt.Println(i, "workers left");
                case <-signals:
+               case <-timeout:
                        if ! killed {
                                fmt.Println("SIGINT receieved, shutting down 
workers")
                                Workers.Stop()
-- 
2.7.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.