[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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |