beam-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Work logged] (BEAM-4727) Reduce metrics overhead
Date Tue, 31 Jul 2018 18:35:01 GMT

     [ https://issues.apache.org/jira/browse/BEAM-4727?focusedWorklogId=129428&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-129428
]

ASF GitHub Bot logged work on BEAM-4727:
----------------------------------------

                Author: ASF GitHub Bot
            Created on: 31/Jul/18 18:34
            Start Date: 31/Jul/18 18:34
    Worklog Time Spent: 10m 
      Work Description: lostluck commented on a change in pull request #5884: [BEAM-4727]
Re-use metric context throughout bundle
URL: https://github.com/apache/beam/pull/5884#discussion_r206610122
 
 

 ##########
 File path: sdks/go/pkg/beam/core/metrics/metrics.go
 ##########
 @@ -69,18 +69,58 @@ type ctxKey string
 const bundleKey ctxKey = "beam:bundle"
 const ptransformKey ctxKey = "beam:ptransform"
 
+// context is a caching context since reads & writes are expensive.
+type beamCtx struct {
+	context.Context
+	bundleID, ptransformID string
+}
+
+// Lift the keys value for faster lookups when not available.
+func (ctx *beamCtx) Value(key interface{}) interface{} {
+	switch key {
+	case bundleKey:
+		if ctx.bundleID == "" {
+			if id := ctx.Value(key); id != nil {
+				ctx.bundleID = id.(string)
+			}
+		}
+		return ctx.bundleID
+	case ptransformKey:
+		if ctx.ptransformID == "" {
+			if id := ctx.Value(key); id != nil {
+				ctx.ptransformID = id.(string)
+			}
+		}
+		return ctx.ptransformID
+	}
+	return ctx.Context.Value(key)
+}
+
 // SetBundleID sets the id of the current Bundle.
 func SetBundleID(ctx context.Context, id string) context.Context {
-	return context.WithValue(ctx, bundleKey, id)
+	var ptransformID string
+	if bctx, ok := ctx.(*beamCtx); ok {
 
 Review comment:
   Done.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Issue Time Tracking
-------------------

    Worklog Id:     (was: 129428)
    Time Spent: 3h  (was: 2h 50m)

> Reduce metrics overhead
> -----------------------
>
>                 Key: BEAM-4727
>                 URL: https://issues.apache.org/jira/browse/BEAM-4727
>             Project: Beam
>          Issue Type: Sub-task
>          Components: sdk-go
>            Reporter: Robert Burke
>            Assignee: Robert Burke
>            Priority: Major
>          Time Spent: 3h
>  Remaining Estimate: 0h
>
> There are a few opportunities to avoid metrics overhead.
> First when setting state in the context, we allocate a new one for the stored value,
per element. This generates a fair amount of objects for the garbage collector too. If we
retain and re-use contexts within a bundle, we would have the opportunity to save on these
costs.
> Also, it's possible that we have overhead on the metric updating paths. We can possibly
do better than the general sync.Map, and avoid the type assertion cost for extracting values
of known types from the maps.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Mime
View raw message