diff --git a/api/proto/gosdn/networkelement/networkelement.proto b/api/proto/gosdn/networkelement/networkelement.proto
index 34b4ec2add78faa304c3c70afefa966d770d58c3..2ce4e5df736ff187bbf54caa909eaa3f3c014d5d 100644
--- a/api/proto/gosdn/networkelement/networkelement.proto
+++ b/api/proto/gosdn/networkelement/networkelement.proto
@@ -389,4 +389,4 @@ message SubscribePathRequest {
 message SubscribePathResponse {
   int64 timestamp = 1; // Timestamp in nanoseconds since Epoch.
   repeated gnmi.Notification mne_notification = 2;
-}
\ No newline at end of file
+}
diff --git a/applications/rtdt-manager/rtdt-manager/rtdt-manager.go b/applications/rtdt-manager/rtdt-manager/rtdt-manager.go
index 5c136713914689d9fb3a6bb0638fcccbba9bf888..d08f800f64f180558ce73575eacf58221be96b84 100644
--- a/applications/rtdt-manager/rtdt-manager/rtdt-manager.go
+++ b/applications/rtdt-manager/rtdt-manager/rtdt-manager.go
@@ -277,7 +277,7 @@ func (r *RtdtManager) RunBenchmark0(numTests int64) error {
 		if err != nil {
 			fmt.Printf("Encountered error: %v\n", err)
 		}
-		time.Sleep(time.Second * 1)
+		time.Sleep(time.Second * 2)
 	}
 	r.benchmark0 = false
 	return nil
diff --git a/controller/benchmark/benchmark.go b/controller/benchmark/benchmark.go
new file mode 100644
index 0000000000000000000000000000000000000000..2ce9a7d405eca726ea8a20e7d6d4279ec7d22a80
--- /dev/null
+++ b/controller/benchmark/benchmark.go
@@ -0,0 +1,53 @@
+package rtdt_benchmark
+
+import (
+	"encoding/json"
+	"fmt"
+	"os"
+	"time"
+)
+
+type Rtdt_Benchmark struct {
+	CtlRcvPathRequest   time.Time
+	CtlRcvCommitRequest time.Time
+	CtlSendGnmi         time.Time
+	CtlRcvGnmi          time.Time
+}
+
+var CurrentBenchmark Rtdt_Benchmark
+
+func AppendToJsonFile(r *Rtdt_Benchmark) {
+	var benchmarks []Rtdt_Benchmark
+	if _, err := os.Stat("/app/gosdn_share/measure_controller.json"); err == nil {
+		data, err := os.ReadFile("/app/gosdn_share/measure_controller.json")
+		if err != nil {
+			fmt.Println("Error reading file:", err)
+			return
+		}
+		if len(data) > 0 {
+			err = json.Unmarshal(data, &benchmarks)
+			if err != nil {
+				fmt.Println("Error unmarshaling JSON:", err)
+				return
+			}
+		}
+	} else if !os.IsNotExist(err) {
+		fmt.Println("Error checking file status:", err)
+		return
+	}
+
+	// Append the new benchmark
+	benchmarks = append(benchmarks, *r)
+
+	// Marshal and write back to file
+	outData, err := json.MarshalIndent(benchmarks, "", "  ")
+	if err != nil {
+		fmt.Println("Error marshaling JSON:", err)
+		return
+	}
+
+	err = os.WriteFile("/app/gosdn_share/measure_controller.json", outData, 0644)
+	if err != nil {
+		fmt.Println("Error writing to file:", err)
+	}
+}
diff --git a/controller/northbound/server/networkElement.go b/controller/northbound/server/networkElement.go
index 6ea85a4895a51a448c829984fbf064474addea89..4ce53396dd59ce9c4ffa93245c0f96651aa45457 100644
--- a/controller/northbound/server/networkElement.go
+++ b/controller/northbound/server/networkElement.go
@@ -10,6 +10,7 @@ import (
 	plugin_registry "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/plugin-registry"
 	ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd"
 	tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport"
+	rtdt_benchmark "code.fbi.h-da.de/danet/gosdn/controller/benchmark"
 	"code.fbi.h-da.de/danet/gosdn/controller/config"
 	"code.fbi.h-da.de/danet/gosdn/controller/conflict"
 	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
@@ -712,6 +713,8 @@ func (n *NetworkElementServer) initialNetworkElementRootPathRequest(ctx context.
 // SetChangeList sets a list of changes.
 func (n *NetworkElementServer) SetChangeList(ctx context.Context, request *mnepb.SetChangeListRequest) (*mnepb.SetChangeListResponse, error) {
 	labels := prometheus.Labels{"service": "mne", "rpc": "set"}
+	rtdt_benchmark.CurrentBenchmark.CtlRcvCommitRequest = time.Now()
+
 	start := metrics.StartHook(labels, grpcRequestsTotal)
 	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
 
@@ -748,6 +751,7 @@ func (n *NetworkElementServer) SetChangeList(ctx context.Context, request *mnepb
 			Id: cuid.String(),
 		}
 	}
+    rtdt_benchmark.AppendToJsonFile(&rtdt_benchmark.CurrentBenchmark)
 	return &mnepb.SetChangeListResponse{
 		Timestamp: time.Now().UnixNano(),
 		Responses: responses,
@@ -800,6 +804,8 @@ func (n *NetworkElementServer) Confirm(u uuid.UUID) error {
 
 // SetPathList sets a list of paths.
 func (n *NetworkElementServer) SetPathList(ctx context.Context, request *mnepb.SetPathListRequest) (*mnepb.SetPathListResponse, error) {
+	rtdt_benchmark.CurrentBenchmark = rtdt_benchmark.Rtdt_Benchmark{}
+	rtdt_benchmark.CurrentBenchmark.CtlRcvPathRequest = time.Now()
 	labels := prometheus.Labels{"service": "mne", "rpc": "set"}
 	start := metrics.StartHook(labels, grpcRequestsTotal)
 	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
diff --git a/controller/nucleus/gnmi_transport.go b/controller/nucleus/gnmi_transport.go
index f25f8c0093e828916bb5c0fe88defcb3b22cd6f1..4abf8de429cdfa922d20a38bd46b0ffa031c502f 100644
--- a/controller/nucleus/gnmi_transport.go
+++ b/controller/nucleus/gnmi_transport.go
@@ -6,6 +6,7 @@ import (
 	"os"
 	"time"
 
+	rtdt_benchmark "code.fbi.h-da.de/danet/gosdn/controller/benchmark"
 	"code.fbi.h-da.de/danet/gosdn/controller/config"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/change"
 	tpInterface "code.fbi.h-da.de/danet/gosdn/controller/interfaces/transport"
@@ -124,7 +125,9 @@ func (g *Gnmi) applyDiff(ctx context.Context, payload change.Payload) error {
 		Update: updates,
 	}
 
+	rtdt_benchmark.CurrentBenchmark.CtlSendGnmi = time.Now()
 	resp, err := g.client.Set(ctx, setRequest)
+	rtdt_benchmark.CurrentBenchmark.CtlRcvGnmi = time.Unix(0, resp.Timestamp)
 	if err != nil {
 		return err
 	}