Skip to content

Commit 1837711

Browse files
committed
Retreive Edge and remote execution times in ILPOffloadingPolicy
1 parent 5c5653c commit 1837711

4 files changed

Lines changed: 57 additions & 29 deletions

File tree

internal/metrics/metrics.go

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package metrics
22

33
import (
4+
"fmt"
45
"log"
56

67
"net/http"
@@ -46,11 +47,28 @@ var (
4647
)
4748

4849
type RetrievedMetrics struct {
49-
Completions map[string]float64
50-
AvgExecutionTime map[string]float64
51-
AvgExecutionTimeAllNodes map[string]map[string]float64
52-
AvgOutputSize map[string]float64
53-
BranchFrequency map[string]map[string]float64
50+
Completions map[string]float64
51+
//AvgExecutionTime map[string]float64
52+
AvgRemoteExecutionTime map[string]float64
53+
AvgEdgeExecutionTime map[string]map[string]float64
54+
AvgOutputSize map[string]float64
55+
BranchFrequency map[string]map[string]float64
56+
}
57+
58+
func (r RetrievedMetrics) String() string {
59+
s := ""
60+
s += "COMPLETIONS:\n"
61+
s += fmt.Sprintf(" %v\n\n", r.Completions)
62+
s += "REMOTE EXEC TIMES:\n"
63+
s += fmt.Sprintf(" %v\n\n", r.AvgRemoteExecutionTime)
64+
s += "EDGE EXEC TIMES:\n"
65+
s += fmt.Sprintf(" %v\n\n", r.AvgEdgeExecutionTime)
66+
s += "OUTPUT SIZE:\n"
67+
s += fmt.Sprintf(" %v\n\n", r.AvgOutputSize)
68+
s += "BRANCH FREQ:\n"
69+
s += fmt.Sprintf(" %v\n\n", r.BranchFrequency)
70+
71+
return s
5472
}
5573

5674
func Init() {

internal/metrics/retriever.go

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package metrics
33
import (
44
"context"
55
"fmt"
6+
"github.com/serverledge-faas/serverledge/internal/registration"
67
"log"
78
"time"
89

@@ -176,21 +177,13 @@ func MetricsRetriever() {
176177
}
177178
retrievedMetrics.Completions = completionsPerFunction
178179

179-
query = fmt.Sprintf("%s_sum{node=\"%s\"}/%s_count{node=\"%s\"}",
180-
EXECUTION_TIME, node.LocalNode, EXECUTION_TIME, node.LocalNode)
181-
avgFunDuration, err := retrieveByFunction(query, api, ctx)
182-
if err != nil {
183-
log.Printf("Error in retrieveByFunction: %v", err)
184-
}
185-
retrievedMetrics.AvgExecutionTime = avgFunDuration
186-
187-
// TODO: is this needed?
188-
query = fmt.Sprintf("%s_sum{}/%s_count{}", EXECUTION_TIME, EXECUTION_TIME)
189-
avgFunDurationAllNodes, err := retrieveByFunctionAndNode(query, api, ctx)
190-
if err != nil {
191-
log.Printf("Error in retrieveByFunction: %v", err)
192-
}
193-
retrievedMetrics.AvgExecutionTimeAllNodes = avgFunDurationAllNodes
180+
//query = fmt.Sprintf("%s_sum{node=\"%s\"}/%s_count{node=\"%s\"}",
181+
// EXECUTION_TIME, node.LocalNode, EXECUTION_TIME, node.LocalNode)
182+
//avgFunDuration, err := retrieveByFunction(query, api, ctx)
183+
//if err != nil {
184+
// log.Printf("Error in retrieveByFunction: %v", err)
185+
//}
186+
//retrievedMetrics.AvgExecutionTime = avgFunDuration
194187

195188
query = fmt.Sprintf("%s_sum{}/%s_count{}", OUTPUT_SIZE, OUTPUT_SIZE)
196189
avgOutputSize, err := retrieveByFunction(query, api, ctx)
@@ -206,18 +199,28 @@ func MetricsRetriever() {
206199
}
207200
retrievedMetrics.BranchFrequency = frequencyPerTaskAndNextOne
208201

202+
// Execution time on Edge peers
203+
localArea := registration.SelfRegistration.Area
204+
query = fmt.Sprintf("%s_sum{node=~\"\\\\(%s\\\\).*\"}/%s_count{node=~\"\\\\(%s\\\\).*\"}",
205+
EXECUTION_TIME, localArea, EXECUTION_TIME, localArea)
206+
avgFunDurationAllNodes, err := retrieveByFunctionAndNode(query, api, ctx)
207+
if err != nil {
208+
log.Printf("Error in retrieveByFunction: %v", err)
209+
}
210+
retrievedMetrics.AvgEdgeExecutionTime = avgFunDurationAllNodes
211+
209212
// CLOUD
210213
cloudArea := config.GetString(config.REGISTRY_REMOTE_AREA, "")
211214
if cloudArea != "" {
212-
log.Printf("Retrieved cloudarea %s", cloudArea)
213215
query = fmt.Sprintf("%s_sum{node=~\"\\\\(%s\\\\).*\"}/%s_count{node=~\"\\\\(%s\\\\).*\"}",
214216
EXECUTION_TIME, cloudArea, EXECUTION_TIME, cloudArea)
215217
avgFunDuration, err := retrieveByFunction(query, api, ctx)
216218
if err != nil {
217219
log.Printf("Error in retrieveByFunction: %v", err)
218220
}
219-
fmt.Println(avgFunDuration)
220-
// TODO: use this information
221+
retrievedMetrics.AvgRemoteExecutionTime = avgFunDuration
222+
} else {
223+
retrievedMetrics.AvgRemoteExecutionTime = make(map[string]float64)
221224
}
222225

223226
fmt.Println("All queries completed")

internal/workflow/ilp_offloading_policy.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -190,25 +190,32 @@ func (policy *IlpOffloadingPolicy) Evaluate(r *Request, p *Progress) (Offloading
190190
}
191191

192192
// Execution Times
193-
retrievedTimes := metrics.GetMetrics().AvgExecutionTimeAllNodes
193+
retrievedMetrics := metrics.GetMetrics()
194194
for tid, task := range r.W.Tasks {
195195
ft, ok := task.(*FunctionTask)
196196
if ok {
197197
f, _ := function.GetFunction(ft.Func)
198198
for _, n := range params.EdgeNodes {
199-
nodeTimes, found := retrievedTimes[n]
199+
nodeTimes, found := retrievedMetrics.AvgEdgeExecutionTime[n]
200200
if !found {
201-
params.ExecTime[tupleKey(string(tid), n)] = 1 // TODO: just guessing
201+
params.ExecTime[tupleKey(string(tid), n)] = 1 // no data: just guessing
202202
continue
203203
}
204204
t, found := nodeTimes[f.Name]
205205
if found {
206206
params.ExecTime[tupleKey(string(tid), n)] = t
207207
} else {
208-
params.ExecTime[tupleKey(string(tid), n)] = 1 // TODO: just guessing
208+
params.ExecTime[tupleKey(string(tid), n)] = 1 // no data: just guessing
209209
}
210210
}
211-
params.ExecTime[tupleKey(string(tid), CLOUD)] = 0.1 // TODO: how to retrieve cloud metrics? cloud nodes should use unique identifier??
211+
212+
// Cloud
213+
t, found := retrievedMetrics.AvgRemoteExecutionTime[f.Name]
214+
if found {
215+
params.ExecTime[tupleKey(string(tid), CLOUD)] = t
216+
} else {
217+
params.ExecTime[tupleKey(string(tid), CLOUD)] = 1 // no data: just guessing
218+
}
212219
} else {
213220
for _, n := range params.EdgeNodes {
214221
params.ExecTime[tupleKey(string(tid), n)] = 0.0001

internal/workflow/workflow.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ import (
1212

1313
"log"
1414

15-
"github.com/serverledge-faas/serverledge/internal/config"
1615
"github.com/serverledge-faas/serverledge/internal/client"
16+
"github.com/serverledge-faas/serverledge/internal/config"
1717
"github.com/serverledge-faas/serverledge/internal/metrics"
1818
"golang.org/x/exp/slices"
1919

0 commit comments

Comments
 (0)