|
[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 |